rigidBody

Создайте твердое тело

Описание

rigidBody объект представляет твердое тело. Твердое тело является базовым блоком для любого манипулятора робота с древовидной структурой. Каждый rigidBody имеет rigidBodyJoint объект присоединил к нему, который задает, как твердое тело может переместиться. Твердые тела собраны в модель робота с древовидной структурой использование rigidBodyTree.

Установите объединенный объект на Joint свойство прежде, чем вызвать addBody добавить твердое тело в модель робота. Когда твердое тело находится в дереве твердого тела, вы не можете непосредственно изменить его свойства, потому что оно повреждает отношения между телами. Используйте replaceJoint изменить целую древовидную структуру.

Создание

Синтаксис

Описание

пример

body = rigidBody(name) создает твердое тело с указанным именем. По умолчанию тело идет с фиксированным соединением.

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

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

Имя твердого тела в виде строкового скаляра или вектора символов. Это имя должно быть уникально для тела так, чтобы к этому можно было получить доступ в rigidBodyTree объект.

Свойства

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

Имя твердого тела в виде строкового скаляра или вектора символов. Это имя должно быть уникально для тела так, чтобы это могло быть найдено в rigidBodyTree объект.

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

rigidBodyJoint объект в виде указателя. По умолчанию соединением является 'fixed' ввод.

Масса твердого тела в виде числового скаляра в килограммах.

Центр массового положения твердого тела в виде [x y z] вектор. Вектор описывает местоположение центра массы относительно системы координат тела в метрах.

Инерция твердого тела в виде [Ixx Iyy Izz Iyz Ixz Ixy] вектор относительно системы координат тела в квадратных метрах килограмма. Первыми тремя элементами вектора являются диагональные элементы inertia tensor. Последними тремя элементами являются недиагональные элементы тензора инерции. Тензор инерции является положительной полуопределенной симметрической матрицей:

Родительский элемент твердого тела в виде rigidBody указатель на объект. Соединение твердого тела задает, как это тело может переместиться относительно родительского элемента. Это свойство пусто, пока твердое тело не добавляется к rigidBodyTree модель робота.

Дочерние элементы твердого тела в виде массива ячеек rigidBody указатели на объект. Эти дочерние элементы твердого тела все присоединяются к этому объекту твердого тела. Это свойство пусто, пока твердое тело не добавляется к rigidBodyTree модель робота, и по крайней мере еще одно тело добавляются к дереву с этим телом как его родительский элемент.

Визуальные конфигурации в виде массива ячеек строковых скаляров или векторов символов. Каждый вектор символов описывает тип и источник визуальной геометрии. Например, если файл mesh, link_0.stl, присоединен к твердому телу, визуальным был бы Mesh:link_0.stl. Визуальные конфигурации добавляются к твердому телу с помощью addVisual.

Функции объекта

copyСоздайте глубокую копию твердого тела
addCollisionДобавьте геометрию столкновения в твердое тело
addVisualДобавьте визуальные данные о геометрии в твердое тело
clearCollisionОчистите все присоединенные конфигурации столкновения
clearVisualОчистите все визуальные конфигурации

Примеры

свернуть все

Добавьте твердое тело и соответствующее соединение к дереву твердого тела. Каждый rigidBody объект содержит rigidBodyJoint возразите и должен быть добавлен к rigidBodyTree использование addBody.

Создайте дерево твердого тела.

rbtree = rigidBodyTree;

Создайте твердое тело с уникальным именем.

body1 = rigidBody('b1');

Создайте шарнирное соединение. По умолчанию, rigidBody объект идет с фиксированным соединением. Замените соединение путем присвоения нового rigidBodyJoint возразите против body1.Joint свойство.

jnt1 = rigidBodyJoint('jnt1','revolute');
body1.Joint = jnt1;

Добавьте твердое тело в дерево. Задайте имя тела, к которому вы присоединяете твердое тело. Поскольку это - первое тело, используйте базовое имя дерева.

basename = rbtree.BaseName;
addBody(rbtree,body1,basename)

Используйте showdetails на дереве, чтобы подтвердить твердое тело и соединение были добавлены правильно.

