С помощью 6-осевого робота, учитывая положение конечного эффектора и диапазон ориентаций, как найти оптимальные значения соединения

10

С учетом шарнирного манипулятора с шестью осями, удерживающего инструмент на своем конце-эффекторе, если у меня будет желаемое положение инструмента и ориентация инструмента, будет ровно 1 решение уравнения обратной кинематики для робота, который достигнет этой позиции.
(а точнее до 16 разных решений, в зависимости от диапазона соединений)

http://en.wikipedia.org/wiki/Robotic_arm

Но если робот держит что-то вроде ручки, и я хочу, чтобы робот отмечал определенную точку этой ручкой на цели, то мне все равно, как перо ориентировано, если оно перпендикулярно отмеченной поверхности.

Таким образом, уравнение обратной кинематики будет иметь бесконечно много решений.

Как я могу выбрать среди этих решений конфигурацию соединения, которая наиболее близка к текущей конфигурации: та, которая потребует наименьшего количества движения для достижения?
(или конфигурация соединения, которая является оптимальной согласно некоторому другому подобному критерию, такому, что все углы соединения наиболее удалены от своего максимума и минимума?)

HugoRune
источник

Ответы:

9

Во-первых, нам нужно определить оптимальный . Поскольку вы не говорите, что считаете оптимальным, большинство людей выбирают квадратное выражение. Например, предположим, что ваши текущие углы соединения задаются вектором . Мы можем рассмотреть сведение к минимуму движение , необходимое - с ошибкой х = & alpha ; - & alpha ; s т г т , можно определить функцию стоимости J = х Т Q х для некоторой матрицы Q . Обычно мы используем диагональную матрицу, но подойдет любая положительно определенная матрица.αx=ααstartJ=xTQxQ

В упрощенном примере с двумя углами соединения, если у соединения был более дешевый двигатель (возможно, ближе к конечному эффектору), мы могли бы иметь функцию стоимостиa

, т.е. движение сустава b в два раза дороже, чем сустав a .J=[xaxb][1002][xaxb]ba

Теперь кинематическое уравнение является матричной формулой, и в обозначениях Денавита-Хартенберга это может быть:

, где правая часть представляет положение ( х , у , г ) и ориентации (настоящее время устанавливаетсякачестве нулевого вращения), учитывая совместные углы.Ti=[100x010y001z0001](x,y,z)

Поскольку нам не важна ориентация, а только положение, мы можем обрезать первые 3 столбца последней матрицы преобразования и последнюю строку первой матрицы преобразования. Мы можем эквивалентно выразить эту формулу как:

[100001000010]Ti[0001]=[xyz]

Умножив левую часть, мы получим три уравнения. Если бы параметры были линейными, это было бы просто решить. Это тот случай, если все исполнительные механизмы являются линейными исполнительными механизмами. В этом случае проблема на самом деле является квадратичной программой . Мы можем переставить левую часть, чтобы получить уравнение:

, для некоторой матрицы K .КИксзнак равно[ИксYZ]К

Квадратичная программа - это проблема, которая может быть выражена в виде:

Минимизировать Jзнак равно12ИксTQИкс+сTИкс

Подлежит , E x = dAИксбЕИксзнак равноd

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

Нелинейную систему уравнений сложнее решить. Это называется нелинейным программированием , но это то, что у вас есть, если у вас есть вращающиеся соединения.

По сути, вместо матричных уравнений у вас есть нелинейные функции.

Минимизируйте условии h ( x ) = 0 , g ( x ) 0 (при необходимости переставьте, чтобы RHS ограничений был равен нулю)е(Икс)час(Икс)знак равно0г(Икс)0

Алгоритмы, используемые для решения этой проблемы, являются еще более сложными, но включают в себя внутренние точки, последовательное квадратичное программирование (SQP), активные наборы, отражающие алгоритмы доверительной области. Очевидно, что объяснение того, как работают эти алгоритмы, очень длинное, и я оставлю его за рамками этого ответа. Достаточно сказать, что количество контента по алгоритмам, используемым только для квадратичного программирования, само по себе может быть целым курсом.

