getBody

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

Получите указатель корпуса робота по наименованию

Синтаксис

body = getBody(robot,bodyname)

Описание

body = getBody(robot,bodyname) получает указатель тела по наименованию из модели робота.

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

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

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

Имя тела, заданное как скаляр строки или вектор символов. Тело с этим именем должно быть на модели робота, заданной robot.

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

Выходные аргументы

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

Твердое тело, возвращенное как объект RigidBody. Возвращенный объект RigidBody является все еще частью модели робота RigidBodyTree. Используйте robotics.RigidBodyTree.replaceBody с новым телом, чтобы изменить тело в модели робота.

Примеры

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

Внесите изменения в существующий объект 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