[MATLAB 6 自由度ロボット] 運動学ポジティブ ソリューション (MATLAB ロボット ポジティブ ソリューションの完全なコード付き)

過去のレビュー

【まとめ】

関連リソース:

【Matlab 6 自由度ロボット】シリーズ記事まとめ \fcolorbox{green}{aqua}{【Matlab 6 自由度ロボット】シリーズ記事まとめ }MAT LAB 6自由ロボットシリーズ記事  まとめ_ _ _

【本線】

  1. 標準および改良された DH パラメータを定義し、ロボット モデルを確立します。
  2. 運動学の正解
  3. モンテカルロ法に基づくロボット作業空間の構築

【補足説明】

  1. フレキシブル ワークスペースとアクセス可能なワークスペースについての理解
  2. 修正された DH パラメータの詳細な確立手順 (修正された Denavit-Hartenberg)
  3. 回転のパラメータ化 (オイラー角、姿勢角、四元数) に関する質問
  4. 2重変数関数atan2(x,y)の説明
  5. ロボット運動学の逆解​​に関するいくつかの問題

序文

この記事では、ロボット運動学の正解法に関連する問題、順運動学を理解する方法、およびロボット運動学の正解法を解くための DH パラメーターの使用方法を紹介します。


以下は、肯定的な解決策の意味の理解とコードの段階的な分析を含む、この記事の本文です。

文章

1. 運動学の正解

定義: 各ジョイントの動作パラメータがわかったら、参照座標系に対するエンド エフェクタの姿勢を見つけます。

解決手順:

  • コネクティングロッドは端と端で接続されています。
  • コネクティングロッド間の均一変換行列を決定します。
  • 最終的な合計変換行列を取得します。

そして、全体の変換行列における未知数は、回転角度, したがって、回転角度を取得することで、6 自由度ロボットの終端直交空間座標を取得できます。

1. 同次変換行列

前回の記事では、Matlab が 6 自由度のロボット モデルを確立し、ロボットのDHパラメーターを定義する方法とzi z_{i}を設定する方法を詳しく説明しました。z私は軸等、ここでは内容の一部のみを記載しております。
DH パラメータの符号規則

DH 規約パラメータ 表記規則
私は 関節角度关节转角
DDd リンクオフセット连杆偏移
ああある リンクの長さ连杆长度
α ( アルファ ) α(アルファ)a (アルファ) _ _ _ _ リンクツイスト连杆扭角
DH パラメータの策定手順の規則
  • パラメータaaaは軸z 0 z_{0}z0和轴 z 1 z_{1} z1軸に沿ったx 1 x_{1}の間バツ1測定された距離。
  • 角度α ααはx 1 x_{1}に垂直ですバツ1平面z 0 z_{0}で測定された軸 zz0 z 1 z_{1} z1間の角度。角度α ααの正の値は、z 0 z_{0}からと定義されます。z0z 1 z_{1}z1、右手の法則によって決定されます。
  • パラメータdddは原点o 0 o_{0}ああ0x 1 x_{1}までバツ1 z 0 z_{0} z0z 0 z_{0}に沿った交点間の距離z0軸は測定されます。
  • 私はθ はz 0 z_{0}に垂直ですz0x_{0} の平面内の x 0から測定バツ0x 1 x_{1}バツ1角度。

