このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
rigidBodyJoint
ジョイントを作成
説明
rigidBodyJoint
オブジェクトは、接続点を基準として剛体がどのように動くかを定義します。ツリー構造のロボットでは、ジョイントは常に特定の剛体に属し、各剛体に 1 つのジョイントがあります。
rigidBodyJoint
オブジェクトでは、さまざまなタイプのジョイントを記述できます。rigidBodyTree
で剛体ツリー構造を作成するときに、rigidBody
クラスを使用して剛体に Joint
オブジェクトを割り当てる必要があります。
サポートされているジョイント タイプの種類は次のとおりです。
fixed
— 2 つのボディ間の相対運動を抑制する固定ジョイント。revolute
— 与えられた軸を中心に回転する単一自由度 (DOF) のジョイント。ピン ジョイントまたはヒンジ ジョイントとも呼ばれます。prismatic
— 与えられた軸に沿って並進する単一 DOF のジョイント。スライディング ジョイントとも呼ばれます。
定義される形状に応じて、ジョイント タイプごとに異なる次元のさまざまなプロパティがあります。
作成
説明
入力引数
jname
— ジョイント名
string スカラー | 文字ベクトル
ジョイント名。string スカラーまたは文字ベクトルとして指定します。剛体ツリーからアクセスできるように、ジョイント名は一意でなければなりません。
例: "elbow_right"
データ型: char
| string
jtype
— ジョイント タイプ
'fixed'
(既定値) | string スカラー | 文字ベクトル
ジョイント タイプ。string スカラーまたは文字ベクトルとして指定します。ジョイントを作成する際、ジョイント タイプに応じて特定のプロパティが事前定義されます。
サポートされているジョイント タイプの種類は次のとおりです。
fixed
— 2 つのボディ間の相対運動を抑制する固定ジョイント。revolute
— 与えられた軸を中心に回転する単一自由度 (DOF) のジョイント。ピン ジョイントまたはヒンジ ジョイントとも呼ばれます。prismatic
— 与えられた軸に沿って並進する単一 DOF のジョイント。スライディング ジョイントとも呼ばれます。
例: "prismatic"
データ型: char
| string
プロパティ
Type
— ジョイント タイプ
'fixed'
(既定値) | string スカラー | 文字ベクトル
この プロパティ は読み取り専用です。
ジョイント タイプ。string スカラーまたは文字ベクトルとして返されます。ジョイントを作成する際、ジョイント タイプに応じて特定のプロパティが事前定義されます。
サポートされているジョイント タイプの種類は次のとおりです。
fixed
— 2 つのボディ間の相対運動を抑制する固定ジョイント。revolute
— 与えられた軸を中心に回転する単一自由度 (DOF) のジョイント。ピン ジョイントまたはヒンジ ジョイントとも呼ばれます。prismatic
— 与えられた軸に沿って並進する単一 DOF のジョイント。スライディング ジョイントとも呼ばれます。
このジョイントを含む剛体をロボット モデルに追加する場合、replaceJoint
を使用してジョイントを置き換えてジョイント タイプを変更する必要があります。
例: "prismatic"
データ型: char
| string
Name
— ジョイント名
string スカラー | 文字ベクトル
ジョイント名。string スカラーまたは文字ベクトルとして返されます。剛体ツリーからアクセスできるように、ジョイント名は一意でなければなりません。このジョイントを含む剛体をロボット モデルに追加する場合、replaceJoint
を使用してジョイントを置き換えてジョイント名を変更する必要があります。
例: "elbow_right"
データ型: char
| string
PositionLimits
— ジョイントの位置範囲
ベクトル
ジョイントの位置範囲。[min max]
値のベクトルとして指定します。これらの値の定義はジョイント タイプによって異なります。
fixed
—[NaN NaN]
(既定)。固定ジョイントにはジョイントの範囲はありません。ボディは互いに固定されたままになります。revolute
—[-pi pi]
(既定)。軸を中心とする回転角度 (ラジアン単位) の範囲を定義します。prismatic
—[-0.5 0.5]
(既定)。軸に沿った線形運動 (メートル単位) の範囲を定義します。
例: [-pi/2, pi/2]
HomePosition
— ジョイントのホーム位置
スカラー
ジョイントのホーム位置。ジョイント タイプに依存するスカラーとして指定します。ホーム位置は PositionLimits
で設定された範囲内でなければなりません。このプロパティは、剛体ツリー全体の事前定義されたホーム コンフィギュレーションを生成するために homeConfiguration
で使用されます。
ホーム位置の定義はジョイント タイプによって異なります。
fixed
—0
(既定)。固定ジョイントには関連するホーム位置はありません。revolute
—0
(既定)。回転ジョイントのホーム位置は、ジョイント軸を中心とする回転角度 (ラジアン単位) で定義されます。prismatic
—0
(既定)。直進ジョイントのホーム位置は、ジョイント軸に沿った線形運動 (メートル単位) で定義されます。
例: revolute
ジョイントについては pi/2
ラジアン
JointAxis
— ジョイントの運動軸
[NaN
NaN
NaN
] (既定値) | 3 要素の単位ベクトル
ジョイントの運動軸。3 要素の単位ベクトルとして指定します。このベクトルは、ローカル座標における 3 次元空間のいずれかの方向になります。
ジョイント軸の定義はジョイント タイプによって異なります。
fixed
— 固定ジョイントには関連する運動軸はありません。revolute
— 回転ジョイントは、ジョイント軸に垂直な平面でボディを回転します。prismatic
— 直進ジョイントは、ジョイント軸の方向に沿った線形運動でボディを動かします。
例: revolute
ジョイントの x 軸を中心とする運動については [1 0 0]
JointToParentTransform
— ジョイントの座標系から親座標系への固定変換
eye(4)
(既定値) | 4 行 4 列の同次変換行列
この プロパティ は読み取り専用です。
ジョイントの座標系から親座標系への固定変換。4 行 4 列の同次変換行列として返されます。この変換により、ジョイントの先行座標系における点の座標が親ボディの座標系に変換されます。
例: eye(4)
ChildToJointTransform
— 子ボディの座標系からジョイントの座標系への固定変換
eye(4)
(既定値) | 4 行 4 列の同次変換行列
この プロパティ は読み取り専用です。
子ボディの座標系からジョイントの座標系への固定変換。4 行 4 列の同次変換行列として返されます。この変換により、子ボディの座標系における点の座標がジョイントの後続座標系に変換されます。
例: eye(4)
オブジェクト関数
copy | Create copy of joint |
setFixedTransform | ジョイントの固定変換プロパティを設定 |
例
剛体ツリーへの剛体とジョイントの接続
剛体および対応するジョイントを剛体ツリーに追加します。それぞれの 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.
ロボットの剛体ツリー モデルの変更
既存の rigidBodyTree
オブジェクトに変更を加えます。剛体ツリーのジョイント、ボディ、およびサブツリーを置換できます。
例のロボットを rigidBodyTree
オブジェクトとして読み込みます。
load exampleRobots.mat
showdetails
を使用して、Puma ロボットの詳細を表示します。
showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
プロパティを検査する特定のボディを取得します。L3
ボディの唯一の子は L4
ボディです。特定のボディをコピーすることもできます。
body3 = getBody(puma1,'L3');
childBody = body3.Children{1}
childBody = rigidBody with properties: Name: 'L4' Joint: [1x1 rigidBodyJoint] Mass: 1 CenterOfMass: [0 0 0] Inertia: [1 1 1 0 0 0] Parent: [1x1 rigidBody] Children: {[1x1 rigidBody]} Visuals: {} Collisions: {}
body3Copy = copy(body3);
L3
ボディのジョイントを置き換えます。下流のボディ ジオメトリへの影響を確実に防ぐために、新しい Joint
オブジェクトを作成し、replaceJoint
を使用しなければなりません。必要に応じて、既定の単位行列を使用する代わりに、setFixedTransform
を呼び出してボディ間の変換を定義します。
newJoint = rigidBodyJoint('prismatic'); replaceJoint(puma1,'L3',newJoint); showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 prismatic fixed L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
removeBody
を使用してボディ全体を削除し、結果のサブツリーを取得します。削除されたボディはサブツリーに含まれます。
subtree = removeBody(puma1,'L4')
subtree = rigidBodyTree with properties: NumBodies: 3 Bodies: {[1x1 rigidBody] [1x1 rigidBody] [1x1 rigidBody]} Base: [1x1 rigidBody] BodyNames: {'L4' 'L5' 'L6'} BaseName: 'L3' Gravity: [0 0 0] DataFormat: 'struct'
変更した L3
ボディを削除します。コピーされた元の L3
ボディを L2
ボディに追加し、次に返されたサブツリーも追加します。ロボット モデルはそのままにします。showdetails
で詳細な比較を確認します。
removeBody(puma1,'L3'); addBody(puma1,body3Copy,'L2') addSubtree(puma1,'L3',subtree) showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
参照
[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++ コードを生成します。
バージョン履歴
R2016b で導入R2019b: 名前を rigidBodyJoint
に変更
オブジェクト名が robotics.Joint
から rigidBodyJoint
に変更されました。すべてのオブジェクト作成で rigidBodyJoint
を使用してください。
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)