Как решить проблему обратной кинематики?

20

Передняя кинематика руки робота может быть решена легко. Мы можем представить каждое соединение, используя матрицы преобразования Денавита – Хартенберга .

Например, если совместное представляет собой линейный привод, он может иметь матрицу преобразования:яTчас

где длина расширения определяется как d iTязнак равно[10000100001dя0001]dя

тогда как вращающаяся ссылка может быть:

, где α представляет собой угол, а L представляет собой длину канала.Tязнак равно[100L0созαя-грехαя00грехαясозαя00001]αL

Затем мы можем найти положение и ориентацию конечного эффектора, умножив все матрицы преобразования: .ΠTя

Вопрос в том, как мы решаем обратную задачу?

Математически, для желаемого конечного эффектора позиции , найти параметры d I , α я такая , что П Т я = M . Какие существуют методы для решения этого уравнения?MdяαяΠTязнак равноM

ronalchn
источник

Ответы:

11

В тот день, когда я учился, придумывая это, я использовал простое отслеживание градиента для решения проблемы IK.

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

Как правило, это известно как слежение за градиентом или за холмом. Представьте себе руку робота с двумя степенями свободы:

И.К.

Вращающееся соединение A чуть-чуть перемещает конечную точку в направлении a . Вращающееся соединение B чуть-чуть перемещает конечную точку в направлении b . Оба из них приближают нас к цели примерно на одинаковую величину, поэтому мы должны вращать оба сустава примерно с одинаковой скоростью.

Если бы мы построили график зависимости расстояния до цели от углов соединения, это выглядело бы так:

И.К.

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

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

Плюсы:

  • Это концептуально просто, так здорово, если вы просто изучите это.
  • Это легко реализовать, даже если вид матриц преобразования Денавита – Хартенберга пугает вас.
  • Это очень общий подход, позволяющий вам использовать все виды соединений: вращающиеся, линейные и другие, если вы можете оценить, как они вызывают перемещение конечной точки.
  • Хорошо справляется даже с нулевым или бесконечным количеством решений.

Минусы:

  • Это медленно, занимает много итераций, чтобы найти решение. Тем не менее, хорошо, если вы можете просто заставить реальную руку следить за ходом алгоритма, как он рассчитан.
  • Это может застрять в локальных минимумах. IE может не найти наилучшего возможного решения, если найдет достаточно хорошее.

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

Rocketmagnet
источник
3

Существует ряд решений этой проблемы, которые сосредоточены вокруг матрицы Якоби. Это слайд-шоу охватывает методы якобиана, а также упоминает метод циклического координатного спуска, с которым я не знаком.

Существует множество ресурсов на эту тему - если вы спросите у Google "обратная кинематика якобиана" .

Также ознакомьтесь с главой 5.3 лекционных заметок открытого курса M IT по вводной робототехнике .

Дэвид Эрнандес
источник
1

Есть два широких подхода:

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

Используя мой Robotics Toolbox для MATLAB, я создаю модель хорошо известного 6-осевого робота, используя параметры Денавита-Хартенберга

>> mdl_puma560
>> p560

p560 = 

Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            
 - viscous friction; params of 8/95;                             
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|     1.5708|          0|
|  2|         q2|          0|     0.4318|          0|          0|
|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|
|  4|         q4|     0.4318|          0|     1.5708|          0|
|  5|         q5|          0|          0|    -1.5708|          0|
|  6|         q6|          0|          0|          0|          0|
+---+-----------+-----------+-----------+-----------+-----------+

затем выберите случайную координату соединения

>> q = rand(1,6)
q =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

затем рассчитать кинематику вперед

>> T = p560.fkine(q)
T = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

Теперь мы можем вычислить обратную кинематику, используя опубликованное аналитическое решение для робота с 6 суставами и сферическим запястьем

>> p560.ikine6s(T)
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

и вуаля, у нас есть оригинальные совместные координаты.

Численное решение

>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 
> In SerialLink/ikine (line 244) 
Warning: failed to converge: try a different initial value of joint coordinates 
> In SerialLink/ikine (line 273) 

ans =

     []

не удалось, и это распространенная проблема, поскольку обычно им требуется хорошее начальное решение. Давай попробуем

>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

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

>> p560.fkine(ans)
ans = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

и проверка того, что это то же самое, что и преобразование, с которого мы начали (что это такое).

Другие источники:

Питер Корке
источник