上記の記号規約とプログラム規則を理解した上で、これに基づいて各同次変換行列T i T_{i}T私は基本行列の積として表現できます。

  • 对于标准型D-H参数
    それか製品の注文以下:
    i − 1 Ti = Rot ( z , θ i ) × Trans( z , di ) × Transs ( x , ai ) × Ro ot ( x , α i ) ^{i-1}T_i =Rot(z_,θ_i)×Trans(z,d_i)×Trans(x_,a_i)×Rot(x,α_i)i 1 T私は=ロットz _ _私は)×トランス( z d _ _ _ _私は)×トランス( x _ _ _ _ある私は)×R o t ( x α私は)
    ユニバーサル同次変換行列如下:
    i − 1 T i = ^{i-1}T_i = i 1 T私は= [ cos θ i − sin θ icos α isin θ isin α iaicos θ isin θ icos θ icos α i − cos θ isin α iaisin θ i 0 sin α icos α idi 0 0 0 1 ] \left[ \begin{matrix} cosθ_i&-sinθ_icosα_i&sinθ_isinα_i &a_{i}cosθ_i \\ sinθ_i&cosθ_icosα_i&-cosθ_isinα_i&a_{i}sinθ_i\\ 0&sinα_i&cosα_i&d_{i} \\ 0&0&0&1 \end{行列} \right]c o s θ私はサインθ _ _私は00s i n θ私はコスα _ _私はc o s θ私はコスα _ _私はα_ _ _ _私は0サインθ _ _私はα_ _ _ _私はc o s θ私はα_ _ _ _私はコスα _ _私は0ある私はc o s θ私はある私はサインθ _ _私はd私は1
  • 对于改进型D-H参数
    それか製品の注文以下:
    i − 1 T i = R ot ( xi , α i − 1 ) × Trans( xi , ai − 1 ) × R ot ( zi , θ i ) × T rans ( zi , di ) ^{i-1}T_i =Rot(x_{i},α_{i-1})×Trans(x_{i},a_{i-1})×Rot(z_ {i},θ_i)×Trans(z_{i},d_i)i 1 T私は=R o t ( x私は_i 1)×トランス( x _ _ _ _私は_i 1)×ロットz _ _私は私は)×トランス( z _ _ _ _私はd私は)
    ユニバーサル同次変換行列如下:
    i − 1 T i = ^{i-1}T_i = i 1 T私は= [ cos θ i − sin θ i 0 aisin θ icos α icos θ icos α i − sin α i − sin α idisin θ isin α icos θ isin α icos α icos α idi 0 0 0 1 ] \left[ \begin{matrix} cosθ_i&-sinθ_i&0&a_{i} \\ sinθ _icosα_{i}&cosθ_icosα_{i}&-sinα_{i}&-sinα_{i}d_{i} \\ sinθ_isinα_{i}&cosθ_isinα_{i}&cosα_{i}&cosα_{i}d_{i} \\ 0&0&0&1 \end{行列} \right]c o s θ私はサインθ _ _私はコスα _ _私はサインθ _ _私はα_ _ _ _私は0s i n θ私はc o s θ私はコスα _ _私はc o s θ私はα_ _ _ _私は00-シンα _ _私はコスα _ _私は0ある私は-シンα _ _私はd私はコスα _ _私はd私は1

2. 全体的な変革

