Кинематика: прямая и обратная задачи


В робототехнике, есть две основные задачи кинематики:
прямая и обратная.

Рассмотрим эти задачи на стандартном примере манипулятора.

Прямая задача — это вычисление положения (X, Y, Z) рабочего органа манипулятора по его кинематической схеме и заданной ориентации (A1, A2… An) его звеньев (n — число степеней свободы манипулятора, A — углы поворота).

Обратная задача — это вычисление углов (A1, A2… An) по заданному положению (X, Y, Z) рабочего органа и опять же известной схеме его кинематики.

Т.о., решение прямой задачи говорит — где будет находиться рабочий орган манипулятора, при заданных углах его суставов, а обратная задача, наоборот, говорит: как нужно «вывернуться» манипулятору, чтобы его рабочий орган оказался в заданном положении.

Очевидно, что более распространённой и важной является именно обратная задача кинематики.
Но нужно иметь в виду, что эта задача редко может быть решена однозначно.
Дело в том, что хотя для углов (A1, A2, …, An) всегда существует ЕДИНСТВЕННОЕ положение (X, Y, Z) рабочего органа, но не факт, что для положения (X, Y, Z) отыщется такая же единственная комбинация углов (A1, A2, …, An).
Скорее всего, достичь заданного положения (X, Y, Z) возможно и при другой комбинации углов (A1′, A2′, …, An’).
При решении обратной задачи аналитически, эта неоднозначность проявляется в явном виде (например, через квадратные корни).

Рассмотрим пример прямой задачи кинематики.

пример прямой задачи кинематики
у нас есть манипулятор, способный работать только в одной плоскости и имеющий два сустава.
Первый сустав L1 закреплён на основании и повёрнут на угол Q1,
второй сустав L2, крепится к концу первого сустава и повёрнут относительно него на угол Q2.
Рабочий орган манипулятора находится на конце второго сустава.
Прямая задача кинематики состоит в нахождении координат рабочего органа (x, y) по заданным L1, L2, Q1, Q2.
L1 и L2 — это, соответственно, длины плеча и локтя манипулятора; определены конструкцией манипулятора.

Решение:
здесь, мы имеем две системы отсчёта — первая, связанная с точкой крепления плеча L1 — O, а вторая — с началом координат в точке крепления локтя — A.
Найдём смещение второй системы относительно первой (координаты точки A в системе отсчёта O):

XA = L1*cos(Q1)
YA = L1*sin(Q1)

Координаты (x, y) в системе отсчёта локтя:

x'' = L2*cos(Q2)
y'' = L2*sin(Q2)

По рисунку видно, что в системе O, локоть L2 повёрнут относительно плеча на Q1+Q2:

x' = L2*cos(Q1+Q2)
y' = L2*sin(Q1+Q2)

т.о.:

x = XA + x' = L1*cos(Q1) + L2*cos(Q1+Q2)
y = YA + y' = L1*sin(Q1) + L2*sin(Q1+Q2)
Теперь, рассмотрим пример обратной задачи кинематики.

тот же рисунок, но теперь нужно найти такие углы Q1 и Q2, которые позволят манипулятору с плечом L1 и локтем L2 поместить рабочий орган в заданную точку (x, y)
пример обратной задачи кинематики
Проведём прямую B, соединяющую начало координат O с заданной точкой (x, y).

B^2 = x^2 + y^2
x = B*cos(q1)
y = B*sin(q1)

q1 — угол между осью OX и прямой B
q2 — угол между прямой B и плечом L1

отсюда:

Q1 = q1 - q2
q1 = arccos( x/B ) или q1 = arctg( y/x )

, а q2 находим при помощи теоремы косинусов, которая говорит:
Для плоского треугольника со сторонами a,b,c и углом alpha, противолежащим стороне a, справедливо соотношение:

a^2 = b^2 + c^2 - 2*b*c*cos(alpha)

в нашем случае, по теореме косинусов:

L2^2 = B^2 + L1^2 - 2*B*L1*cos(q2)
=> q2 = arccos( L1^2 - L2^2 + B^2 / 2*B*L1 )
Q1 = q1 - q2 = arccos( x/B ) - arccos( L1^2 - L2^2 + B^2 / 2*B*L1 )

по той же теореме косинусов найдём угол Q2:
как видно по рисунку, угол Q2 равен 180 — угол OAx

В^2 = L1^2 + L2^2 - 2*L1*L2*cos(PI - Q2)
Q2 = PI - arccos( L1^2 + L2^2 - B^2 / 2*L1*L2  )

Очевидно, что руку можно расположить и по-другому:

формулы для Q1 и Q2 не изменятся, но изменятся знаки углов:

Q1 = q1 + q2

а Q2 нужно брать с противоположным знаком.

Откуда берётся изменение знака? Из вычисления квадратного корня, которое всегда даёт ответ со знаком плюс-минус.

Ссылки
http://ru.wikipedia.org/wiki/Прямая_кинематика
http://ru.wikipedia.org/wiki/Инверсная_кинематика
http://ru.wikipedia.org/wiki/Принципиальная_кинематическая_схема
http://ru.wikipedia.org/wiki/Теорема_косинусов
http://ru.wikipedia.org/wiki/Тригонометрические_формулы
Robot Forward Kinematics

Книги
К. Фу, Р. Гонсалес, К. Ли «Робототехника»


0 комментариев на «“Кинематика: прямая и обратная задачи”»

  1. Что-то я силился понять, как автор решает обратную задачу, но так и не смог. А между тем простейшее и правильное решение приведено в готовом виде по последней ссылке: http://www.learnaboutrobots.com/forwardKinematics.htm. И не надо чередить ничего с «проведем прямую». Длины известны, углы известны, взяли и посчитали.

    • В смысле, что на последнем рисунке углы q2 и q1 _ни к чему не относятся_. Они висят в воздухе. А по ссылке углы при вершинах в точках А и Б — это углы пропорциональные длительности управляющего импульса серв.

    • На странице «по последней ссылке» рассматривается прямая задача кинематики. Естественно, приведенные там формулы столь же просты, как и в первой части данного поста.
      А «проведение прямой» — это обратная задача кинематики. Как совершенно справедливо сказано -задача, чуть более сложная, чем та, где действительно, просто «взяли и посчитали».

    • Решение для трёхмерного пространства можно посмотреть в приведённой книге — К. Фу, Р. Гонсалес, К. Ли «Робототехника»:
      метод обратных преобразований (от обобщённой матрицы поворота и углы Эйлера),
      геометрический подход (по сути, схож с рассмотренным).

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение