このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
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)