inverseKinematics
и generalizedInverseKinematics
классы предоставляют вам доступ к алгоритмам инверсной кинематики (IK). Можно использовать эти алгоритмы, чтобы сгенерировать настройку робота, которая достигает заданных целей и ограничений для робота. Эта настройка робота является списком объединенных положений, которые являются в пределах положения модели робота и не нарушают ограничений, которые имеет робот.
MATLAB® поддерживает два алгоритма для достижения решения IK: алгоритм проекции BFGS и алгоритм Levenberg-Marquardt. Оба алгоритма являются итеративными, основанными на градиенте методами оптимизации, которые начинают с исходного предположения в решении и стремятся минимизировать определенную функцию стоимости. Если любой алгоритм сходится к настройке, где стоимость близко к нулю в заданном допуске, это нашло решение проблемы инверсной кинематики. Однако для некоторых комбинаций исходных предположений и желаемых положений исполнительного элемента конца, алгоритм может выйти, не находя идеальную настройку робота. Чтобы обработать это, алгоритм использует случайный механизм перезапуска. Если включено, случайный механизм перезапуска перезапускает итеративный поиск от случайной настройки робота каждый раз, когда тому поиску не удается найти настройку, которая достигает желаемого положения исполнительного элемента конца. Эти случайные перезапуски продолжаются, или до квалификации найдено решение IK, максимальное время протекло, или предел итерации достигнут.
Чтобы установить ваш алгоритм, задайте SolverAlgorithm
свойство как любой 'BFGSGradientProjection'
или 'LevenbergMarquardt'
.
Алгоритм проекции градиента Бройдена Флетчера Голдфарба Шэнно (BFGS) является приближенным методом ньютона, который использует градиенты функции стоимости от прошлых итераций, чтобы сгенерировать аппроксимированную информацию о второй производной. Алгоритм использует эту информацию о второй производной в определении шага, чтобы взять в текущей итерации. Метод проекции градиента используется, чтобы иметь дело с граничными пределами на функции стоимости, которую создают объединенные пределы модели робота. Вычисленное направление изменяется так, чтобы поисковое направление было всегда допустимо.
Этот метод является алгоритмом по умолчанию и более устойчив при нахождении решений, чем метод Levenberg-Marquardt. Более эффективно для настроек около объединенных пределов или когда исходное предположение не близко к решению. Если ваше исходное предположение близко к решению, и более быстрое решение необходимо, рассмотрите метод Levenberg-Marquardt.
Вариант алгоритма Levenberg-Marquardt (LM) используется в InverseKinematics
класс является ослабленным ошибкой методом наименьших квадратов. Ослабленный ошибкой фактор помогает препятствовать тому, чтобы алгоритм вышел из локального минимума. Алгоритм LM оптимизирован, чтобы сходиться намного быстрее, если исходное предположение близко к решению. Однако алгоритм не обрабатывает произвольные исходные предположения хорошо. Рассмотрите использование этого алгоритма для нахождения решений IK для серии положений вдоль желаемой траектории исполнительного элемента конца. Если настройка робота найдена для одного положения, та настройка часто является хорошим исходным предположением в решении IK для следующего положения в траектории. В этой ситуации алгоритм LM может дать к более быстрым результатам. В противном случае используйте Проекцию Градиента BFGS вместо этого.
Каждый алгоритм имеет определенные настраиваемые параметры, чтобы улучшить решения. Эти параметры заданы в SolverParameters
свойство объекта.
Параметры решателя для алгоритма BFGS имеют следующие поля:
MaxIterations
— Максимальное количество итераций позволено. Значение по умолчанию 1500.
MaxTime
— Максимальное количество секунд, которые алгоритм запускает перед таймаутом. Значение по умолчанию равняется 10.
GradientTolerance
— Порог на градиенте функции стоимости. Алгоритм останавливается, если величина градиента падает ниже этого порога. Должна быть положительная скалярная величина.
SolutionTolerance
— Порог на величине ошибки между положением исполнительного элемента конца, сгенерированным из решения и желаемым положением. Веса, заданные для каждого компонента положения в объекте, включены в это вычисление. Должна быть положительная скалярная величина.
EnforceJointLimits
— Индикатор, если объединенные пределы рассматриваются в вычислении решения. JointLimits
свойство модели робота в rigidBodyTree
. По умолчанию объединенные пределы осуществляются.
AllowRandomRestarts
— Индикатор, если случайные перезапуски позволены. Случайные перезапуски инициированы, когда алгоритмические подходы решение, которое не удовлетворяет ограничениям. Используется случайным образом сгенерированное исходное предположение. MaxIteration
и MaxTime
все еще повинуются. По умолчанию случайные перезапуски включены.
StepTolerance
— Минимальный размер шага позволен решателем. Меньшие размеры шага обычно означают, что решение близко к сходимости. Значение по умолчанию 10–14.
Параметры решателя для алгоритма LM имеют следующие дополнительные поля в дополнение к тому, чего требует метод Проекции Градиента BFGS:
ErrorChangeTolerance
— Порог на изменении в исполнительном элементе конца излагает ошибку между итерациями. Алгоритм возвращается, если изменения во всех элементах ошибки положения меньше, чем этот порог. Должна быть положительная скалярная величина.
DampingBias
— Постоянный термин для затухания. Алгоритму LM управляла функцией затухания эта константа, которая работает с функцией стоимости, чтобы управлять уровнем сходимости. Чтобы отключить затухание, используйте UseErrorDamping
параметр.
UseErrorDamping
— 1 (значение по умолчанию), Индикатор того, используется ли затухание. Установите этот параметр на false
отключить расхолаживание.
При использовании алгоритмов инверсной кинематики каждый запрос к объекту возвращает информацию о решении о том, как алгоритм выполнил. Информация о решении предоставляется как структура со следующими полями:
Iterations
— Количество итераций запущено алгоритмом.
NumRandomRestarts
— Количество случайных перезапусков, потому что алгоритм застрял в локальном минимуме.
PoseErrorNorm
— Величина ошибки положения для решения по сравнению с желаемым положением исполнительного элемента конца.
ExitFlag
— Код, который предоставляет больше подробную информацию на осуществлении алгоритма и что заставило его возвращаться. Для выходных флагов каждого типа алгоритма смотрите Выходные Флаги.
Status
— Вектор символов, описывающий, является ли решение в допуске ('success'
) или самое лучшее решение алгоритм могло найти ('best available'
).
В информации о решении выходные флаги предоставляют больше подробную информацию на осуществлении определенного алгоритма. Посмотрите на Status
свойство объекта узнать, был ли алгоритм успешен. Каждый выходной код флага имеет заданное описание.
'BFGSGradientProjection'
выходные флаги алгоритма:
1 — Локальный минимум найден.
2 — Максимальное количество итераций достигнуто.
3 — Алгоритм приведен к таймауту во время операции.
4 — Минимальный размер шага. Размер шага ниже
StepToleranceSize
поле SolverParameters
свойство.
5 — Никакой выходной флаг. Относящийся к
'LevenbergMarquardt'
алгоритм только.
6 — Поисковое недопустимое направление.
7 — Гессиан не положителен полуопределенный.
'LevenbergMarquardt'
выходные флаги алгоритма:
1 — Локальный минимум найден.
2 — Максимальное количество итераций достигнуто.
3 — Алгоритм приведен к таймауту во время операции.
4 — Минимальный размер шага. Размер шага ниже
StepToleranceSize
поле SolverParameters
свойство.
5 — Изменение по ошибке положения исполнительного элемента конца ниже
ErrorChangeTolerance
поле SolverParameters
свойство.
[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.
generalizedInverseKinematics
| inverseKinematics
| rigidBodyTree