運動学 DH パラメーターを使用したマニピュレーター ロボットの構築
Puma560® マニピュレーター ロボットの Denavit-Hartenberg (DH) パラメーターを使用して、剛体ツリー ロボット モデルを段階的に作成します。各ジョイントの接続時にその相対的な DH パラメーターを指定します。ロボット座標系を可視化し、最終モデルを操作します。
DH パラメーターは、各剛体がジョイントを介してどのように親に接続しているかのジオメトリを定義します。パラメーターは、次の 4 つの変換規則に従います。
— 2 つの "z" 軸間の、両方の軸に対して垂直な共通法線の長さ
— 共通法線の回転角度
— 親から子への、"z" 軸に沿った垂直方向のオフセット
— 前の "z" 軸に沿った "x" 軸の回転角度
Puma560 ロボットのパラメーター [1] を行列として指定します。
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];
剛体ツリー オブジェクトを作成します。
robot = rigidBodyTree;
剛体オブジェクトとジョイント オブジェクトそれぞれの cell 配列を作成します。次のプロセスを実行して DH パラメーターを反復します。
固有の名前をもつ
rigidBody
オブジェクトを作成します。回転
rigidBodyJoint
オブジェクトを作成して名前を付けます。setFixedTransform
を使用して、ジョイントのボディからボディへの変換を DH パラメーターを使用して指定します。この関数は、DH パラメーターの最後の要素であるtheta
を無視します。これは、ボディの角度がジョイント位置に依存するためです。addBody
を使用して、ボディを剛体ツリーに接続します。
bodies = cell(6,1); joints = cell(6,1); for i = 1:6 bodies{i} = rigidBody(['body' num2str(i)]); joints{i} = rigidBodyJoint(['jnt' num2str(i)],"revolute"); setFixedTransform(joints{i},dhparams(i,:),"dh"); bodies{i}.Joint = joints{i}; if i == 1 % Add first body to base addBody(robot,bodies{i},"base") else % Add current body to previous body by name addBody(robot,bodies{i},bodies{i-1}.Name) end end
関数 showdetails
または関数 show
を使用して、ロボットが正しく構築されていることを確認します。関数 showdetails
は、ロボットのすべてのボディを MATLAB® コマンド ウィンドウにリストします。関数 show
は、指定されたコンフィギュレーション (既定はホーム) でロボットを表示します。
showdetails(robot)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 body1 jnt1 revolute base(0) body2(2) 2 body2 jnt2 revolute body1(1) body3(3) 3 body3 jnt3 revolute body2(2) body4(4) 4 body4 jnt4 revolute body3(3) body5(5) 5 body5 jnt5 revolute body4(4) body6(6) 6 body6 jnt6 revolute body5(5) --------------------
figure(Name="PUMA Robot Model")
show(robot);
ロボット モデルの操作
interactiveRigidBodyTree
オブジェクトを使用してロボット モデルを可視化し、その次元を確認します。
figure(Name="Interactive GUI")
gui = interactiveRigidBodyTree(robot,MarkerScaleFactor=0.5);
対話型 GUI のマーカーをクリックしてドラッグし、エンドエフェクタの位置を変更します。この GUI は、逆運動学を使用して、指定されたエンドエフェクタ位置に最もよく一致するジョイント位置を求めます。特定のボディ座標系を右クリックしてターゲット マーカー ボディとして設定するか、特定のジョイント位置を設定するために制御法を変更します。
次のステップ
これで MATLAB® でモデルが作成されたので、次のステップとしていくつかの操作が考えられます。
逆運動学を使用して、目的のエンドエフェクタ位置に基づくジョイント コンフィギュレーションを取得します。モデル パラメーターの拘束に加えてロボット拘束を指定します。これには照準拘束、直交座標の範囲、姿勢ターゲットなどがあります。
台形速度プロファイル、B スプライン、または多項式軌跡を使用して、ウェイポイントなどのパラメーターに基づき、軌跡の生成を行います。
ロボット モデルと Rapidly Exploring Random Tree (RRT) パス プランナーを利用してマニピュレーター プランニングを行います。
環境内の障害物との衝突検出を使用して、ロボットの動作が安全かつ効果的であることを確認します。
参考文献
[1] Corke, P. I., and B. Armstrong-Helouvry. "A Search for Consensus Among Model Parameters Reported for the PUMA 560 Robot." Proceedings of the 1994 IEEE International Conference on Robotics and Automation, 1608–13. San Diego, CA, USA: IEEE Computer Soc.Press, 1994. https://doi.org/10.1109/ROBOT.1994.351360.