exponenta event banner

inverseKinematics

Создание обратного кинематического решателя

Описание

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

Чтобы задать дополнительные ограничения, помимо конечной эффекторной позы, включая ограничения нацеливания, границы положения или цели ориентации, рекомендуется использовать generalizedInverseKinematics. Этот объект позволяет вычислять многоограниченные решения 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').

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

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

release(obj)

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

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

Примеры

свернуть все

Создание совместных положений для модели робота для достижения желаемого конечного положения эффектора. 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);

Создание 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] Берцекас, Дмитрий П. Нелинейное программирование. Belmont, MA: Athena Scientific, 1999.

[3] Голдфарб, Дональд. «Расширение метода переменной метрики Давидона до максимизации при линейном неравенстве и ограничениях равенства». Журнал СИАМ по прикладной математике. т. 17, № 4 (1969): 739-64. дои: 10.1137/0117067.

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

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

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

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

.
Представлен в R2016b