addSubtree
ロボットにサブツリーを追加
構文
説明
addSubtree( は、robot,bodyname,subtreerobot)bodyname で指定されたボディにおいて、ロボット モデル newSubtree を既存のロボット モデル robot に追加します。サブツリーのベースがボディとして追加されることはありません。
addSubtree( は、robot,framename,subtreerobot)framename で指定された座標系において、ロボット モデル newSubtree を既存のロボット モデル robot に接続します。
addSubtree(___, は、ReplaceBase=MODE)MODE が true に設定されている場合にサブツリーの現在のベースを bodyname に置き換えます。既定では、MODE は true です。
例
既存の rigidBodyTree オブジェクトに変更を加えます。剛体ツリーのジョイント、ボディ、およびサブツリーを置換できます。
Robotics System Toolbox™ loadrobotから ABB IRB-120T マニピュレーターを読み込みます。rigidBodyTree オブジェクトとして指定します。
manipulator = loadrobot("abbIrb120T");ロボットを show で表示し、showdetails を使用してロボットの詳細を読み取ります。
show(manipulator);

showdetails(manipulator)
-------------------- Robot: (8 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) tool0(8) 8 tool0 joint6-tool0 fixed link_6(7) --------------------
プロパティを検査する特定のボディを取得します。link_3 ボディの唯一の子は link_4 ボディです。特定のボディをコピーすることもできます。
body3 = getBody(manipulator,"link_3");
childBody = body3.Children{1}childBody =
rigidBody with properties:
Name: 'link_4'
Joint: [1×1 rigidBodyJoint]
Mass: 1.3280
CenterOfMass: [0.2247 1.5000e-04 4.1000e-04]
Inertia: [0.0028 0.0711 0.0723 1.3052e-05 -1.3878e-04 -6.6037e-05]
Parent: [1×1 rigidBody]
Children: {[1×1 rigidBody]}
Visuals: {'Mesh Filename link_4.stl'}
Collisions: {'Mesh Filename link_4.stl'}
FrameNames: {'link_4'}
ParentFrame: 'link_3'
body3Copy = copy(body3);
link_3 ボディのジョイントを置き換えます。下流のボディ ジオメトリへの影響を確実に防ぐために、新しい Joint オブジェクトを作成し、replaceJoint を使用しなければなりません。必要に応じて、既定の単位行列を使用する代わりに、setFixedTransform を呼び出してボディ間の変換を定義します。
newJoint = rigidBodyJoint("prismatic"); replaceJoint(manipulator,"link_3",newJoint); showdetails(manipulator)
-------------------- Robot: (8 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 prismatic fixed 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) tool0(8) 8 tool0 joint6-tool0 fixed link_6(7) --------------------
removeBody を使用してボディ全体を削除し、結果のサブツリーを取得します。削除されたボディはサブツリーに含まれます。
subtree = removeBody(manipulator,"link_4")subtree =
rigidBodyTree with properties:
NumBodies: 4
Bodies: {[1×1 rigidBody] [1×1 rigidBody] [1×1 rigidBody] [1×1 rigidBody]}
Base: [1×1 rigidBody]
BodyNames: {'link_4' 'link_5' 'link_6' 'tool0'}
BaseName: 'link_3'
Gravity: [0 0 0]
DataFormat: 'struct'
FrameNames: {'link_3' 'link_4' 'link_5' 'link_6' 'tool0'}
show(subtree);

変更した link_3 ボディを削除します。コピーされた元の link_3 ボディを link_2 ボディに追加し、次に返されたサブツリーも追加します。ロボット モデルはそのままにします。showdetails で詳細な比較を確認します。
removeBody(manipulator,"link_3"); addBody(manipulator,body3Copy,"link_2") addSubtree(manipulator,"link_3",subtree) showdetails(manipulator)
-------------------- Robot: (8 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) tool0(8) 8 tool0 joint6-tool0 fixed link_6(7) --------------------
Robotics System Toolbox™ loadrobotから UR10 ロボット マニピュレーターを読み込みます。rigidBodyTree オブジェクトとして指定します。
ur10 = loadrobot("universalUR10");Robotiq 2F-85 グリッパーを読み込んで、マニピュレーター アームに接続します。
gripper = loadrobot("robotiq2F85");グリッパーを UR10 アームの先端に接続します。
addSubtree(ur10, 'tool0', gripper, ReplaceBase=false);ロボットを show で表示し、showdetails を使用してロボットの詳細を読み取り、rigidBodyTree オブジェクトの変更されたジョイントを表示します。
show(ur10)