OKDHパラメータ設定方法各関節のDHパラメータを構築した後、それらをそれぞれの一般同次変換行列に代入して0 T 1 ^{0}T_1を取得します。0T _11 T 2 ^{1}T_21T _22 T 3 ^{2}T_32T_ _33 T 4 ^{3}T_43T_ _44 T 5 ^{4}T_54T _55 T 6 ^{5}T_65T _6合計 6 つの行列があります。ここで作者が選んだのは、DHパラメータの改善したがって、それぞれの行列は次のようになります:
0 T 1 = ^{0}T_1 =0T _1= [cosθ1 - sinθ10 a 1cosα1sinθ1cosα1cosθ1-sinα1-d 1sinα1sinα1sinθ1sinα1cosθ1cosα1d 1cosα10 0 _1cosθ_1&-sinα_1&-d_ {1}sinα_1\\sinα_{1}sinθ_1&sinα_{1}cosθ_1&cosα_{1}&d_ {1}cosα_{1} \\ 0&0&0&1 \ end {matrix} \ right]c o s θ1コスα _ _1サインθ _ _1α_ _ _ _1サインθ _ _10s i n θ1コスα _ _1c o s θ1α_ _ _ _1c o s θ100-シンα _ _1コスα _ _10ある1d1α_ _ _ _1d1コスα _ _11
1 T 2 = ^{1}T_2 =1T _2= [ cos θ 2 − sin θ 2 0 a 2 cos α 2 sin θ 2 cos α 2 cos θ 2 − sin α 2 − d 2 sin α 2 sin α 2 sin θ 2 sin α 2 cos θ 2 cos α 2 d 2 cos α 2 0 0 0 1 ] \left[ \begin{matrix} cos θ_ 2&-sinθ_2&0&a_2 \\ cosα_2sinθ_2&cosα_2cosθ_2&-sinα_2&-d_{2}sin_2\\ sinα_{2}sinθ_2&sinα_{2}cosθ_2&cosα_{2}&d_{2} cosα_{2}\\ 0&0&0&1 \end{行列} \right]c o s θ2コスα _ _2サインθ _ _2α_ _ _ _2サインθ _ _20s i n θ2コスα _ _2c o s θ2α_ _ _ _2c o s θ200-シンα _ _2コスα _ _20ある2d2α_ _ _ _2d2コスα _ _21
2 T 3 = ^{2}T_3 =2T_ _3= [cosθ3 - sinθ30 a 3cosα3sinθ3cosα3cosθ3-sinα3 - d 3sinα3sinα3sinθ3sinα3cosθ3cosα3d 3cosα300 0 1] \ lept [\ begin {matrix} _3COSθ_3&-sinα_3&-d_ {3}sinα_3\\sinα_{3}sinθ_3&sinα_{3}cosθ_3&cosα_{3}&d_ {3}cosα_{3} \\ 0&0&0&1 \ end {matrix} \ right]c o s θ3コスα _ _3サインθ _ _3α_ _ _ _3サインθ _ _30s i n θ3コスα _ _3c o s θ3α_ _ _ _3c o s θ300-シンα _ _3コスα _ _30ある3d3α_ _ _ _3d3コスα _ _31
3 T 4 = ^{3}T_4 =3T_ _4= [ cos θ 4 − sin θ 4 0 a 4 cos α 4 sin θ 4 cos α 4 cos θ 4 − sin α 4 − d 4 sin α 4 sin α 4 sin θ 4 sin α 4 cos θ 4 cos α 4 d 4 cos α 4 0 0 0 1 ] \left[ \begin{matrix} cos θ_ 4&-sinθ_4&0&a_4 \\ cosα_4sinθ_4&cosα_4cosθ_4&-sinα_4&-d_{4}sin_4\\ sinα_{4}sinθ_4&sinα_{4}cosθ_4&cosα_{4}&d_{4} cosα_{4}\\ 0&0&0&1 \end{行列} \right]c o s θ4コスα _ _4サインθ _ _4α_ _ _ _4サインθ _ _40s i n θ4コスα _ _4c o s θ4α_ _ _ _4c o s θ400-シンα _ _4コスα _ _40ある4d4α_ _ _ _4d4コスα _ _41
4 T 5 = ^{4}T_5 =4T _5= [ cos θ 5 − sin θ 5 0 a 5 cos α 5 sin θ 5 cos α 5 cos θ 5 − sin α 5 − d 5 sin α 5 sin α 5 sin θ 5 sin α 5 cos θ 5 cos α 5 d 5 cos α 5 0 0 0 1 ] \left[ \begin{matrix} cos θ_ 5&-sinθ_5&0&a_5 \\ cosα_5sinθ_5&cosα_5cosθ_5&-sin_5&-d_{5}sin_5\\ sinα_{5}sinθ_5&sinα_{5}cosθ_5&cosα_{5}&d_{5} cosα_{5}\\ 0&0&0&1 \end{行列} \right]c o s θ5コスα _ _5サインθ _ _5α_ _ _ _5サインθ _ _50s i n θ5コスα _ _5c o s θ5α_ _ _ _5c o s θ500-シンα _ _5コスα _ _50ある5d5α_ _ _ _5d5コスα _ _51
5 T 6 = ^{5}T_6 =5T _6= [cosθ6 - sinθ60 a 6cosα6sinθ6cosα6cosθ6-sinα6-d 6sinα6sinα6sinθ6sinα6cosθ6cosα6d 6cosα60 0 0 1] \左[\ begin {matrix} _6cosθ_6&-sinα_6&-d_ {6}sinα_6\\sinα_{6}sinθ_6&sinα_{6}cosθ_6&cosα_{6}&d_ {6}cosα_{6} \\ 0&0&0&1 \ end {matrix} \ right]c o s θ6コスα _ _6サインθ _ _6α_ _ _ _6サインθ _ _60s i n θ6コスα _ _6c o s θ6α_ _ _ _6c o s θ600-シンα _ _6コスα _ _60ある6d6α_ _ _ _6d6コスα _ _61

