Добавьте тело в робота
addBody(
добавляет, что твердое тело к роботу возражает, и присоединен к родительскому элементу твердого тела, заданному robot
,body
,parentname
)parentname
. body
свойство задает, как это тело перемещается относительно вышестоящей инстанции.
Добавьте твердое тело и соответствующее соединение к дереву твердого тела. Каждый 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
Внесите изменения в существующий 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 rigidBodyJoint] Mass: 1 CenterOfMass: [0 0 0] Inertia: [1 1 1 0 0 0] Parent: [1x1 rigidBody] Children: {[1x1 rigidBody]} Visuals: {}
body3Copy = copy(body3);
Замените соединение на L3
тело. Необходимо создать новый Joint
объект и использование replaceJoint
гарантировать нисходящую геометрию тела незатронуто. Вызовите setFixedTransform
при необходимости задавать преобразование между телами вместо с единичными матрицами по умолчанию.
newJoint = rigidBodyJoint('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: {[1x1 rigidBody] [1x1 rigidBody] [1x1 rigidBody]} Base: [1x1 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) --------------------
robot
— Модель RobotrigidBodyTree
объектМодель Robot, заданная как rigidBodyTree
объект.
body
— Твердое телоrigidBody
объектТвердое тело, заданное как rigidBodyTree
объект.
parentname
— Имя вышестоящей инстанцииИмя вышестоящей инстанции, заданное как скаляр строки или вектор символов. Эта вышестоящая инстанция должна уже существовать в модели робота. Новое тело присоединено к этой вышестоящей инстанции.
Типы данных: char |
string
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.