inverseKinematics

Создайте решение обратной кинематики

Описание

inverseKinematics Система object™ создает решатель кинематической инверсии (IK), чтобы вычислить объединенные настройки для желаемого положения исполнительного элемента конца на основе заданной модели дерева твердого тела. Создайте модель дерева твердого тела для своего робота с помощью rigidBodyTree класс. Эта модель задает все объединенные ограничения, которые осуществляет решатель. Если решение возможно, объединенным пределам, заданным в модели робота, выполняют.

Чтобы задать больше ограничений помимо положения исполнительного элемента конца, включая стремление ограничений, границы положения или цели ориентации, рассматривают использование generalizedInverseKinematics. Этот объект позволяет вам вычислять мультиограничение решения IK.

Для закрытой формы аналитические решения IK смотрите analyticalInverseKinematics.

Вычислить объединенные настройки для желаемого положения исполнительного элемента конца:

  1. Создайте inverseKinematics объект и набор его свойства.

  2. Вызовите объект с аргументами, как будто это была функция.

Чтобы узнать больше, как Системные объекты работают, смотрите то, Что Системные объекты?

Создание

Описание

пример

ik = inverseKinematics создает обратный кинематический решатель. Чтобы использовать решатель, задайте модель дерева твердого тела в RigidBodyTree свойство.

ik = inverseKinematics(Name,Value) создает обратный кинематический решатель с дополнительными опциями, заданными одним или несколькими Name,Value парные аргументы. Name имя свойства и Value соответствующее значение. Name должен появиться в одинарных кавычках (''). Можно задать несколько аргументов пары "имя-значение" в любом порядке как Name1,Value1,...,NameN,ValueN.

Свойства

развернуть все

Если в противном случае не обозначено, свойства являются ненастраиваемыми, что означает, что вы не можете изменить их значения после вызова объекта. Объекты блокируют, когда вы вызываете их, и release функция разблокировала их.

Если свойство является настраиваемым, можно изменить его значение в любое время.

Для получения дополнительной информации об изменении значений свойств смотрите Разработку системы в MATLAB Используя Системные объекты.

Модель дерева твердого тела в виде rigidBodyTree объект. Если вы изменяете свою модель дерева твердого тела, повторно присваиваете дерево твердого тела этому свойству. Например:

Создайте решатель IK и задайте дерево твердого тела.

ik = inverseKinematics('RigidBodyTree',rigidbodytree)

Измените модель дерева твердого тела.

addBody(rigidbodytree,rigidBody('body1'),'base')

Повторно присвойте дерево твердого тела решателю IK. Если решатель или step функция вызвана прежде, чем изменить модель дерева твердого тела, используйте release позволить свойству быть измененным.

ik.RigidBodyTree = rigidbodytree;

Алгоритм для решения инверсной кинематики в виде любого 'BFGSGradientProjection' или 'LevenbergMarquardt'. Для получения дополнительной информации каждого алгоритма, см. Алгоритмы Инверсной кинематики.

Параметры сопоставлены с заданным алгоритмом в виде структуры. Поля в структуре характерны для алгоритма. Смотрите Параметры Решателя.

Использование

Описание

пример

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess) находит объединенную настройку, которая достигает заданного положения исполнительного элемента конца. Задайте исходное предположение для настройки и ваших желаемых весов на допусках к шести компонентам pose. Информация о решении, связанная с осуществлением алгоритма, solInfo, возвращен с объединенным решением для настройки, configSol.

Входные параметры

развернуть все

Имя исполнительного элемента конца в виде вектора символов. Исполнительный элемент конца должен быть телом на rigidBodyTree объект задан в inverseKinematics Системный объект.

Положение исполнительного элемента конца в виде гомогенного преобразования 4 на 4. Это преобразование задает желаемое положение и ориентацию твердого тела, заданного в endeffector свойство.

Вес для допусков положения в виде вектора с шестью элементами. Первые три элемента соответствуют весам при ошибке в ориентации для желаемого положения. Последние три элемента соответствуют весам при ошибке в положении xyz для желаемого положения.

Исходное предположение настройки робота в виде массива структур или вектора. Используйте это исходное предположение, чтобы помочь вести решатель к желаемой настройке робота. Решение, как гарантируют, не будет близко к этому исходному предположению.

Чтобы использовать векторную форму, установите DataFormat свойство объекта присвоено в RigidBodyTree свойство к любому 'row' или 'column' .

Выходные аргументы

развернуть все

Настройка робота, возвращенная как массив структур. Массив структур содержит эти поля:

  • JointName — Вектор символов для имени соединения задан в RigidBodyTree модель робота

  • JointPosition — Положение соответствующего соединения

Эта объединенная настройка является вычисленным решением, которое достигает желаемого положения исполнительного элемента конца в допуске решения.

Примечание

