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','collision','off');

{"String":"Figure contains an axes object. The axes object 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.","Tex":[],"LaTex":[]}

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

show(robot,'visuals','off','collision','on'); 

{"String":"Figure contains an axes object. The axes object 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.","Tex":[],"LaTex":[]}

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

例のロボットを RigidBodyTree オブジェクトとして読み込みます。

load exampleRobots.mat

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

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

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

show(puma1);

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

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

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

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

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

show(puma1,randomConfiguration(puma1));

{"String":"Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.","Tex":[],"LaTex":[]}

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

{"String":"","Tex":[],"LaTex":[]}

参考文献

[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 Comput. 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');

{"String":"Figure contains an axes object. The axes object 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.","Tex":[],"LaTex":[]}

衝突シリンダーの追加

衝突シリンダーを各ボディに追加する作業を繰り返します。この特定のモデルに対するボディの一部は、オーバーラップしてエンドエフェクタ (ボディ 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');

{"String":"Figure contains an axes object. The axes object 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.","Tex":[],"LaTex":[]}

衝突チェック

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

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

{"String":"Figure contains an axes object. The axes object with title Collision Detected 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.","Tex":"Collision Detected","LaTex":[]}

入力引数

すべて折りたたむ

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

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

名前と値の引数

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

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

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

座標軸の親。ロボットの描画に使用する、'Parent'Axes オブジェクトからなるコンマ区切りのペアとして指定します。既定では、ロボットはアクティブな座標軸にプロットされます。

ロボットのプロットを保持するオプション。'PreservePlot' と logical 1 (true) または 0 (false) からなるコンマ区切りのペアとして指定します。この引数を true として指定した場合、この関数は show の呼び出しにより表示された以前のプロットを上書きしません。この設定は、標準の MATLAB® Figure での hold on と同様に機能しますが、ロボットのボディ座標系に限定されています。この引数を false として指定した場合、この関数はロボットの以前のプロットを上書きします。

メモ

'PreservePlot' の値が true の場合、'FastUpdate' の値は false である必要があります。

データ型: logical

ボディ座標系の表示。'Frames''on' または 'off' で構成されるコンマ区切りのペアとして指定します。これらの座標系は、剛体ツリー上の個々のボディの座標系です。

データ型: char | string

ビジュアル ジオメトリの表示。'Visuals''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

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

メモ

'FastUpdate' の値が true の場合、'PreservePlot' の値は false である必要があります。

データ型: logical

出力引数

すべて折りたたむ

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

ヒント

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

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

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

バージョン履歴

R2016b で導入