このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
show
ロボット モデルを Figure に表示
説明
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');
関連付けられた衝突ジオメトリを使用してロボットを可視化します。ボディまたは座標系を検査するには、それらをクリックします。各衝突ジオメトリの表示状態を切り替えるには、ボディを右クリックします。
show(robot,'visuals','off','collision','on');
ロボット コンフィギュレーションの可視化
RigidBodyTree
モデルを使用して作成されたロボットのさまざまなコンフィギュレーションを表示します。関数 homeConfiguration
または関数 randomConfiguration
を使用して、すべてのジョイント位置を定義する構造体を生成します。
例のロボットを RigidBodyTree
オブジェクトとして読み込みます。
load exampleRobots.mat
Puma ロボットのホーム コンフィギュレーションの構造体を作成します。構造体は、ロボット モデル上の各ボディのジョイント名およびジョイント位置をもちます。
config = homeConfiguration(puma1)
config=1×6 struct array with fields:
JointName
JointPosition
show
を使用してホーム コンフィギュレーションを表示します。コンフィギュレーション入力を指定する必要はありません。
show(puma1);
コンフィギュレーションを変更して、2 つ目のジョイント位置を pi/2
に設定します。結果として生じるロボット コンフィギュレーションの変化を表示します。
config(2).JointPosition = pi/2; show(puma1,config);
ランダムなコンフィギュレーションを作成して表示します。
show(puma1,randomConfiguration(puma1));
Denavit-Hartenberg パラメーターを使用したマニピュレーター ロボットの構築
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;
最初の剛体を作成し、ロボットに追加します。剛体を追加するには次を行います。
rigidBody
オブジェクトを作成し、一意の名前を付けます。rigidBodyJoint
オブジェクトを作成し、一意の名前を付けます。setFixedTransform
を使用して、ボディからボディへの変換を DH パラメーターを使用して指定します。DH パラメーターの最後の要素であるtheta
は無視されます。これは、角度がジョイント位置に依存するためです。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 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');
衝突シリンダーの追加
衝突シリンダーを各ボディに追加する作業を繰り返します。この特定のモデルに対するボディの一部は、オーバーラップしてエンドエフェクタ (ボディ 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 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
入力引数
robot
— ロボット モデル
rigidBodyTree
オブジェクト
ロボット モデル。rigidBodyTree
オブジェクトとして指定します。
configuration
— ロボット コンフィギュレーション
ベクトル | 構造体
ロボット コンフィギュレーション。ジョイント位置のベクトル、またはロボット モデル内のすべてのボディのジョイント名およびジョイント位置を含む構造体として指定します。コンフィギュレーションは、homeConfiguration(robot)
、randomConfiguration(robot)
を使用するか、構造体内で独自のジョイント位置を指定することによって生成できます。configuration
のベクトル形式を使用するには、robot
の DataFormat
プロパティを "row"
または "column"
に設定します。
名前と値の引数
オプションの引数のペアを Name1=Value1,...,NameN=ValueN
として指定します。ここで、Name
は引数名、Value
は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。
R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name
を引用符で囲みます。
例: 'Frames','off'
は Figure 内の剛体座標系を非表示にします。
Parent
— 座標軸の親
Axes
オブジェクト
座標軸の親。ロボットの描画に使用する、'Parent'
と Axes
オブジェクトからなるコンマ区切りのペアとして指定します。既定では、ロボットはアクティブな座標軸にプロットされます。
PreservePlot
— ロボットのプロットを保持するオプション
true
または 1
(既定値) | false
または 0
ロボットのプロットを保持するオプション。'PreservePlot'
と logical 1
(true)
または 0
(false)
からなるコンマ区切りのペアとして指定します。この引数を true
として指定した場合、この関数は show
の呼び出しにより表示された以前のプロットを上書きしません。この設定は、標準の MATLAB® Figure での hold on
と同様に機能しますが、ロボットのボディ座標系に限定されています。この引数を false
として指定した場合、この関数はロボットの以前のプロットを上書きします。
メモ
'PreservePlot'
の値が true
の場合、'FastUpdate'
の値は false
である必要があります。
データ型: logical
Frames
— ボディ座標系の表示
'on'
(既定値) | 'off'
ボディ座標系の表示。'Frames'
と 'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。これらの座標系は、剛体ツリー上の個々のボディの座標系です。
データ型: char
| string
Visuals
— ビジュアル ジオメトリの表示
'on'
(既定値) | 'off'
ビジュアル ジオメトリの表示。'Visuals'
と 'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。Figure 内で右クリックすることにより、個々のビジュアル ジオメトリをオフにすることもできます。
addVisual
を使用して、個々のビジュアル ジオメトリを指定します。メッシュ用の .stl
ファイルを使用した URDF ロボット モデルをインポートするには、関数 importrobot
を参照してください。
データ型: char
| string
Collisions
— 衝突ジオメトリの表示
'off'
(既定値) | 'on'
衝突ジオメトリの表示。'Collisions'
と 'on'
または 'off'
で構成されるコンマ区切りのペアとして指定します。
addCollision
関数を使用して、ロボット モデル内の個別の剛体に衝突ジオメトリを追加します。メッシュ用の .stl
ファイルを使用した URDF ロボット モデルをインポートするには、関数 importrobot
を参照してください。
データ型: char
| string
Position
— ロボットの位置
[0 0 0 0]
(既定値) | 4 要素ベクトル
ロボットの位置。'Position'
と、[x y z yaw] の形式の 4 要素ベクトルからなるコンマ区切りのペアとして指定します。x、y、z の各要素は位置をメートル単位で指定します。また、yaw はヨー角をラジアン単位で指定します。
データ型: single
| double
FastUpdate
— 既存のプロットに対する高速更新
false
または 0
(既定値) | true
または 1
既存のプロットに対する高速更新。'FastUpdate'
と logical 0
(false)
または 1
(true)
からなるコンマ区切りのペアとして指定します。この引数でロボット モデルを指定するには、オブジェクト関数 show
を使用して最初にロボット モデルを表示する必要があります。
メモ
'FastUpdate'
の値が true
の場合、'PreservePlot'
の値は false
である必要があります。
データ型: logical
出力引数
ヒント
ロボット モデルにはビジュアル コンポーネントが関連付けられています。各 rigidBody
オブジェクトには、ボディ座標系として表示される座標系が含まれています。各ボディにビジュアル メッシュを関連付けることもできます。既定では、これらのコンポーネントはいずれも自動的に表示されます。剛体ツリー表示のビジュアル コンポーネントは検査や変更が可能です。ボディ座標系またはビジュアル メッシュをクリックして黄色で強調表示すると、関連付けられているボディ名、インデックス、ジョイント タイプを確認できます。右クリックして、個々のコンポーネントの表示を切り替えます。
ボディ座標系: 個々のボディ座標系は、3 軸の座標系として表示されます。固定の座標系はピンクの座標系です。可動ジョイント タイプは RGB 座標軸として表示されます。ボディ座標系をクリックすると、運動軸を確認できます。直進ジョイントでは運動軸の方向に黄色の矢印が表示され、回転ジョイントでは回転軸の周囲に円形の矢印が表示されます。
ビジュアル メッシュ: 個々のビジュアル ジオメトリを指定するには、
addVisual
を使用するか、またはimportrobot
を使用し、.stl
ファイルを指定してロボット モデルをインポートします。Figure 内で個々のボディを右クリックすることにより、メッシュをオフにしたり、Visuals
の名前と値のペアを指定してすべてのビジュアル ジオメトリを非表示にすることができます。
バージョン履歴
R2016b で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)