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

조회 수: 7 (최근 30일)
Hata Hiromitsu
Hata Hiromitsu 2018년 12월 31일
댓글: Yutaka Kaizu 2020년 12월 17일
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에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!