Создайте твердое тело
rigidBody
объект представляет твердое тело. Твердое тело является базовым блоком для любого манипулятора робота с древовидной структурой. Каждый rigidBody
имеет rigidBodyJoint
объект присоединил к нему, который задает, как твердое тело может переместиться. Твердые тела собраны в модель робота с древовидной структурой использование rigidBodyTree
.
Установите объединенный объект на Joint
свойство прежде, чем вызвать addBody
добавить твердое тело в модель робота. Когда твердое тело находится в дереве твердого тела, вы не можете непосредственно изменить его свойства, потому что оно повреждает отношения между телами. Используйте replaceJoint
изменить целую древовидную структуру.
name
— Имя твердого телаИмя твердого тела, заданного как скаляр строки или вектор символов. Это имя должно быть уникально для тела так, чтобы к этому можно было получить доступ в rigidBodyTree
объект.
Name
— Имя твердого телаИмя твердого тела, заданного как скаляр строки или вектор символов. Это имя должно быть уникально для тела так, чтобы это могло быть найдено в rigidBodyTree
объект.
Типы данных: char |
string
Joint
— rigidBodyJoint
объектrigidBodyJoint
объект, заданный как указатель. По умолчанию соединением является 'fixed'
ввод.
Mass
— Масса твердого тела
kg (значение по умолчанию) | числовой скалярМасса твердого тела, заданного в виде числа в килограммах.
CenterOfMass
— Центр массового положения твердого тела
m (значение по умолчанию) | [x y z]
векторЦентр массового положения твердого тела, заданного как [x y z]
вектор. Вектор описывает местоположение центра массы относительно системы координат тела в метрах.
Inertia
— Инерция твердого тела
kg • m2 (значение по умолчанию) | [Ixx Iyy Izz Iyz Ixz Ixy]
векторИнерция твердого тела, заданного как [Ixx Iyy Izz Iyz Ixz Ixy]
вектор относительно системы координат тела в квадратных метрах килограмма. Первые три элемента вектора являются диагональными элементами inertia tensor. Последние три элемента являются недиагональными элементами тензора инерции. Тензор инерции является положительной определенной симметрической матрицей:
Parent
— Родительский элемент твердого телаrigidBody
указатель на объектРодительский элемент твердого тела, заданный как rigidBody
указатель на объект. Соединение твердого тела задает, как это тело может переместиться относительно родительского элемента. Это свойство пусто, пока твердое тело не добавляется к rigidBodyTree
модель робота.
Children
— Дочерние элементы твердого телаrigidBody
указатели на объектДочерние элементы твердого тела, заданные как массив ячеек rigidBody
указатели на объект. Эти дочерние элементы твердого тела все присоединяются к этому объекту твердого тела. Это свойство пусто, пока твердое тело не добавляется к rigidBodyTree
модель робота, и по крайней мере еще одно тело добавляются к дереву с этим телом как его родительский элемент.
Visuals
— Визуальные конфигурацииВизуальные конфигурации, заданные как массив ячеек скаляров строки или векторов символов. Каждый вектор символов описывает тип и источник визуальной геометрии. Например, если файл mesh, link_0.stl
, присоединен к твердому телу, визуальным был бы Mesh:link_0.stl
. Визуальные конфигурации добавляются к твердому телу с помощью addVisual
.
copy | Создайте глубокую копию твердого тела |
Добавьте твердое тело и соответствующее соединение к дереву твердого тела. Каждый 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;
Создайте первое твердое тело и добавьте его в робота. Добавить твердое тело:
Создайте rigidBody
возразите и дайте ему уникальное имя.
Создайте rigidBodyJoint
возразите и дайте ему уникальное имя.
Используйте setFixedTransform
задавать преобразование от тела к телу с помощью параметров DH. Последний элемент параметров DH, theta
, проигнорирован, потому что угол зависит от объединенного положения.
Вызовите 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
Изменение поведения в будущем релизе
rigidBody
объект был переименован от robotics.RigidBody
. Используйте rigidBody
для всего создания объекта.
[1] Крэйг, Джон Дж. Введение в робототехнику: механика и управление. Чтение, MA: Аддисон-Уэсли, 1989.
[2] Siciliano, Бруно. Робототехника: моделирование, планируя и управляет. Лондон: Спрингер, 2009.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
Вы щелкнули по ссылке, которая соответствует команде MATLAB:
Выполните эту команду, введя её в командном окне MATLAB.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.