робототехника. Класс RigidBody

Пакет: робототехника

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

Описание

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

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

Конструкция

пример

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

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

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

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

Свойства

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

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

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

Объект Joint, заданный как указатель. По умолчанию соединение является типом 'fixed'. Создайте соединение с помощью robotics.Joint и задайте объединенный тип на создании.

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

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

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

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

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

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

Методы

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

Примеры

свернуть все

Добавьте твердое тело и соответствующее соединение к дереву твердого тела. Каждый объект RigidBody содержит объект Joint и должен быть добавлен к RigidBodyTree с помощью addBody.

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

rbtree = robotics.RigidBodyTree;

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

body1 = robotics.RigidBody('b1');

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

jnt1 = robotics.Joint('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 = robotics.RigidBodyTree;

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

  1. Создайте объект RigidBody и дайте ему уникальное имя.

  2. Создайте объект Joint и дайте ему уникальное имя.

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

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

body1 = robotics.RigidBody('body1');
jnt1 = robotics.Joint('jnt1','revolute');

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

addBody(robot,body1,'base')

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

body2 = robotics.RigidBody('body2');
jnt2 = robotics.Joint('jnt2','revolute');
body3 = robotics.RigidBody('body3');
jnt3 = robotics.Joint('jnt3','revolute');
body4 = robotics.RigidBody('body4');
jnt4 = robotics.Joint('jnt4','revolute');
body5 = robotics.RigidBody('body5');
jnt5 = robotics.Joint('jnt5','revolute');
body6 = robotics.RigidBody('body6');
jnt6 = robotics.Joint('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')

Проверьте, что ваш робот был создан правильно при помощи функции show или showdetails. 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