Robotics System Toolboxで採用​されているDH記法は​どこの文献を参考にし​たものでしょうか.

23 次查看(过去 30 天)
Robotics system toolbox を用いてロボットツリーを作成しているのですが, このときのDH記法は, 文献 [1] を参考にしています. しかし, 作成したロボットツリーが望みの形になりません. Mathworksが採用されているDH記法のルールはどこに載っているのでしょうか, また, 参考文献があれば教えていただけると幸いです.
[1] 永井清, 土橋宏規 : " ロボット機構学 ", コロナ社, pp.27-28, 2015.
% リンクパラメータ
L1 = 60/10^3; %% 単位はメートル(m)
L2 = 20/10^3;
L3 = 20/10^3;
L4 = 95/10^3;
L5 = 8/10^3;
Lt = 35/10^3;
% 関節角度(とりあえず)
tht11 = 0;
tht12 = 0;
p1 = 0;
% DHパラメータの作成
dhparams =[0 pi 0 0; % ベース座標 ∑B
L1+L3 3*pi/2 Lt tht11; % ジョイント J11(能動関節)
L1 0 0 tht12; % ジョイント J12(能動関節)
L2 pi/2 L3 p1; % ジョイント J13(受動関節)
L4 pi/2 L5 3*pi/2]; % ジョイント C1(ボールベアリング)
% ツリーオブジェクトの作成
robot = robotics.RigidBodyTree;
% ベース座標系
body1 = robotics.RigidBody('body1');
jnt1 = robotics.Joint('jnt1','revolute');
setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;
addBody(robot,body1,'base')
% ジョイントJ11
body2 = robotics.RigidBody('body2');
jnt2 = robotics.Joint('jnt2','revolute');
setFixedTransform(jnt2,dhparams(2,:),'dh');
body2.Joint = jnt2;
addBody(robot,body2,'body1')
% ジョイントJ12
body3 = robotics.RigidBody('body3');
jnt3 = robotics.Joint('jnt3','revolute');
setFixedTransform(jnt3,dhparams(3,:),'dh');
body3.Joint = jnt3;
addBody(robot,body3,'body2')
% ジョイントJ13
body4 = robotics.RigidBody('body4');
jnt4 = robotics.Joint('jnt4','revolute');
setFixedTransform(jnt4,dhparams(4,:),'dh');
body4.Joint = jnt4;
addBody(robot,body4,'body3')
% ジョイントC1
body5 = robotics.RigidBody('body5');
jnt5 = robotics.Joint('jnt5','revolute');
setFixedTransform(jnt5,dhparams(5,:),'dh');
body5.Joint = jnt5;
addBody(robot,body5,'body4')
% 表示
showdetails(robot)
show(robot);

采纳的回答

Yoshio
Yoshio 2019-1-4
ご存知かも知れませんが、こちらに簡単ですが、解説があります。
入力引数のところで、
dhparams — Denavit-Hartenberg (DH) parameters
の部分を開いて頂き、剛体ツリー ロボット モデル
をみて頂ければと思います。
なお、参考文献は一番下部の
References
をご覧ください。
なお、修正DH記法の場合は、
mdhparams — Modified Denavit-Hartenberg (DH) parameters
となりますので、こちらも確認願います。
  3 个评论
Tohru Kikawada
Tohru Kikawada 2019-1-8
サンプルで使われているPuma 560ロボットのモデルは下記の論文から引用されています。(DHパラメーター表記)
"A search for consensus among model parameters reported for the PUMA 560 robot", P. Corke and B. Armstrong-Helouvry, Proc. IEEE Int. Conf. Robotics and Automation, (San Diego), pp. 1608-1613, May 1994.
別のPuma 560のモデルとして下記の修正DHパラメータを使ったものもあります。
Armstrong, Khatib and Burdick paper in 1986.
https://www-cs.stanford.edu/group/manips/publications/pdfs/Armstrong_1986.pdf
ご参考まで。
Hata Hiromitsu
Hata Hiromitsu 2019-1-9
Tohru Kikawada様
貴重なご指摘ありがとうございました.
参考にさせていただきます.
Hata Hiromitsu