Для шарнирных соединений, если объединенные пределы превышают область значений 2*pi, где объединенный перенос положения происходит, затем возвращенное объединенное положение является одним самым близким к нижней границе соединения.

Чтобы использовать векторную форму, установите DataFormat свойство объекта присвоено в RigidBodyTree свойство к любому 'row' или 'column' .

Информация о решении, возвращенная как структура. Информационная структура решения содержит эти поля:

  • Iterations — Количество итераций запущено алгоритмом.

  • NumRandomRestarts — Количество случайных перезапусков, потому что алгоритм застрял в локальном минимуме.

  • PoseErrorNorm — Величина ошибки положения для решения по сравнению с желаемым положением исполнительного элемента конца.

  • ExitFlag — Код, который предоставляет больше подробную информацию на осуществлении алгоритма и что заставило его возвращаться. Для выходных флагов каждого типа алгоритма смотрите Выходные Флаги.

  • Status — Вектор символов, описывающий, является ли решение в допуске ('success') или самое лучшее решение алгоритм могло найти ('best available').

Функции объекта

Чтобы использовать объектную функцию, задайте Системный объект как первый входной параметр. Например, чтобы выпустить системные ресурсы Системного объекта под названием obj, используйте этот синтаксис:

release(obj)

развернуть все

stepЗапустите алгоритм Системного объекта
releaseВысвободите средства и позвольте изменения в значениях свойств Системного объекта и введите характеристики
resetСбросьте внутренние состояния Системного объекта

Примеры

свернуть все

Сгенерируйте объединенные положения для модели робота, чтобы достигнуть желаемого положения исполнительного элемента конца. inverseKinematics системный объект использует обратные кинематические алгоритмы, чтобы решить для допустимых объединенных положений.

Загрузите роботов в качестве примера. puma1 роботом является rigidBodyTree модель манипулятора с шестью осями с шестью шарнирными соединениями.

load exampleRobots.mat
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)   
--------------------

Сгенерируйте случайную настройку. Получите преобразование от исполнительного элемента конца (L6) к основе для той случайной настройки. Используйте это преобразование в качестве целевого положения исполнительного элемента конца. Покажите эту настройку.

randConfig = puma1.randomConfiguration;
tform = getTransform(puma1,randConfig,'L6','base');

show(puma1,randConfig);

Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.

Создайте inverseKinematics объект для puma1 модель. Задайте веса для различных компонентов положения. Используйте более низкий вес величины для углов ориентации, чем компоненты положения. Используйте домашнюю настройку робота как исходное предположение.

ik = inverseKinematics('RigidBodyTree',puma1);
weights = [0.25 0.25 0.25 1 1 1];
initialguess = puma1.homeConfiguration;

Вычислите объединенные положения с помощью ik объект.

[configSoln,solnInfo] = ik('L6',tform,weights,initialguess);

Покажите недавно сгенерированную конфигурацию решения. Решение является немного отличающейся объединенной настройкой, которая достигает того же положения исполнительного элемента конца. Множественные вызовы ik объект может дать подобные или совсем другие объединенные настройки.

show(puma1,configSoln);

Figure contains an axes object. The axes object contains 13 objects of type patch, line. These objects represent base, L1, L2, L3, L4, L5, L6.

Вопросы совместимости

развернуть все

Изменение поведения в будущем релизе

Ссылки

[1] Badreddine, Хасан, Стефан Вэндьюалл и Йохан Мейерс. "Последовательное квадратичное программирование (SQP) для Оптимального управления в Прямой Числовой Симуляции Турбулентного течения". Журнал Вычислительной Физики. 256 (2014): 1–16. doi:10.1016/j.jcp.2013.08.044.

[2] Bertsekas, нелинейное программирование Димитри П. Белмонт, MA: научная Афина, 1999.

[3] Goldfarb, Дональд. "Расширение Переменного Метрического Метода Дэвидона к Максимизации Под Линейным Неравенством и Ограничениями равенства". SIAM Journal на Прикладной математике. Издание 17, № 4 (1969): 739–64. doi:10.1137/0117067.

[4] Nocedal, Хорхе и Стивен Райт. Числовая оптимизация. Нью-Йорк, Нью-Йорк: Спрингер, 2006.

[5] Sugihara, Tomomichi. "Беззаботная к разрешимости Инверсная кинематика Методом Levenberg–Marquardt". Транзакции IEEE на Издании 27 Робототехники, № 5 (2011): 984–91. doi:10.1109/tro.2011.2148230.

[6] Чжао, Jianmin и Норман Ай. Бэдлер. "Расположение Инверсной кинематики Используя Нелинейное программирование для Высоко Ясно сформулированных фигур". Транзакции ACM на Графическом Издании 13, № 4 (1994): 313–36. doi:10.1145/195826.195827.

Расширенные возможности

Введенный в R2017b