6 つの同次変換行列を乗算して、6 自由度のロボットを取得します。合計変換:
0 T 6 = ^{0}T_6 =0T _6= 0 T 1 × ^{0}T_1×0T _1× 1 T 2 × ^{1}T_2×1T _2× 2 T 3 × ^{2}T_3×2T_ _3× 3 T 4 × ^{3}T_4×3T_ _4× 4 T 5 × ^{4}T_5×4T _5× 5 T 6 = ^{5}T_6=5T _6= [ 概要 zpz 0 0 0 1 ] \left[ \begin{行列} n_x&o_x&a_x&p_x \\ n_y&o_y&a_y&p_y\\ n_z&o_z&a_z&p_z \\ 0&0&0&1 \end{行列} \right]n×nはいnz0ああ×ああはいああz0ある×あるはいあるz0p×pはいpz1

2. コードの実装

1. 各コンロッドのパラメータを定義します

コネクティングロッドパラメータのシンボリック変数の定義は次のとおりです。ふたつのやり方、コードは以下のように表示されます:

最初の方法すべてのパラメータを未知数として定義することです

syms   theta1   d1    a1     alpha1;
syms   theta2   d2    a2     alpha2;
syms   theta3   d3    a3     alpha3;
syms   theta4   d4    a4     alpha4;
syms   theta5   d5    a5     alpha5;
syms   theta6   d6    a6     alpha6;

ただし、未知数を設定しすぎると全体の変換結果が長くなりすぎるため、ここで設定します。2番目の方法複雑な結果を避けるために、前の記事の Matlab を参照して、次のパラメーターに対して 6 自由度のロボット モデルを確立してください。

%连杆偏移
d1 = 398;
d2 = -0.299;
d3 = 0;
d4 = 556.925;
d5 = 0;
d6 = 165;
%连杆长度
a1 = 0;
a2 = 168.3;
a3 = 650.979;
a4 = 156.240;
a5 = 0;
a6 = 0;
%连杆扭角
alpha1 = 0;
alpha2 = pi/2;
alpha3 = 0;
alpha4 = pi/2;
alpha5 = -pi/2;
alpha6 = pi/2;
%由于我们需要分析各轴θi所对应的机器人末端位置
%因此theta1 theta2 theta3 theta4 theta5 theta6仍设为未知量
syms theta1 theta2 theta3 theta4 theta5 theta6

上記のパラメータ設定で、次のパラメータは同次変換行列設定。

2. 同次変換行列と全変換

まず、各パラメータが統一されたマトリックスにまとめられます。これは、その後のパラメータ分析に便利です。引用

% 参数矩阵取名为MDH
MDH = [theta1          d1       a1       alpha1;
       theta2+pi/2     d2       a2       alpha2;    
       theta3          d3       a3       alpha3;
       theta4          d4       a4       alpha4;
       theta5          d5       a5       alpha5;
       theta6          d6       a6       alpha6];

知らせ!著者の 6DOF ロボットにはジョイント変数オフセットtheta2、オフセットは MDH に追加する必要性を引き起こすキーですpi/2

次に、同次変換行列のパラメータ行列の値を参照して、各関節の同次変換行列を定義するコードは以下の通りです。

T01=[cos(MDH(1,1))               -sin(MDH(1,1))                 0              MDH(1,3);
     sin(MDH(1,1))*cos(MDH(1,4))  cos(MDH(1,1))*cos(MDH(1,4))  -sin(MDH(1,4)) -sin(MDH(1,4))*MDH(1,2);
     sin(MDH(1,1))*sin(MDH(1,4))  cos(MDH(1,1))*sin(MDH(1,4))   cos(MDH(1,4))  cos(MDH(1,4))*MDH(1,2);
      0                           0                             0              1];