请先登录,再进行评论。

更多回答(1 个)

Yutaka Kaizu
Yutaka Kaizu 2020-12-14
编辑:Yutaka Kaizu 2020-12-14
すでに解決済みだと思いますが、私の調べた範囲で申し上げると、MatlabのsetFixedTransform等のヘルプにある、DHパラメータは、6自由度のPuma560を表現するには不適当だと思います。パラメータの書き方は、[1]に倣うべきですが、実際には[2]の書き方になっており、その結果、6自由度のロボットとは違う形になっています。違いは、1行目に[0 0 0 0]が入っているところです。 ヘルプは修正されるべきだと思われます。[1]の和訳版が[3]にあるので、参照してみてはいかがでしょう。あとは、参考文献[4]でも大丈夫です。[2]と[4]では第4関節の位置が第3関節と同じ場所か、第5関節と同じ場所か変わりますが、ロボット先端の位置は変わりません。
%これは一般的な6自由度のロボットの表現としては間違い
dhparams = [0 pi/2 0 0;
0.4318 0 0 0
0.0203 -pi/2 0.15005 0;
0 pi/2 0.4318 0;
0 -pi/2 0 0;
0 0 0 0];
%こちらが正しい 1行目がリンク0からリンク1への変換
dhparams = [0 0 0 0;
0 pi/2 0 0;
0.4318 0 0 0
0.0203 -pi/2 0.15005 0;
0 pi/2 0.4318 0;
0 -pi/2 0 0;];
%より現代的なロボットの場合(回転軸がオフセットしてない)
dhparams = [0 0 0 0
0 pi/2 0 0;
0.4318 0 0 0
0 -pi/2 0 0;
0 pi/2 0.4318 0;
0 -pi/2 0 0;];
%参考文献[2] P78のロボットを実現するには
dhparams = [0 0 0 0;
0 pi/2 0 0;
a2 0 0 0
0 pi/2 0 0;
0 -pi/2 d4 0;
0 pi/2 0 0;];
%参考文献[4] P56のロボットを実現するには
dhparams = [0 0 0 0;
0 pi/2 0 0;
a2 0 0 0
0 pi/2 d4 0;
0 -pi/2 0 0;
0 pi/2 0 0;];
[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.
[2] Siciliano, Bruno. Robotics: Modelling, Planning and Control. London: Springer, 2009.
[3] John J. Craig ロボティクス 機構・力学・制御, 共立出版, 1991
[4] 細田耕 実践ロボット制御, オーム社, 2019
  3 个评论
Yutaka Kaizu
Yutaka Kaizu 2020-12-15
コメントありがとうございます。再度確認しておりますが、私が間違っている可能性もあります。もう少し調べてみます。お願いしたいのは、何もないところからまず、マニピュレータ付きの6自由度のロボットを作成し、各関節の角度を設定するところまでを説明したヘルプです。また、CADデータのインポートまであるとありがたいです。御社のヘルプでは、既存のロボットモデルをインポートするところから始まっているので、自分のオリジナルのロボットを作成するのにはちょっとハードルが高く感じます。
Yutaka Kaizu
Yutaka Kaizu 2020-12-17
やはり、setFixedTransform(jnt1,dhparams(1,:),'dh');
の関数には、dhのオプションの際にそもそもバグがあると思われます。DHパラメータをどう書いても、納得行く結果は得られません。setFixedTransform(jnt1,tform); のtformに教科書に則った変換行列を入れれば正しい結果が得られました。以下のような関数をつくって試しました。
function tform = myDH2tform(dh)
%obtain tform transformation matrix from DH parameters
% Detailed explanation goes here
Ta = trvec2tform([dh(1) 0 0]); %a translation along x axis
Talpha = axang2tform([1 0 0 dh(2)]); %alpha rotation around x axis
Td = trvec2tform([0 0 dh(3)]); %d translation along new z axis
Ttheta = axang2tform([0 0 1 dh(4)]); %theta rotation around new z axis
tform = Ta*Talpha*Td; %calculate tform ignoring Ttheta
end

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Robotics System Toolbox 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!