メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

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);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 24 objects of type patch, line. These objects represent base_link, base, link_1, link_2, link_3, link_4, link_5, link_6, tool0, link_1_mesh, link_2_mesh, link_3_mesh, link_4_mesh, link_5_mesh, link_6_mesh, base_link_mesh.

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);

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 12 objects of type patch, line. These objects represent link_3, link_4, link_5, link_6, tool0, link_4_mesh, link_5_mesh, link_6_mesh.

変更した 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)

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 61 objects of type patch, line. These objects represent world, base_link, base, shoulder_link, upper_arm_link, forearm_link, wrist_1_link, wrist_2_link, wrist_3_link, ee_link, tool0, robotiq_arg2f_base_link, left_outer_knuckle, left_outer_finger, left_inner_finger, left_inner_finger_pad, left_inner_knuckle, right_inner_knuckle, right_outer_knuckle, right_outer_finger, right_inner_finger, right_inner_finger_pad, base_link_mesh, shoulder_link_mesh, upper_arm_link_mesh, forearm_link_mesh, wrist_1_link_mesh, wrist_2_link_mesh, wrist_3_link_mesh, robotiq_arg2f_base_link_mesh, left_outer_knuckle_mesh, left_outer_finger_mesh, left_inner_finger_mesh, left_inner_finger_pad_mesh, left_inner_knuckle_mesh, right_inner_knuckle_mesh, right_outer_knuckle_mesh, right_outer_finger_mesh, right_inner_finger_mesh, right_inner_finger_pad_mesh.

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 オブジェクトとして指定します。

MODEtrue に指定されている場合、サブツリーの現在のベースを bodyname に置き換えます。MODE の既定値は true に設定されています。

データ型: logical

拡張機能

すべて展開する

バージョン履歴

R2016b で導入

すべて展開する