T12=[cos(MDH(2,1))               -sin(MDH(2,1))                 0              MDH(2,3);
     sin(MDH(2,1))*cos(MDH(2,4))  cos(MDH(2,1))*cos(MDH(2,4))  -sin(MDH(2,4)) -sin(MDH(2,4))*MDH(2,2);
     sin(MDH(2,1))*sin(MDH(2,4))  cos(MDH(2,1))*sin(MDH(2,4))   cos(MDH(2,4))  cos(MDH(2,4))*MDH(2,2);
      0                           0                             0              1];
T23=[cos(MDH(3,1))               -sin(MDH(3,1))                 0              MDH(3,3);
     sin(MDH(3,1))*cos(MDH(3,4))  cos(MDH(3,1))*cos(MDH(3,4))  -sin(MDH(3,4)) -sin(MDH(3,4))*MDH(3,2);
     sin(MDH(3,1))*sin(MDH(3,4))  cos(MDH(3,1))*sin(MDH(3,4))   cos(MDH(3,4))  cos(MDH(3,4))*MDH(3,2);
      0                           0                             0              1];
T34=[cos(MDH(4,1))               -sin(MDH(4,1))                 0              MDH(4,3);
     sin(MDH(4,1))*cos(MDH(4,4))  cos(MDH(4,1))*cos(MDH(4,4))  -sin(MDH(4,4)) -sin(MDH(4,4))*MDH(4,2);
     sin(MDH(4,1))*sin(MDH(4,4))  cos(MDH(4,1))*sin(MDH(4,4))   cos(MDH(4,4))  cos(MDH(4,4))*MDH(4,2);
      0                           0                             0              1];
T45=[cos(MDH(5,1))               -sin(MDH(5,1))                 0              MDH(5,3);
     sin(MDH(5,1))*cos(MDH(5,4))  cos(MDH(5,1))*cos(MDH(5,4))  -sin(MDH(5,4)) -sin(MDH(5,4))*MDH(5,2);
     sin(MDH(5,1))*sin(MDH(5,4))  cos(MDH(5,1))*sin(MDH(5,4))   cos(MDH(5,4))  cos(MDH(5,4))*MDH(5,2);
      0                           0                             0              1];
T56=[cos(MDH(6,1))               -sin(MDH(6,1))                 0              MDH(6,3);
     sin(MDH(6,1))*cos(MDH(6,4))  cos(MDH(6,1))*cos(MDH(6,4))  -sin(MDH(6,4)) -sin(MDH(6,4))*MDH(6,2);
     sin(MDH(6,1))*sin(MDH(6,4))  cos(MDH(6,1))*sin(MDH(6,4))   cos(MDH(6,4))  cos(MDH(6,4))*MDH(6,2);
      0                           0                             0              1];

上記により、全体の変換コードは次のようになることがわかります。

T06 = T01*T12*T23*T34*T45*T56;

3. コードの実行結果

コード例では、θi θ_iを参照します。私は次のように進めます割り当て

theta1 = pi/3;
theta2 = pi/4;
theta3 = pi/5;
theta4 = pi/3;
theta5 = pi/4;
theta6 = pi/5;

プログラムを実行すると、下図のようになります。
T06の結果
前回の記事のrobot.teach() シミュレーション後、結果は下図のようになります。
シミュレーション結果


要約する

以上が順運動学の内容であり、この記事では順運動学の理解とコードの実装について詳しく紹介しており、ロボットツールボックスにはコネクティングロッドの長さやコネクティングロッドのねじれに対処するための機能と方法が提供されています。

参考文献

  1. Matlab ロボット ツールボックス (1) - ロボットの構築、描画、順運動学と逆運動学
  2. DHパラメータ法によるロボットの運動学正解の確立
  3. 6 軸ロボット Matlab 書き込み運動学正解関数 (DH モデル)
  4. [ロボット工学] 平面 2R ロボット (1) - ポジティブ キネマティクス

おすすめ

転載: blog.csdn.net/AlbertDS/article/details/110631364