exponenta event banner

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] вектор относительно каркаса тела в килограммах квадратных метров. Первые три элемента вектора являются диагональными элементами тензора инерции. Последние три элемента являются не диагональными элементами тензора инерции. Тензор инерции является положительной полуопределённой симметричной матрицей:

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

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

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

Геометрия коллизий, заданная как массив ячеек векторов символов. Каждый вектор символов описывает тип объекта столкновения и соответствующие параметры геометрии столкновения. Чтобы изменить геометрию столкновения для жесткого тела, используйте команду addCollision и clearCollision функции.

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

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 робота в матрице [1]. Робот Puma - последовательный цепной манипулятор. Параметры 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] Корк, П. И. и Б. Армстронг-Хелуври. «Поиск консенсуса между параметрами модели, сообщенными для робота PUMA 560». Материалы Международной конференции IEEE по робототехнике и автоматизации 1994 года, IEEE Comput. Soc. Press, 1994, стр. 1608-13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

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

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

Изменение поведения в будущем выпуске

Ссылки

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

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

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

Создание кода C/C + +
Создайте код C и C++ с помощью MATLAB ® Coder™

.
Представлен в R2016b