addSubtree

Класс: робототехника. RigidBodyTree
Пакет: робототехника

Добавьте поддерево в робота

Синтаксис

addSubtree(robot,parentname,subtree)

Описание

addSubtree(robot,parentname,subtree) присоединяет модель робота, subtree, к существующей модели робота, robot, в теле, заданном parentname. Основа поддерева не добавляется как тело.

Входные параметры

развернуть все

Модель Robot, заданная как объект RigidBodyTree.

Имя вышестоящей инстанции, заданное как скаляр строки или вектор символов. Эта вышестоящая инстанция должна уже существовать в модели робота. Новое тело присоединено к этой вышестоящей инстанции.

Типы данных: char | string

Модель робота поддерева, заданная как объект RigidBodyTree.

Примеры

развернуть все

Внесите изменения в существующий объект RigidBodyTree. Можно получить соединения замены, тела и поддеревья в дереве твердого тела.

Загрузите роботов в качестве примера, когда RigidBodyTree возражает.

load exampleRobots.mat

Посмотрите детали робота Пумы с помощью showdetails.

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 robotics.Joint]
            Mass: 1
    CenterOfMass: [0 0 0]
         Inertia: [1 1 1 0 0 0]
          Parent: [1x1 robotics.RigidBody]
        Children: {[1x1 robotics.RigidBody]}
         Visuals: {}

body3Copy = copy(body3);

Замените соединение на теле L3. Необходимо создать новый объект Joint и использовать replaceJoint, чтобы гарантировать, что нисходящая геометрия тела незатронута. Вызовите setFixedTransform при необходимости, чтобы задать преобразование между телами вместо с единичными матрицами по умолчанию.

newJoint = robotics.Joint('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: {1x3 cell}
          Base: [1x1 robotics.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)   
--------------------

Введенный в R2017b