replaceJoint

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

Соединение замены на теле

Синтаксис

replaceJoint(robot,bodyname,joint)

Описание

replaceJoint(robot,bodyname,joint) заменяет соединение на заданном теле в модели робота, если тело является частью модели робота. Этот метод является единственным способом изменить соединения в модели робота. Вы не можете непосредственно присвоить свойство Joint твердого тела.

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

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

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

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

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

Заменяющее соединение, заданное как объект Joint.

Примеры

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

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

Для просмотра документации необходимо авторизоваться на сайте