Main Content

運動学 DH パラメーターを使用したマニピュレーター ロボットの構築

Puma560® マニピュレーター ロボットの Denavit-Hartenberg (DH) パラメーターを使用して、剛体ツリー ロボット モデルを段階的に作成します。各ジョイントの接続時にその相対的な DH パラメーターを指定します。ロボット座標系を可視化し、最終モデルを操作します。

DH パラメーターは、各剛体がジョイントを介してどのように親に接続しているかのジオメトリを定義します。パラメーターは、次の 4 つの変換規則に従います。

  • A — 2 つの "z" 軸間の、両方の軸に対して垂直な共通法線の長さ

  • α — 共通法線の回転角度

  • d — 親から子への、"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 パラメーターを反復します。

  1. 固有の名前をもつ rigidBody オブジェクトを作成します。

  2. 回転 rigidBodyJoint オブジェクトを作成して名前を付けます。

  3. setFixedTransform を使用して、ジョイントのボディからボディへの変換を DH パラメーターを使用して指定します。この関数は、DH パラメーターの最後の要素である theta を無視します。これは、ボディの角度がジョイント位置に依存するためです。

  4. 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);

Figure PUMA Robot Model contains an axes object. The axes object with xlabel X, ylabel Y contains 13 objects of type patch, line. These objects represent base, body1, body2, body3, body4, body5, body6.

ロボット モデルの操作

interactiveRigidBodyTree オブジェクトを使用してロボット モデルを可視化し、その次元を確認します。

figure(Name="Interactive GUI")
gui = interactiveRigidBodyTree(robot,MarkerScaleFactor=0.5);

Figure Interactive Visualization contains an axes object. The axes object with xlabel X, ylabel Y contains 23 objects of type patch, line, surface.

対話型 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.

参考