Модель дерева твердого тела является представлением структуры робота. Можно использовать его, чтобы представлять роботов, таких как манипуляторы или другие кинематические деревья. Используйте класс RigidBodyTree
, чтобы создать эти модели.
Дерево твердого тела составлено из твердых тел (RigidBody
), которые присоединяются через соединения (Joint
). Каждое твердое тело имеет соединение, которое задает, как то тело перемещается относительно его родительского элемента в дерево. Задайте преобразование от одного тела до следующего путем установки закрепленного преобразования на каждом соединении (setFixedTransform
).
Можно добавить, заменить или удалить тела из модели дерева твердого тела. Можно также заменить соединения для определенных тел. Объект RigidBodyTree
поддерживает отношения и обновляет свойства объектов RigidBody
, чтобы отразить это отношение. Можно также получить преобразования между различными каркасами кузова с помощью getTransform
.
Каждое дерево твердого тела имеет основу. Основа задает кадр мировой координаты и является первой точкой крепления для твердого тела. Основа не может быть изменена, за исключением свойства Name
. Можно сделать так путем изменения свойства BaseName
дерева твердого тела.
Твердое тело является основой модели дерева твердого тела и создается с помощью RigidBody
. Твердое тело, иногда названное ссылкой, представляет твердое тело, которое не может деформироваться. Расстояние между любыми двумя точками на одном твердом теле остается постоянным.
Когда добавлено к дереву твердого тела с несколькими телами, твердые тела имеют родительские или дочерние тела, сопоставленные с ними (свойства Parent
или Children
). Родительский элемент является телом, к которому присоединено это твердое тело, который может быть основой робота. Дочерние элементы являются всеми телами, присоединенными к этому телу ниже основы дерева твердого тела.
Каждое твердое тело имеет координатный кадр, сопоставленный с ними, и содержит объект Joint
.
Каждое твердое тело имеет одно соединение, которое задает движение того твердого тела относительно его родительского элемента. Это - точка крепления, которая соединяет два твердых тела в модели робота. Чтобы представлять одно физическое тело с несколькими соединениями или различными осями движения, используйте несколько объектов RigidBody
.
Поддержки класса Joint
зафиксированные, закрученные назад, и призматические соединения.
Эти соединения позволяют следующее движение, в зависимости от своего типа:
'fixed'
— Никакое движение. Тело твердо соединяется со своим родительским элементом.
'revolute'
— Вращательное движение только. Тело вращается вокруг этого соединения относительно его родительского элемента. Пределы положения задают минимальное и максимальное угловое положение в радианах вокруг оси движения.
'prismatic'
— Переводное движение только. Тело перемещается линейно относительно его родительского элемента вдоль оси движения.
Каждое соединение имеет ось движения, заданного свойством JointAxis
. Объединенная ось является 3-D единичным вектором, который или задает ось вращения (шарнирные соединения) или ось перевода (призматические соединения). Свойство HomePosition
задает исходное положение для того определенного соединения, которое является точкой в пределах положения. Используйте homeConfiguration
, чтобы возвратить домашнюю настройку для робота, который является набором всех исходных положений соединений в модели.
Соединения также имеют свойства, которые задают фиксированное преобразование между родительскими и дочерними кадрами координаты тела. Эти свойства могут только быть установлены с помощью thesetFixedTransform
метод. В зависимости от вашего метода введения параметров преобразования любой свойство JointToParentTransform
или ChildToJointTransform
установлено с помощью этого метода. Другое свойство установлено в единичную матрицу. Следующие изображения изображают то, что показывает каждое свойство.
JointToParentTransform
задает, где соединение дочернего тела находится в отношении к кадру вышестоящей инстанции. Когда JointToParentTransform
является единичной матрицей, вышестоящая инстанция и объединенные кадры совпадают.
ChildToJointTransform
задает, где соединение дочернего тела находится в отношении к дочернему каркасу кузова. Когда ChildToJointTransform
является единичной матрицей, дочернее тело и объединенные кадры совпадают.
Фактические объединенные положения не являются частью этого объекта Joint
. Модель робота является не сохраняющей состояние. Существует промежуточное преобразование между родительскими и дочерними объединенными кадрами, которое задает положение соединения вдоль оси движения. Это преобразование задано в настройке робота. Смотрите Настройки Робота.
После полностью сборки вашего робота и определения преобразований между различными телами, можно создать настройки робота. Настройка задает все объединенные положения робота их объединенными именами.
Используйте homeConfiguration
, чтобы получить свойство HomePosition
каждого соединения и создать домашнюю настройку.
Настройки робота даны как массив структур.
config = homeConfiguration(robot)
config = 1×6 struct array with fields: JointName JointPosition
config(1)
ans = struct with fields: JointName: 'jnt1' JointPosition: 0
Можно также сгенерировать случайную настройку, которая повинуется всем объединенным пределам с помощью randomConfiguration
.
Используйте настройки робота когда это необходимо, чтобы построить робота в фигуре, использующей show
. Кроме того, можно получить преобразование между двумя каркасами кузова с определенной настройкой с помощью getTransform
.
Чтобы получить настройку робота с заданным положением исполнительного элемента конца, используйте InverseKinematics
. Этот алгоритм решает для необходимых объединенных углов, чтобы достигнуть определенного положения для заданного твердого тела.
robotics.InverseKinematics
| robotics.RigidBodyTree