rigidBody

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

Описание

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

Установите объект joint в 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.

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

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

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

Примеры

свернуть все

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

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

rbtree = rigidBodyTree;

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

body1 = rigidBody('b1');

Создайте шарнирное соединение. По умолчанию r igidBody объект поставляется с фиксированным соединением. Замените соединение путем назначения нового 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)   
--------------------

Используйте параметры Денавита-Хартенберга (DH) робота Puma560 ®, чтобы создать робота. Каждое твердое тело добавляется по одному с преобразованием «child-to-parent», заданным объектом joint.

Параметры 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] Corke, P. I., and B. Armstrong-Helouvry. «Поиск консенсуса среди параметров модели, сообщенных для робота PUMA 560». Материалы 1994 Международной конференции IEEE по робототехнике и автоматизации, IEEE Comput. Soc. Press, 1994, pp. 1608-13. DOI.org (Crossref), doi:10.1109/ROBOT.1994.351360.

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

расширить все

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

Ссылки

[1] Крейг, Джон Дж. Введение в робототехнику: механика и управление. Reading, MA: Addison-Wesley, 1989.

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

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

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

.
Введенный в R2016b