Main Content

show

ロボット モデルを Figure に表示

説明

show(robot) は、事前定義されたホーム コンフィギュレーションで、ロボット モデルのボディ座標系を Figure にプロットします。FramesVisuals の両方が自動的に表示されます。

show(robot,configuration) は、configuration で指定されているジョイント位置を使用して、ロボットのボディ座標系を表示します。

show(___,Name=Value) は、前述の構文の入力引数の任意の組み合わせに加え、1 つ以上の名前と値のペアの引数を使用してオプションを指定します。たとえば、Frames="off" は Figure 内の剛体座標系を非表示にします。

ax = show(___) は、ロボットがプロットされる座標軸ハンドルを返します。

すべて折りたたむ

ロボットのビジュアル ジオメトリを記述するために、Unified Robot Description format (URDF) ファイルと関連付けられた .stl ファイルをもつロボットをインポートできます。各剛体には、個別のビジュアル ジオメトリが指定されています。関数 importrobot は、URDF ファイルを解析してロボット モデルとビジュアル ジオメトリを取得します。この関数は、ロボットのビジュアル ジオメトリと衝突ジオメトリが同じであると想定し、対応するボディの衝突ジオメトリとしてビジュアル ジオメトリを割り当てます。

関数 show を使用して、Figure 内でロボット モデルのビジュアル ジオメトリと衝突ジオメトリを表示します。その後、コンポーネントをクリックして検査したり、右クリックして表示状態を切り替えたりして、モデルを操作できます。

ロボット モデルを URDF ファイルとしてインポートします。.stl ファイルの場所が、この URDF 内で正しく指定されていなければなりません。他の .stl ファイルを個別の剛体に追加する方法の詳細については、addVisualを参照してください。

robot = importrobot('iiwa14.urdf');

関連付けられたビジュアル モデルを使用してロボットを可視化します。ボディまたは座標系を検査するには、それらをクリックします。各ビジュアル ジオメトリの表示状態を切り替えるには、ボディを右クリックします。

show(robot,Visuals="on",Collisions="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

関連付けられた衝突ジオメトリを使用してロボットを可視化します。ボディまたは座標系を検査するには、それらをクリックします。各衝突ジオメトリの表示状態を切り替えるには、ボディを右クリックします。

show(robot,Visuals="off",Collisions="on"); 

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 29 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_6_coll_mesh, iiwa_link_7_coll_mesh.

rigidBodyTree モデルを使用して作成されたロボットのさまざまなコンフィギュレーションを表示します。関数 homeConfiguration または関数 randomConfiguration を使用して、すべてのジョイント位置を定義する構造体を生成します。

Robotics System Toolbox™ loadrobotから FANUC LR Mate 200ib を読み込みます。rigidBodyTree オブジェクトとして返されます。

robot = loadrobot("fanucLRMate200ib");
showdetails(robot)
--------------------
Robot: (9 bodies)

 Idx     Body Name            Joint Name            Joint Type     Parent Name(Idx)   Children Name(s)
 ---     ---------            ----------            ----------     ----------------   ----------------
   1          base        base_link-base                 fixed         base_link(0)   
   2        link_1               joint_1              revolute         base_link(0)   link_2(3)  
   3        link_2               joint_2              revolute            link_1(2)   link_3(4)  
   4        link_3               joint_3              revolute            link_2(3)   link_4(5)  
   5        link_4               joint_4              revolute            link_3(4)   link_5(6)  
   6        link_5               joint_5              revolute            link_4(5)   link_6(7)  
   7        link_6               joint_6              revolute            link_5(6)   flange(8)  tool0(9)  
   8        flange        joint_6-flange                 fixed            link_6(7)   
   9         tool0          link_6-tool0                 fixed            link_6(7)   
--------------------

ロボットのホーム コンフィギュレーションの構造体を作成します。構造体は、ロボット モデル上の各ボディのジョイント名およびジョイント位置をもちます。

config = homeConfiguration(robot)
config=1×6 struct array with fields:
    JointName
    JointPosition

show を使用してホーム コンフィギュレーションを表示します。コンフィギュレーション入力を指定する必要はありません。

show(robot);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

コンフィギュレーションを変更して、2 つ目のジョイント位置を pi/2 に設定します。結果として生じるロボット コンフィギュレーションの変化を表示します。

config(2).JointPosition = pi/2;
show(robot,config);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

ランダムなコンフィギュレーションを作成して表示します。

show(robot,randomConfiguration(robot));

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 26 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, flange, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

Puma560® ロボットの Denavit-Hartenberg (DH) パラメーターを使用して、ロボットを構築します。各剛体は 1 つずつ追加され、子から親への変換がジョイント オブジェクトによって指定されます。

DH パラメーターは、各剛体がどのように親に接続されているかを基準として、ロボットのジオメトリを定義します。わかりやすくするために、Puma560 ロボットのパラメーターを行列で設定します [1]。Puma ロボットは連続チェーンのマニピュレーターです。DH パラメーターは、前のジョイント接続に対応する行列内の前の行との相対値です。

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;

最初の剛体を作成し、ロボットに追加します。剛体を追加するには次を行います。

  1. rigidBody オブジェクトを作成し、一意の名前を付けます。

  2. rigidBodyJoint オブジェクトを作成し、一意の名前を付けます。

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

  4. addBody を呼び出して、最初のボディのジョイントをロボットの base 座標系に接続します。

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

その他の剛体を作成し、ロボットに追加します。addBody を呼び出して接続するときには、前述のボディ名を指定します。各固定変換は、前のジョイント座標系と相対的です。

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

関数 showdetails または関数 show を使用して、ロボットが正しく構築されていることを確認します。showdetails は、すべてのボディを MATLAB® コマンド ウィンドウにリストします。show は、指定されたコンフィギュレーション (既定はホーム) でロボットを表示します。axis の呼び出しは、軸の範囲を変更し、軸ラベルを非表示にします。

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)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

