робототехника. InverseKinematics

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

Описание

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

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

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

  1. Создайте объект robotics.InverseKinematics и установите его свойства.

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

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

Создание

Синтаксис

ik = robotics.InverseKinematics
ik = robotics.InverseKinematics(Name,Value)

Описание

пример

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

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

Свойства

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

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

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

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

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

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

ik = robotics.InverseKinematics('RigidBodyTree',rigidbodytree)

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

addBody(rigidbodytree,robotics.RigidBody('body1'), 'base')

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

ik.RigidBodyTree = rigidbodytree;

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

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

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

Синтаксис

[configSol,solInfo] = ik(endeffector,pose,weights,initialguess)

Описание

пример

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Состояние Вектор символов, описывающий, является ли решение в допуске ('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);

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

ik = robotics.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] 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