showdetails(rbtree)
--------------------
Robot: (1 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1           b1         jnt1     revolute             base(0)   
--------------------

Используйте параметры Denavit-Hartenberg (DH) робота Puma560®, чтобы создать робота. Каждое твердое тело добавляется по одному, с дочерним элементом к родительскому элементу преобразовывают заданный объединенным объектом.

Параметры DH задают геометрию робота с отношением к тому, как каждое твердое тело присоединено к своему родительскому элементу. Для удобства установите параметры для робота Puma560 в матрице. Робот Пумы является последовательным цепочечным манипулятором. Параметры DH относительно предыдущей линии в матрице, соответствуя предыдущему объединенному прикреплению.

dhparams = [0   	pi/2	0   	0;
            0.4318	0       0       0
            0.0203	-pi/2	0.15005	0;
            0   	pi/2	0.4318	0;
            0       -pi/2	0   	0;
            0       0       0       0];

Создайте объект дерева твердого тела создать робота.

robot = rigidBodyTree;

Создайте первое твердое тело и добавьте его в робота. Добавить твердое тело:

  1. Создайте rigidBody возразите и дайте ему уникальное имя.

  2. Создайте rigidBodyJoint возразите и дайте ему уникальное имя.

  3. Используйте setFixedTransform задавать преобразование от тела к телу с помощью параметров DH. Последний элемент параметров DH, theta, проигнорирован, потому что угол зависит от объединенного положения.

  4. Вызовите addBody присоединить первый сустав к базовой системе координат робота.

body1 = rigidBody('body1');
jnt1 = rigidBodyJoint('jnt1','revolute');

setFixedTransform(jnt1,dhparams(1,:),'dh');
body1.Joint = jnt1;

addBody(robot,body1,'base')

Создайте и добавьте другие твердые тела в робота. Задайте предыдущее имя тела при вызове addBody присоединить его. Каждое фиксированное преобразование относительно предыдущей объединенной координатной системы координат.

body2 = rigidBody('body2');
jnt2 = rigidBodyJoint('jnt2','revolute');
body3 = rigidBody('body3');
jnt3 = rigidBodyJoint('jnt3','revolute');
body4 = rigidBody('body4');
jnt4 = rigidBodyJoint('jnt4','revolute');
body5 = rigidBody('body5');
jnt5 = rigidBodyJoint('jnt5','revolute');
body6 = rigidBody('body6');
jnt6 = rigidBodyJoint('jnt6','revolute');

setFixedTransform(jnt2,dhparams(2,:),'dh');
setFixedTransform(jnt3,dhparams(3,:),'dh');
setFixedTransform(jnt4,dhparams(4,:),'dh');
setFixedTransform(jnt5,dhparams(5,:),'dh');
setFixedTransform(jnt6,dhparams(6,:),'dh');

body2.Joint = jnt2;
body3.Joint = jnt3;
body4.Joint = jnt4;
body5.Joint = jnt5;
body6.Joint = jnt6;

addBody(robot,body2,'body1')
addBody(robot,body3,'body2')
addBody(robot,body4,'body3')
addBody(robot,body5,'body4')
addBody(robot,body6,'body5')

Проверьте, что ваш робот был создан правильно при помощи showdetails или show функция. showdetails списки все тела в командном окне MATLAB®. show отображает робота с данной настройкой (домой по умолчанию). Вызовы axis измените пределы по осям и скройте подписи по осям.

showdetails(robot)
--------------------
Robot: (6 bodies)

 Idx    Body Name   Joint Name   Joint Type    Parent Name(Idx)   Children Name(s)
 ---    ---------   ----------   ----------    ----------------   ----------------
   1        body1         jnt1     revolute             base(0)   body2(2)  
   2        body2         jnt2     revolute            body1(1)   body3(3)  
   3        body3         jnt3     revolute            body2(2)   body4(4)  
   4        body4         jnt4     revolute            body3(3)   body5(5)  
   5        body5         jnt5     revolute            body4(4)   body6(6)  
   6        body6         jnt6     revolute            body5(5)   
--------------------
show(robot);
axis([-0.5,0.5,-0.5,0.5,-0.5,0.5])
axis off

Вопросы совместимости

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

Изменение поведения в будущем релизе

Ссылки

[1] Крэйг, Джон Дж. Введение в робототехнику: механика и управление. Чтение, MA: Аддисон-Уэсли, 1989.

[2] Siciliano, Бруно. Робототехника: моделирование, планируя и управляет. Лондон: Спрингер, 2009.

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

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Введенный в R2017b