参考文献

[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, IEEE Computer.Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

ロボット モデルを読み込み、衝突メッシュを変更します。既存の衝突メッシュをクリアし、簡易衝突オブジェクトのプリミティブ型を追加して、特定のコンフィギュレーションが競合しているかどうかを確認します。

ロボット モデルの読み込み

関数 loadrobot を使用して、事前構成済みのロボット モデルをワークスペースに読み込みます。このモデルには、既に各ボディに指定された衝突メッシュがあります。すべての剛体要素を反復し、既存の衝突メッシュをクリアします。既存のメッシュがなくなっていることを確認します。

robot = loadrobot("kukaIiwa7",DataFormat="column");

for i = 1:robot.NumBodies
    clearCollision(robot.Bodies{i})
end

show(robot,Collisions="on",Visuals="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 21 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh.

衝突シリンダーの追加

衝突シリンダーを各ボディに追加する作業を繰り返します。この特定のモデルに対するボディの一部は、オーバーラップしてエンドエフェクタ (ボディ 10) と常に衝突するため、スキップします。

collisionObj = collisionCylinder(0.05,0.25);

for i = 1:robot.NumBodies
    if i > 6 && i < 10
        % Skip these bodies.
    else
        addCollision(robot.Bodies{i},collisionObj)
    end
end

show(robot,Collisions="on",Visuals="off");

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

衝突チェック

一連のランダムなコンフィギュレーションを生成します。ロボットが各コンフィギュレーションで競合しているかどうかを確認します。競合している各コンフィギュレーションを可視化します。

figure
rng(0) % Set random seed for repeatability.
for i = 1:20
    config = randomConfiguration(robot);
    isColliding = checkCollision(robot,config,SkippedSelfCollisions="parent");
    if isColliding
        show(robot,config,Collisions="on",Visuals="off");
        title("Collision Detected")
    else
        % Skip non-collisions.
    end
end

Figure contains an axes object. The axes object with title Collision Detected, xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

Figure contains an axes object. The axes object with title Collision Detected, xlabel X, ylabel Y contains 28 objects of type patch, line. These objects represent world, iiwa_link_0, iiwa_link_1, iiwa_link_2, iiwa_link_3, iiwa_link_4, iiwa_link_5, iiwa_link_6, iiwa_link_7, iiwa_link_ee, iiwa_link_ee_kuka, iiwa_link_0_mesh, iiwa_link_1_mesh, iiwa_link_2_mesh, iiwa_link_3_mesh, iiwa_link_4_mesh, iiwa_link_5_mesh, iiwa_link_6_mesh, iiwa_link_7_mesh, iiwa_link_0_coll_mesh, iiwa_link_1_coll_mesh, iiwa_link_2_coll_mesh, iiwa_link_3_coll_mesh, iiwa_link_4_coll_mesh, iiwa_link_5_coll_mesh, iiwa_link_ee_kuka_coll_mesh.

入力引数

すべて折りたたむ

ロボット モデル。rigidBodyTree オブジェクトとして指定します。

ロボット コンフィギュレーション。ジョイント位置のベクトル、またはロボット モデル内のすべてのボディのジョイント名およびジョイント位置を含む構造体として指定します。コンフィギュレーションは、homeConfiguration(robot)randomConfiguration(robot) を使用するか、構造体内で独自のジョイント位置を指定することによって生成できます。configuration のベクトル形式を使用するには、robotDataFormat プロパティを "row" または "column" に設定します。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name引用符で囲みます。

例: Frames="off" は Figure 内の剛体座標系を非表示にします。

座標軸の親。ロボットの描画に使用する Axes オブジェクトとして指定します。既定では、ロボットはアクティブな座標軸にプロットされます。

ロボットのプロットを保持するオプション。logical 1 (true) または 0 (false) として指定します。PreservePlottrue として指定した場合、show の呼び出しにより表示された座標軸内の以前の剛体ツリー パッチが show によって上書きされないように、hold on も使用する必要があります。PreservePlotfalse として指定した場合、現在の hold 値に関係なく、同じ座標軸内の剛体ツリーの以前のプロットが show によって上書きされます。

メモ

PreservePlottrue の場合、引数 FastUpdatefalse でなければなりません。

データ型: logical

ボディ座標系の表示。"on" または "off" として指定します。これらの座標系は、剛体ツリー上の個々のボディの座標系です。

データ型: char | string

ビジュアル ジオメトリの表示。"on" または "off" として指定します。Figure 内で右クリックすることにより、個々のビジュアル ジオメトリをオフにすることもできます。

addVisual を使用して、個々のビジュアル ジオメトリを指定します。メッシュ用の .stl ファイルを使用した URDF ロボット モデルをインポートするには、関数 importrobot を参照してください。

データ型: char | string

衝突ジオメトリの表示。"Collisions""on" または "off" で構成されるコンマ区切りのペアとして指定します。

addCollision 関数を使用して、ロボット モデル内の個別の剛体に衝突ジオメトリを追加します。メッシュ用の .stl ファイルを使用した URDF ロボット モデルをインポートするには、関数 importrobot を参照してください。

データ型: char | string

ロボットの位置。"Position" と、[x y z yaw] の形式の 4 要素ベクトルからなるコンマ区切りのペアとして指定します。x、y、z の各要素は位置をメートル単位で指定します。また、yaw はヨー角をラジアン単位で指定します。

データ型: single | double

既存のプロットに対する高速更新。logical 0 ((false)) または 1 ((true)) として指定します。この引数でロボット モデルを指定するには、オブジェクト関数 show を使用して最初にロボット モデルを表示する必要があります。

メモ

FastUpdatetrue の場合、引数 PreservePlotfalse でなければなりません。

データ型: logical

出力引数

すべて折りたたむ

座標軸グラフィックス ハンドル。Axes オブジェクトとして返されます。このオブジェクトには、ロボットのプロット先の Figure のプロパティが含まれます。

ヒント

ロボット モデルにはビジュアル コンポーネントが関連付けられています。各 rigidBody オブジェクトには、ボディ座標系として表示される座標系が含まれています。各ボディにビジュアル メッシュを関連付けることもできます。既定では、これらのコンポーネントはいずれも自動的に表示されます。剛体ツリー表示のビジュアル コンポーネントは検査や変更が可能です。ボディ座標系またはビジュアル メッシュをクリックして黄色で強調表示すると、関連付けられているボディ名、インデックス、ジョイント タイプを確認できます。右クリックして、個々のコンポーネントの表示を切り替えます。

  • ボディ座標系: 個々のボディ座標系は、3 軸の座標系として表示されます。固定の座標系はピンクの座標系です。可動ジョイント タイプは RGB 座標軸として表示されます。ボディ座標系をクリックすると、運動軸を確認できます。直進ジョイントでは運動軸の方向に黄色の矢印が表示され、回転ジョイントでは回転軸の周囲に円形の矢印が表示されます。

  • ビジュアル メッシュ: 個々のビジュアル ジオメトリを指定するには、addVisual を使用するか、あるいは importrobot を使用し、.stl ファイルまたは .dae ファイルを指定してロボット モデルをインポートします。Figure 内で個々のボディを右クリックすることにより、メッシュをオフにしたり、Visuals の名前と値のペアを指定してすべてのビジュアル ジオメトリを非表示にすることができます。

バージョン履歴

R2016b で導入