このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
rigidBody
剛体を作成
説明
rigidBody
オブジェクトは剛体を表します。剛体は、ツリー構造のロボット マニピュレーターすべての基本構成です。各 rigidBody
には、その剛体がどのように動けるかを定義する rigidBodyJoint
オブジェクトが接続されています。剛体は、rigidBodyTree
を使用して、ツリー構造のロボット モデルに組み立てられます。
addBody
を呼び出して剛体をロボット モデルに追加する前に、Joint
プロパティにジョイント オブジェクトを設定します。剛体が剛体ツリー内にある場合、そのプロパティを直接変更することはできません。ボディ間の関係が破損するからです。replaceJoint
を使用してツリー構造全体を変更してください。
作成
説明
入力引数
name
— 剛体の名前
string スカラー | 文字ベクトル
剛体の名前。string スカラーまたは文字ベクトルとして指定します。rigidBodyTree
オブジェクト内でアクセスできるように、この名前はボディに対し一意でなければなりません。
プロパティ
Name
— 剛体の名前
string スカラー | 文字ベクトル
剛体の名前。string スカラーまたは文字ベクトルとして指定します。rigidBodyTree
オブジェクト内で見つかるように、この名前はボディに対し一意でなければなりません。
データ型: char
| string
Joint
— rigidBodyJoint
オブジェクト
ハンドル
rigidBodyJoint
オブジェクト。ハンドルとして指定します。既定で、ジョイントは 'fixed'
タイプです。
Mass
— 剛体の質量
1
kg (既定値) | 数値スカラー
剛体の質量。キログラム単位の数値スカラーとして指定します。
CenterOfMass
— 剛体の重心位置
[0 0 0]
m (既定値) | [x y z]
ベクトル
剛体の重心位置。[x y z]
ベクトルとして指定します。このベクトルは、ボディ座標系を基準とした重心の位置を、メートル単位で記述します。
Inertia
— 剛体の慣性
[1 1 1 0 0 0]
kg•m2 (既定値) | [Ixx Iyy Izz Iyz Ixz Ixy]
ベクトル
剛体の慣性。ボディ座標系を基準とした [Ixx Iyy Izz Iyz Ixz Ixy]
ベクトルとして、キログラム平方メートル単位で指定します。ベクトルの最初の 3 要素は、"慣性テンソル" の対角要素です。最後の 3 要素は、慣性テンソルの非対角要素です。慣性テンソルは、半正定値の対称行列です。
Parent
— 剛体の親
rigidBody
オブジェクト ハンドル
剛体の親。rigidBody
オブジェクト ハンドルとして指定します。剛体ジョイントは、親を基準としてこのボディがどのように動けるかを定義します。剛体が rigidBodyTree
ロボット モデルに追加されるまで、このプロパティは空です。
Children
— 剛体の子
rigidBody
オブジェクト ハンドルの cell 配列
剛体の子。rigidBody
オブジェクト ハンドルの cell 配列として指定します。これら剛体の子は、すべてこの剛体オブジェクトに接続されています。剛体が rigidBodyTree
ロボット モデルに追加され、このボディを親としてツリーに少なくとももう 1 つのボディが追加されるまで、このプロパティは空です。
Visuals
— ビジュアル ジオメトリ
string スカラーの cell 配列 | 文字ベクトルの cell 配列
ビジュアル ジオメトリ。string スカラーまたは文字ベクトルの cell 配列として指定します。各文字ベクトルは、ビジュアル ジオメトリのタイプとソースを記述します。たとえば、メッシュ ファイル link_0.stl
が剛体に接続されている場合、ビジュアルは Mesh:link_0.stl
となります。ビジュアル ジオメトリは、addVisual
を使用して剛体に追加されます。
Collisions
— 衝突ジオメトリ
文字ベクトルの cell 配列
衝突ジオメトリ。文字ベクトルの cell 配列として指定します。各文字ベクトルは、衝突オブジェクトのタイプと、衝突ジオメトリの関連パラメーターを記述します。剛体の衝突ジオメトリを変更するには、関数 addCollision
および clearCollision
を使用します。
オブジェクト関数
copy | Create selective deep copy of rigid body |
addCollision | 衝突ジオメトリを剛体に追加 |
addVisual | 剛体へのビジュアル ジオメトリ データの追加 |
clearCollision | 接続されたすべての衝突ジオメトリのクリア |
clearVisual | ビジュアル ジオメトリのクリア |
getVisual | Get visual geometries of the rigid body |
例
剛体ツリーへの剛体とジョイントの接続
剛体および対応するジョイントを剛体ツリーに追加します。それぞれの rigidBody
オブジェクトは rigidBodyJoint
オブジェクトを含み、addBody
を使用して rigidBodyTree
に追加しなければなりません。
剛体ツリーを作成します。
rbtree = rigidBodyTree;
固有の名前をもつ剛体を作成します。
body1 = rigidBody('b1');
回転ジョイントを作成します。既定で、rigidBody
オブジェクトには固定ジョイントが付属します。body1.Joint
プロパティに新しい rigidBodyJoint
オブジェクトを割り当てることにより、ジョイントを置き換えます。
jnt1 = rigidBodyJoint('jnt1','revolute'); body1.Joint = jnt1;
剛体をツリーに追加します。剛体を接続するボディ名を指定します。最初のボディなので、ツリーのベース名を使用します。
basename = rbtree.BaseName; addBody(rbtree,body1,basename)
ツリーに対して showdetails
を使用して、剛体とジョイントが正しく追加されたことを確認します。
showdetails(rbtree)
-------------------- Robot: (1 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 b1 jnt1 revolute base(0) --------------------
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 Computer.Soc. Press, 1994, pp. 1608–13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.
参照
[1] Craig, John J. Introduction to Robotics: Mechanics and Control. Reading, MA: Addison-Wesley, 1989.
[2] Siciliano, Bruno. Robotics: Modelling, Planning and Control. London: Springer, 2009.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用に関するメモと制限:
生成されたコードで rigidBody
オブジェクトにさらに衝突ジオメトリを追加するには、まず、剛体に衝突ジオメトリを追加する上限として MaxNumCollisions
を指定する構文を使用して、rigidBody
オブジェクトを作成する必要があります。既定では、コード生成時に MaxNumCollisions
は 0
に設定され、関数 addCollision
を使用して剛体に衝突ジオメトリを追加するとエラーが発生します。
データの使用量を最小限に抑えるには、上限を剛体の必要な衝突ジオメトリ数に近い数にします。
MATLAB® インタープリター型実行の場合、引数 MaxNumCollisions
は効果がありません。
バージョン履歴
R2016b で導入R2019b: 名前を rigidBody
に変更
オブジェクト名が robotics.RigidBody
から rigidBody
に変更されました。すべてのオブジェクト作成で rigidBody
を使用してください。
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)