Robotics System Toolboxで採用されているDH記法はどこの文献を参考にしたものでしょうか.
Show older comments
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);
Accepted Answer
More Answers (1)
Yutaka Kaizu
on 14 Dec 2020
Edited: Yutaka Kaizu
on 14 Dec 2020
すでに解決済みだと思いますが、私の調べた範囲で申し上げると、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 Comments
Tohru Kikawada
on 15 Dec 2020
ご指摘ありがとうございます。開発チームにフィードバックさせていただきます。
Yutaka Kaizu
on 15 Dec 2020
コメントありがとうございます。再度確認しておりますが、私が間違っている可能性もあります。もう少し調べてみます。お願いしたいのは、何もないところからまず、マニピュレータ付きの6自由度のロボットを作成し、各関節の角度を設定するところまでを説明したヘルプです。また、CADデータのインポートまであるとありがたいです。御社のヘルプでは、既存のロボットモデルをインポートするところから始まっているので、自分のオリジナルのロボットを作成するのにはちょっとハードルが高く感じます。
Yutaka Kaizu
on 17 Dec 2020
やはり、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
、
Categories
Find more on Manipulator Modeling in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!