Вам просто нужно найти библиотеку для решения проблемы, потребуется много времени, чтобы написать эффективную реализацию, и эффективные реализации могут обрабатывать 100 (или более) переменных одновременно. Например, если вы используете MATLAB, то есть документация по использованию функции fmincon из панели инструментов оптимизации.

Чтобы решить эту проблему онлайн, вам может потребоваться C ++ или другая нативная реализация, например, NLopt. Обратите внимание, что это может быть не то, что микроконтроллер может решить быстро, и многие библиотеки могут иметь другие зависимости, которые нелегко использовать на микроконтроллере (так как они предназначены для компьютера).


Если вы не беспокоитесь об эффективности и просто хотите что-то, что можете написать самостоятельно, тогда, если есть функция, которую вы можете вызвать для решения обратной кинематической задачи , вы можете просто сделать метод градиентного спуска. Например, произвольно выбирая случайную начальную ориентацию, решите обратную задачу, затем проверьте функцию стоимости. Затем вы можете использовать анализ возмущений, чтобы проверить, как вы должны изменить ориентацию. Например, если вы проверяете подобные ориентации вокруг вашей текущей ориентации (т.е. 8 точек в кубической сетке), вы можете получить приближение второго порядка того, как функция стоимости изменяется в каждом направлении.

Используя приближение второго порядка (известное как матрица Гессе, поскольку оно многомерно - 3-мерное для ориентации), вы можете найти пересечение нуля градиента функции стоимости (т. Е. Предсказанных локальных минимумов).

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

Обратите внимание, что это, вероятно, будет не столь эффективно, потому что сама обратная кинематическая задача должна решаться итеративно (так что вы постоянно используете функцию, решение которой требует времени). Кроме того, используемый код может быть меньше, чем полноценный алгоритм оптимизации, но он все еще довольно существенен и не является незначительным вложением времени.


Используя любой метод (формальное решение как нелинейную программу или итеративное использование функции для решения обратной задачи), решение может быть неоптимальным, если существует несколько локальных минимумов. В этом случае вы можете попытаться найти глобальные минимумы, используя различные подходы. Даже с решателем нелинейного программирования вы должны будете заполнить его начальными значениями (например, углами соединения). Вы можете многократно запускать любой метод с начальным числом, сгенерированным различными способами:

  • случайный перезапуск (генерируется случайным образом)
  • основанный на сетке

или другие пользовательские методы.

Однако учтите, что если существует много минимумов, нет хорошего способа гарантировать, что вы найдете глобальные минимумы. Вы можете только улучшить свои шансы.

ronalchn
источник
2

Поскольку вопрос касается промышленного робота, у нас, вероятно, нет модели динамики робота, поэтому я предполагаю, что мы ищем решения, которые оптимизируют только кинематический критерий.

У робота есть решение замкнутой формы для его обратной кинематики, но, к несчастью, конечный эффектор имеет дополнительную степень свободы вращения, что означает, что у робота, по существу, 7 степеней свободы. Но поскольку это всего лишь еще одна глубина , это не такая большая проблема, как можно подумать.

0,051360118

Если большую часть времени перо движется немного (например, при рисовании линии), другой прием для ускорения поиска заключается в использовании числового IK, например, псевдообратного метода:

Q1JΔИксΔИксзнак равноJΔQΔQQ2знак равноQ1+ΔQΔQ| |ΔQ| |

Q2

antonakos
источник
1

рZ

J-1Икс˙знак равноΘ˙знак равно[J1J2J3J4J5J6][Икс˙Y˙Z˙рИкс˙рY˙рZ˙]знак равно[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
JяяTчасJ-1Θ˙рZ˙
Θ˙знак равноΘ˙Икс˙...рY˙+Θ˙рZ˙Θ˙рZ˙знак равноJ6рZ˙
(Θ˙Икс˙...рY˙+Θ˙рZ˙)TD(Θ˙Икс˙...рY˙+Θ˙рZ˙)
DAзнак равноΘ˙Икс˙...рY˙Взнак равноΘ˙рZ˙*

ATDA+2ВTDA+ВTDВилиATDA+2рZ˙J6TDA+рZ˙2J6TDJ6

рZ˙рZ˙0

2J6TDA+2рZ˙J6TDJ6знак равно0рZ˙знак равно-J6TDAJ6TDJ6
joshkarges
источник