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