Пакет: робототехника
Создайте соединение
Класс Joint создает объединенный объект, который задает, как твердое тело перемещается относительно точки крепления. В роботе с древовидной структурой соединение всегда принадлежит определенному твердому телу, и каждое твердое тело имеет одно соединение.
Объект Joint может описать соединения различных типов. При создании древовидной структуры твердого тела с robotics.RigidBodyTree необходимо присвоить объект Joint твердому телу с помощью класса robotics.RigidBody.
Различные объединенные поддерживаемые типы:
fixed — Фиксированное соединение, которое предотвращает относительное движение между двумя телами.
revolute — Одно соединение степени свободы (DOF), которое вращается вокруг данной оси. Также названный контактом или шарниром.
prismatic — Одно соединение степени свободы, которое скользит вдоль данной оси. Также названный скользящим соединением.
Каждый объединенный тип имеет различные свойства с различными размерностями, в зависимости от его заданной геометрии.
создает фиксированное соединение с указанным именем.jointObj = robotics.Joint(jname)
jname — Объединенное имяОбъединенное имя, заданное как скаляр строки или вектор символов. Объединенное имя должно быть уникальным, чтобы получить доступ к нему от дерева твердого тела.
Пример: "elbow_right"
Типы данных: char | string
jtype — 'JointType' 'fixed' (значение по умолчанию) | представляет скаляр в виде строки | вектор символовОбъединенный тип, заданный как скаляр строки или вектор символов. Объединенный тип предопределяет определенные свойства при создании соединения.
Различные объединенные поддерживаемые типы:
fixed — Фиксированное соединение, которое предотвращает относительное движение между двумя телами.
revolute — Одно соединение степени свободы (DOF), которое вращается вокруг данной оси. Также названный контактом или шарниром.
prismatic — Одно соединение степени свободы, которое скользит вдоль данной оси. Также названный скользящим соединением.
Типы данных: char | string
Ввод 'JointType' 'fixed' (значение по умолчанию) | представляет скаляр в виде строки | вектор символовЭто свойство доступно только для чтения.
Объединенный тип, возвращенный как скаляр строки или вектор символов. Объединенный тип предопределяет определенные свойства при создании соединения.
Различные объединенные поддерживаемые типы:
fixed — Фиксированное соединение, которое предотвращает относительное движение между двумя телами.
revolute — Одно соединение степени свободы (DOF), которое вращается вокруг данной оси. Также названный контактом или шарниром.
prismatic — Одно соединение степени свободы, которое скользит вдоль данной оси. Также названный скользящим соединением.
Если твердое тело, которое содержит это соединение, добавляется к модели робота, объединенный тип должен быть изменен, заменив соединение с помощью robotics.RigidBodyTree.replaceJoint.
Типы данных: char | string
Имя Объединенное имяОбъединенное имя, возвращенное как скаляр строки или вектор символов. Объединенное имя должно быть уникальным, чтобы получить доступ к нему от дерева твердого тела. Если твердое тело, которое содержит это соединение, добавляется к модели робота, объединенное название должно быть изменено, заменив соединение с помощью robotics.RigidBodyTree.replaceJoint.
Пример: "elbow_right"
Типы данных: char | string
PositionLimits — Пределы положения соединенияПределы положения соединения, заданного как вектор значений [min max]. В зависимости от типа соединения эти значения имеют различные определения.
fixed — [NaN NaN] (значение по умолчанию). Фиксированное соединение не имеет никаких объединенных пределов. Тела остаются фиксированными друг между другом.
revolute — [-pi pi] (значение по умолчанию). Пределы задают угол вращения вокруг оси в радианах.
prismatic — [0 0.5] (значение по умолчанию). Пределы задают линейное движение вдоль оси в метрах.
HomePosition — Исходное положение соединенияИсходное положение соединения, заданного как скаляр, который зависит от вашего объединенного типа. Исходное положение должно упасть в области значений, установленной PositionLimits. Это свойство используется robotics.RigidBodyTree.homeConfiguration, чтобы сгенерировать предопределенную домашнюю настройку для целого дерева твердого тела.
В зависимости от объединенного типа исходное положение имеет различное определение.
fixed — 0 (значение по умолчанию). Фиксированное соединение не имеет никакого соответствующего исходного положения.
revolute — 0 (значение по умолчанию). Шарнирному соединению задал исходное положение угол вращения вокруг объединенной оси в радианах.
prismatic — 0 (значение по умолчанию). Призматическому соединению задало исходное положение линейное движение вдоль объединенной оси в метрах.
JointAxis — Ось движения для соединенияNaN NaN NaN] (значение по умолчанию) | трехэлементный единичный векторОсь движения для соединения, заданного как трехэлементный единичный вектор. Вектор может быть любым направлением на 3-D пробеле в локальных координатах.
В зависимости от объединенного типа объединенная ось имеет различное определение.
fixed — Фиксированное соединение не имеет никакой соответствующей оси движения.
revolute — Шарнирное соединение вращает тело в плоском перпендикуляре к объединенной оси.
prismatic — Призматические совместные действия тело в линейном движении вдоль объединенного направления оси.
JointToParentTransform — Фиксированное преобразование от соединения, чтобы породить кадрeye(4) (значение по умолчанию) | 4 на 4 гомогенный преобразовывает матрицуЭто свойство доступно только для чтения.
Фиксированное преобразование от соединения, чтобы породить кадр, возвращенный, когда гомогенное 4 на 4 преобразовывают матрицу. Преобразование преобразовывает координаты точек в объединенном кадре-предшественнике к кадру вышестоящей инстанции.
ChildToJointTransform — Фиксированное преобразование от дочернего тела, чтобы соединить кадрeye(4) (значение по умолчанию) | 4 на 4 гомогенный преобразовывает матрицуЭто свойство доступно только для чтения.
Фиксированное преобразование от дочернего тела, чтобы соединить кадр, возвращенный, когда гомогенное 4 на 4 преобразовывают матрицу. Преобразование преобразовывает координаты точек в дочернем каркасе кузова к объединенному кадру преемника.
| копия | Создайте копию соединения |
| setFixedTransform | Установите зафиксированный, преобразовывают свойства соединения |
Добавьте твердое тело и соответствующее соединение к дереву твердого тела. Каждый объект 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;
Создайте первое твердое тело и добавьте его в робота. Добавить твердое тело:
Создайте объект RigidBody и дайте ему уникальное имя.
Создайте объект Joint и дайте ему уникальное имя.
Используйте setFixedTransform, чтобы задать преобразование от тела к телу с помощью параметров DH. Последний элемент параметров DH, theta, проигнорирован, потому что угол зависит от объединенного положения.
Вызовите 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
Внесите изменения в существующий объект RigidBodyTree. Можно получить соединения замены, тела и поддеревья в дереве твердого тела.
Загрузите роботов в качестве примера, когда RigidBodyTree возражает.
load exampleRobots.matПосмотрите детали робота Пумы с помощью showdetails.
showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
Заставьте определенное тело осматривать свойства. Единственный дочерний элемент тела L3 является телом L4. Можно скопировать определенное тело также.
body3 = getBody(puma1,'L3');
childBody = body3.Children{1}childBody =
RigidBody with properties:
Name: 'L4'
Joint: [1x1 robotics.Joint]
Mass: 1
CenterOfMass: [0 0 0]
Inertia: [1 1 1 0 0 0]
Parent: [1x1 robotics.RigidBody]
Children: {[1x1 robotics.RigidBody]}
Visuals: {}
body3Copy = copy(body3);
Замените соединение на теле L3. Необходимо создать новый объект Joint и использовать replaceJoint, чтобы гарантировать, что нисходящая геометрия тела незатронута. Вызовите setFixedTransform при необходимости, чтобы задать преобразование между телами вместо с единичными матрицами по умолчанию.
newJoint = robotics.Joint('prismatic'); replaceJoint(puma1,'L3',newJoint); showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 prismatic fixed L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
Удалите целое тело и получите получившееся поддерево с помощью removeBody. Удаленное тело включено в поддерево.
subtree = removeBody(puma1,'L4')subtree =
RigidBodyTree with properties:
NumBodies: 3
Bodies: {1x3 cell}
Base: [1x1 robotics.RigidBody]
BodyNames: {'L4' 'L5' 'L6'}
BaseName: 'L3'
Gravity: [0 0 0]
DataFormat: 'struct'
Удалите измененное тело L3. Добавьте исходное скопированное тело L3 в тело L2, сопровождаемое возвращенным поддеревом. Модель робота остается то же самое. Смотрите подробное сравнение через showdetails.
removeBody(puma1,'L3'); addBody(puma1,body3Copy,'L2') addSubtree(puma1,'L3',subtree) showdetails(puma1)
-------------------- Robot: (6 bodies) Idx Body Name Joint Name Joint Type Parent Name(Idx) Children Name(s) --- --------- ---------- ---------- ---------------- ---------------- 1 L1 jnt1 revolute base(0) L2(2) 2 L2 jnt2 revolute L1(1) L3(3) 3 L3 jnt3 revolute L2(2) L4(4) 4 L4 jnt4 revolute L3(3) L5(5) 5 L5 jnt5 revolute L4(4) L6(6) 6 L6 jnt6 revolute L5(5) --------------------
[1] Крэйг, Джон Дж. Введение в робототехнику: механика и управление. Чтение, MA: Аддисон-Уэсли, 1989.
[2] Siciliano, Бруно. Робототехника: моделирование, планируя и управляет. Лондон: Спрингер, 2009.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.