Модель дерева жесткого тела является представлением структуры робота. Его можно использовать для представления роботов, таких как манипуляторы или другие кинематические деревья. Использовать rigidBodyTree объекты для создания этих моделей.
Дерево жёстких тел состоит из жёстких тел (rigidBody), которые крепятся через соединения (rigidBodyJoint). Каждое жесткое тело имеет соединение, которое определяет способ перемещения этого тела относительно его родительского элемента в дереве. Задайте преобразование от одного тела к другому, установив фиксированное преобразование для каждого соединения (setFixedTransform).
Можно добавлять, заменять или удалять тела из модели дерева жестких тел. Можно также заменить соединения для определенных тел. rigidBodyTree объект поддерживает связи и обновляет rigidBody свойства объекта для отражения этой связи. Вы также можете получить преобразования между различными кадрами тела с помощью getTransform.
Каждое дерево жесткого тела имеет основание. Основание определяет мировую координатную рамку и является первой точкой присоединения для жесткого тела. База не может быть изменена, за исключением Name собственность. Это можно сделать, изменив BaseName свойства дерева жесткого тела.
Жесткое тело является основным строительным блоком модели дерева жесткого тела и создается с помощью rigidBody. Жесткое тело, иногда называемое звеном, представляет собой твердое тело, которое не может деформироваться. Расстояние между любыми двумя точками на одном жестком теле остается постоянным.

При добавлении в дерево жесткого тела с несколькими телами жесткие тела имеют связанные с ними родительские или дочерние тела (Parent или Children свойства). Родительским является тело, к которому прикреплено это жесткое тело, которое может быть базой робота. Потомки - это все тела, прикрепленные к этому телу ниже по течению от основания жесткого дерева тел.
Каждое жесткое тело имеет связанную с ними рамку координат и содержит rigidBodyJoint объект.
Каждое жесткое тело имеет одно соединение, которое определяет движение этого жесткого тела относительно его родителя. Это точка присоединения, соединяющая два жестких тела в модели робота. Чтобы представить одно физическое тело с несколькими соединениями или различными осями движения, используйте несколько rigidBody объекты.
rigidBodyJoint объект поддерживает неподвижные, поворотные и призматические соединения.

Эти соединения допускают следующее движение в зависимости от их типа:
'fixed' - Без движения. Корпус жестко соединен со своим родителем.
'revolute' - Только вращательное движение. Тело вращается вокруг этого соединения относительно его родителя. Пределы положения определяют минимальное и максимальное угловое положение в радианах вокруг оси движения.
'prismatic' - Только поступательное движение. Тело перемещается линейно относительно своего родителя вдоль оси движения.
Каждое соединение имеет ось движения, определяемую JointAxis собственность. Ось соединения - это 3-D единичный вектор, который определяет либо ось вращения (поворотные соединения), либо ось перемещения (призматические соединения). HomePosition свойство определяет исходное положение для данного конкретного соединения, которое является точкой в пределах положения. Использовать homeConfiguration чтобы вернуть домашнюю конфигурацию для робота, которая представляет собой набор всех исходных положений соединений в модели.
Соединения также имеют свойства, определяющие фиксированное преобразование между родительскими и дочерними координатными рамками тела. Эти свойства можно задать только с помощью setFixedTransform способ. В зависимости от метода ввода параметров преобразования: JointToParentTransform или ChildToJointTransform устанавливается с помощью этого метода. Другое свойство имеет значение единичной матрицы. На следующих рисунках показано, что означает каждое свойство.

JointToParentTransform определяет, где соединение дочернего тела связано с рамкой родительского тела. Когда JointToParentTransform является единичной матрицей, родительское тело и рамки соединения совпадают.
ChildToJointTransform определяет, где соединение дочернего тела связано с рамкой дочернего тела. Когда ChildToJointTransform является единичной матрицей, дочернее тело и рамки соединения совпадают.
Примечание
Фактические совместные позиции не являются частью этого Joint объект. Модель робота не имеет гражданства. Существует промежуточное преобразование между родительским и дочерним каркасами соединения, которое определяет положение соединения вдоль оси движения. Это преобразование определяется в конфигурации робота. См. раздел Конфигурации роботов.
После полной сборки робота и определения преобразований между различными телами можно создать конфигурации робота. Конфигурация определяет все позиции соединения робота по их именам соединений.
Использовать homeConfiguration чтобы получить HomePosition для каждого соединения и создайте домашнюю конфигурацию.
Конфигурации роботов приведены как массив структур.
config = homeConfiguration(robot)
config =
1×6 struct array with fields:
JointName
JointPositionconfig(1)
ans =
struct with fields:
JointName: 'jnt1'
JointPosition: 0

Можно также создать случайную конфигурацию, которая подчиняется всем пределам соединения с помощью randomConfiguration.

Используйте конфигурации роботов, если требуется построить график робота на рисунке с помощью show. Кроме того, можно получить преобразование между двумя корпусными кадрами с определенной конфигурацией, используя getTransform.

Чтобы получить конфигурацию робота с указанной позой конечного эффектора, используйте inverseKinematics. Этот алгоритм решает требуемые углы соединения для достижения определенной позы для заданного жесткого тела.
inverseKinematics | rigidBodyTree