inverseKinematics и generalizedInverseKinematics классы дают доступ к алгоритмам обратной кинематики (ИК). Эти алгоритмы можно использовать для создания конфигурации робота, достигающей заданных целей и ограничений для робота. Эта конфигурация робота представляет собой список положений соединения, которые находятся в пределах положения модели робота и не нарушают никаких ограничений, имеющихся у робота.
MATLAB ® поддерживает два алгоритма для достижения решения IK: алгоритм проекции BFGS и алгоритм Левенберга-Марквардта. Оба алгоритма являются итеративными методами оптимизации на основе градиента, которые начинаются с начального предположения в решении и стремятся минимизировать конкретную функцию затрат. Если любой алгоритм сходится к конфигурации, где стоимость близка к нулю в пределах заданного допуска, он нашел решение задачи обратной кинематики. Однако для некоторых комбинаций начальных догадок и желаемых концевых эффекторных поз алгоритм может выйти без нахождения идеальной конфигурации робота. Чтобы справиться с этим, алгоритм использует механизм случайного перезапуска. Если включено, механизм случайного перезапуска перезапускает итеративный поиск из конфигурации случайного робота всякий раз, когда этот поиск не может найти конфигурацию, которая достигает желаемой конечной эффекторной позы. Эти случайные перезапуски продолжаются до тех пор, пока не будет найдено удовлетворяющее требованиям решение IK, не истечет максимальное время или не будет достигнут предел итерации.
Чтобы задать алгоритм, укажите SolverAlgorithm свойство как 'BFGSGradientProjection' или 'LevenbergMarquardt'.
Алгоритм градиентной проекции Бройдена-Флетчера-Гольдфарба-Шанно (BFGS) - квазиньютоновский метод, использующий градиенты функции затрат из прошлых итераций для генерации приближенной информации второй производной. Алгоритм использует эту информацию второй производной при определении шага, выполняемого в текущей итерации. Метод градиентной проекции используется для обработки граничных пределов функции затрат, которые создаются пределами соединения модели робота. Вычисленное направление изменяется таким образом, что направление поиска всегда является допустимым.
Этот метод является алгоритмом по умолчанию и более надежен при поиске решений, чем метод Левенберга-Марквардта. Это более эффективно для конфигураций, близких к пределам соединения, или когда исходная догадка не близка к решению. Если ваше первоначальное предположение близко к решению и требуется более быстрое решение, рассмотрим метод Левенберга-Марквардта.
Вариант алгоритма Левенберга-Марквардта (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] Бадреддин, Хасан, Стефан Вандевалле и Йохан Мейерс. «Последовательное квадратичное программирование (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.
generalizedInverseKinematics | inverseKinematics | rigidBodyTree