inverseKinematics

Создайте обратный кинематический решатель

Описание

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

Чтобы задать больше ограничений помимо положения end-effector, включая ограничения прицеливания, ограничения положения или цели ориентации, рассмотрите использование 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) находит строение соединения, которая достигает заданного положения end-effector. Задайте начальное предположение для строения и желаемых весов для допусков для шести компонентов pose. Информация о решении, относящаяся к выполнению алгоритма, solInfo, возвращается с решением строения соединения, configSol.

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

расширить все

Имя End-effector, заданное как вектор символов. Конечный эффектор должен быть телом на rigidBodyTree объект, заданный в inverseKinematics Системный объект.

Положение end-effector, заданное как однородное преобразование 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Сброс внутренних состояний Системного объекта

Примеры

свернуть все

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

Загрузите пример роботов. The 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);

Создайте 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);

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

расширить все

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

Ссылки

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

[2] Bertsekas, Dimitri P. Нелинейное программирование. Belmont, MA: Athena Scientific, 1999.

[3] Голдфарб, Дональд. Расширение метода переменной метрики Дэвидона до максимизации при линейном неравенстве и ограничениях равенства. SIAM Journal по прикладной математике. Том 17, № 4 (1969): 739-64. doi: 10.1137/0117067.

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

[5] Сугихара, Томомичи. «Разрешимость-неконтролируемая обратная кинематика методом Левенберга-Марквардта». Транзакции IEEE по робототехнике Том 27, № 5 (2011): 984-91. doi: 10.1109/tro.2011.2148230.

[6] Чжао, Цзяньминь и Норман И. Бадлер. «Позиционирование обратной кинематики с использованием нелинейного программирования для высоко сочлененных фигур». ACM Транзакции на графике Том 13, № 4 (1994): 313-36. doi: 10,1145/ 195826,195827.

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

.
Введенный в R2016b