replaceJoint

Замените соединение на корпусе

Описание

пример

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

Примеры

свернуть все

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

Загрузите роботы в пример следующим rigidBodyTree объекты.

load exampleRobots.mat

Просмотрите детали робота Puma, используя 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 rigidBodyJoint]
            Mass: 1
    CenterOfMass: [0 0 0]
         Inertia: [1 1 1 0 0 0]
          Parent: [1x1 rigidBody]
        Children: {[1x1 rigidBody]}
         Visuals: {}
      Collisions: {}

body3Copy = copy(body3);

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

newJoint = rigidBodyJoint('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: {[1x1 rigidBody]  [1x1 rigidBody]  [1x1 rigidBody]}
          Base: [1x1 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)   
--------------------

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

свернуть все

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

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

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

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

Расширенные возможности

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