Замените соединение на корпусе
Внесение изменений в существующее rigidBodyTree
объект. Можно получить замещающие соединения, тела и поддеревья в древовидном твердом теле.
Загрузите роботы в пример следующим rigidBodyTree
объекты.
load exampleRobots.mat
Просмотрите детали робота Puma, используя 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: {} Collisions: {}
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
- Модель роботаrigidBodyTree
объектМодель робота, заданная как rigidBodyTree
объект.
bodyname
- Имя телаИмя тела, заданное как строковый скаляр или вектор символов. Это тело должно быть на модели робота, указанной в robot
.
Типы данных: char
| string
joint
- Замещающее соединениеrigidBodyJoint
объектЗамещающее соединение, заданное как rigidBodyJoint
объект.
Указания и ограничения по применению:
При создании rigidBodyTree
объект, используйте синтаксис, который задает MaxNumBodies
как верхняя граница для добавления тел к модели робота. Вы также должны задать DataFormat
свойство как пара "имя-значение". Для примера:
robot = rigidBodyTree("MaxNumBodies",15,"DataFormat","row")
Чтобы минимизировать использование данных, ограничьте верхнюю границу числом, близким к ожидаемому количеству тел в модели. Все форматы данных поддерживаются для генерации кода. Чтобы использовать функции динамики, формат данных должен быть установлен на "row"
или "column"
.
The show
и showdetails
функции не поддерживают генерацию кода.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.