【Matlab 6自由度ロボット】運動学の正解を求める
過去のレビュー
【まとめ】
関連リソース:
【本線】
【補足説明】
- フレキシブル ワークスペースとアクセス可能なワークスペースについての理解
- 修正された DH パラメータの詳細な確立手順 (修正された Denavit-Hartenberg)
- 回転のパラメータ化 (オイラー角、姿勢角、四元数) に関する質問
- 2重変数関数atan2(x,y)の説明
- ロボット運動学の逆解に関するいくつかの問題
序文
この記事では、ロボット運動学の正解法に関連する問題、順運動学を理解する方法、およびロボット運動学の正解法を解くための 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}ああ0軸x 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 θ私はサインθ _ _私は00− s 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 θ私はサインθ _ _私はコスα _ _私はサインθ _ _私はα_ _ _ _私は0− s i n θ私はc o s θ私はコスα _ _私はc o s θ私はα_ _ _ _私は00-シンα _ _私はコスα _ _私は0ある私は-シンα _ _私はd私はコスα _ _私はd私は1⎦⎥⎥⎤
2. 全体的な変革
OKDHパラメータ設定方法各関節のDHパラメータを構築した後、それらをそれぞれの一般同次変換行列に代入して0 T 1 ^{0}T_1を取得します。0T _1、1 T 2 ^{1}T_21T _2、2 T 3 ^{2}T_32T_ _3、3 T 4 ^{3}T_43T_ _4、4 T 5 ^{4}T_54T _5、5 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サインθ _ _10− s i n θ1コスα _ _1c o s θ1α_ _ _ _1c o s θ100-シンα _ _1コスα _ _10ある1− d1α_ _ _ _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サインθ _ _20− s i n θ2コスα _ _2c o s θ2α_ _ _ _2c o s θ200-シンα _ _2コスα _ _20ある2− d2α_ _ _ _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サインθ _ _30− s i n θ3コスα _ _3c o s θ3α_ _ _ _3c o s θ300-シンα _ _3コスα _ _30ある3− d3α_ _ _ _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サインθ _ _40− s i n θ4コスα _ _4c o s θ4α_ _ _ _4c o s θ400-シンα _ _4コスα _ _40ある4− d4α_ _ _ _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サインθ _ _50− s i n θ5コスα _ _5c o s θ5α_ _ _ _5c o s θ500-シンα _ _5コスα _ _50ある5− d5α_ _ _ _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サインθ _ _60− s i n θ6コスα _ _6c o s θ6α_ _ _ _6c o s θ600-シンα _ _6コスα _ _60ある6− d6α_ _ _ _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;
プログラムを実行すると、下図のようになります。
前回の記事のrobot.teach()
シミュレーション後、結果は下図のようになります。
要約する
以上が順運動学の内容であり、この記事では順運動学の理解とコードの実装について詳しく紹介しており、ロボットツールボックスにはコネクティングロッドの長さやコネクティングロッドのねじれに対処するための機能と方法が提供されています。