Класс: робототехника. RigidBodyTree
Пакет: робототехника
Добавьте поддерево в робота
addSubtree(robot,parentname,subtree)
addSubtree(
присоединяет модель робота, robot
,parentname
,subtree
)subtree
, к существующей модели робота, robot
, в теле, заданном parentname
. Основа поддерева не добавляется как тело.
robot
— RobotRigidBodyTree
Модель Robot, заданная как объект RigidBodyTree
.
parentname
— Имя вышестоящей инстанцииИмя вышестоящей инстанции, заданное как скаляр строки или вектор символов. Эта вышестоящая инстанция должна уже существовать в модели робота. Новое тело присоединено к этой вышестоящей инстанции.
Типы данных: char | string
subtree
— Модель робота поддереваRigidBodyTree
Модель робота поддерева, заданная как объект RigidBodyTree
.
Внесите изменения в существующий объект 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) --------------------
robotics.Joint
| robotics.RigidBody
| robotics.RigidBodyTree.addBody
| robotics.RigidBodyTree.removeBody
| robotics.RigidBodyTree.replaceBody
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.