ans =
Axes (Primary) with properties:
XLim: [-1.5000 1.5000]
YLim: [-1.5000 1.5000]
XScale: 'linear'
YScale: 'linear'
GridLineStyle: '-'
Position: [0.1300 0.1100 0.7750 0.8150]
Units: 'normalized'
Show all properties
showdetails(ur10)
-------------------- Robot: (21 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 base_link world_joint fixed world(0) base(2) shoulder_link(3) 2 base base_link-base_fixed_joint fixed base_link(1) 3 shoulder_link shoulder_pan_joint revolute base_link(1) upper_arm_link(4) 4 upper_arm_link shoulder_lift_joint revolute shoulder_link(3) forearm_link(5) 5 forearm_link elbow_joint revolute upper_arm_link(4) wrist_1_link(6) 6 wrist_1_link wrist_1_joint revolute forearm_link(5) wrist_2_link(7) 7 wrist_2_link wrist_2_joint revolute wrist_1_link(6) wrist_3_link(8) 8 wrist_3_link wrist_3_joint revolute wrist_2_link(7) ee_link(9) tool0(10) 9 ee_link ee_fixed_joint fixed wrist_3_link(8) 10 tool0 wrist_3_link-tool0_fixed_joint fixed wrist_3_link(8) robotiq_arg2f_base_link(11) 11 robotiq_arg2f_base_link robotiq_arg2f_base_link_jnt fixed tool0(10) left_outer_knuckle(12) left_inner_knuckle(16) right_inner_knuckle(17) right_outer_knuckle(18) 12 left_outer_knuckle finger_joint revolute robotiq_arg2f_base_link(11) left_outer_finger(13) 13 left_outer_finger left_outer_finger_joint fixed left_outer_knuckle(12) left_inner_finger(14) 14 left_inner_finger left_inner_finger_joint revolute left_outer_finger(13) left_inner_finger_pad(15) 15 left_inner_finger_pad left_inner_finger_pad_joint fixed left_inner_finger(14) 16 left_inner_knuckle left_inner_knuckle_joint revolute robotiq_arg2f_base_link(11) 17 right_inner_knuckle right_inner_knuckle_joint revolute robotiq_arg2f_base_link(11) 18 right_outer_knuckle right_outer_knuckle_joint revolute robotiq_arg2f_base_link(11) right_outer_finger(19) 19 right_outer_finger right_outer_finger_joint fixed right_outer_knuckle(18) right_inner_finger(20) 20 right_inner_finger right_inner_finger_joint revolute right_outer_finger(19) right_inner_finger_pad(21) 21 right_inner_finger_pad right_inner_finger_pad_joint fixed right_inner_finger(20) --------------------
入力引数
ロボット モデル。rigidBodyTree オブジェクトとして指定します。
親ボディ名。string スカラーまたは文字ベクトルとして指定します。この親ボディはロボット モデルに既に存在しなければなりません。新しいボディはこの親ボディに接続されます。
データ型: char | string
親座標系の名前。string スカラーまたは文字ベクトルとして指定します。この親座標系はロボット モデルに既に存在していなければなりません。新しい座標系はこの親座標系に接続されます。
データ型: char | string
サブツリー ロボット モデル。rigidBodyTree オブジェクトとして指定します。
MODE が true に指定されている場合、サブツリーの現在のベースを bodyname に置き換えます。MODE の既定値は true に設定されています。
データ型: logical
拡張機能
使用上の注意および制限:
rigidBodyTree オブジェクトの作成時には、ロボット モデルにボディを追加する上限として MaxNumBodies を指定する構文を使用します。また、DataFormat プロパティを、名前と値のペアとして指定しなければなりません。以下に例を示します。
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
データの使用量を最小限に抑えるには、上限をモデル内の必要なボディ数に近い数にします。すべてのデータ形式がコード生成用でサポートされています。ダイナミクス関数を使用するには、データ形式を "row" または "column" に設定しなければなりません。
関数 show および showdetails ではコード生成はサポートされません。
バージョン履歴
R2016b で導入addSubtree メソッドを使用して、既存のロボット モデルの指定した座標系にサブツリーを接続できます。
名前と値の引数 ReplaceBase を使用して、サブツリーの現在のベースを bodyname に置き換えます。
参考
rigidBodyJoint | rigidBody | addBody | removeBody | replaceBody
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)