Преобразование ориентации между представлениями



ROBOT CONTROL

Управление силой при ориентации в пространстве задач

https://studywolf.wordpress.com/2018/12/03/force-control-of-task-space-orientation/

 

Итак, Вы хотите использовать управление силой, чтобы контролировать ориентацию Вашего захвата-наконечника (end-effector)? Благородное дело. Мне бы тоже хотелось управлять ориентацией захвата. Хотя путешествие и было долгим и трудным, код получился короткий и быстрый в реализации. Весь код для воспроизведения результатов, показанных здесь, находится на моём github и в репозитории ABR Control.

Введение

Существует множество статей, посвящённых теме управления ориентацией, поэтому здесь будут ссылки на полезные ресурсы.

При описании ориентации захвата используются 3 основных метода: углы Эйлера, матрицы вращения и кватернионы (quaternions).

· Углы Эйлера α, β и γ обозначают крен, тангаж и рыскание соответственно.

· Матрицы вращения задают 3 ортогональных единичных вектора, их вычисление подробно описывается в посте по прямым преобразованиям.

· Кватернионы – это 4х-мерные векторы, используемые для описания 3х-мерной ориентации, которые обеспечивают стабильность и требуют меньше памяти и вычислений, но сложнее для понимания.

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

Хотя Вам не нужно полное понимание кватернионов, чтобы использовать код управления ориентацией, оно определенно полезно, если что-то пойдёт не так. Если Вы хотите узнать о кватернионах или освежить о них информацию, или даже если Вы этого не хотите, но ещё не видели следующий ресурс, Вам обязательно стоит посмотреть интерактивные видео от Grant Sanderson и Ben Eater. Они проделали невероятную работу по разработке модулей, чтобы дать представление о том, как работают кватернионы, и я обязан порекомендовать их работу. Существует также неинтерактивная видео версия, которая охватывает тот же материал.

В литературе по управлению угловая скорость и ускорение обозначаются ω и . Важно помнить, что ω обозначает скорость, а не позицию.

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

Как сгенерировать угловые силы, определённые в пространстве задач?

Итак, если помните давнюю статью, у Якобиана в пространстве задач есть 6 строк:

В управлении положением, когда нас интересует только положение захвата (x,y,z) руки, измерения угловой скорости убираются из Якобиана, тогда эта матрица становится  размера = 3*n_joints, а не размера = 6*n_joints. Таким образом, ориентация захвата вообще не контролируется. Не нужно было беспокоиться или знать что-либо о форме угловых скоростей.

Теперь, когда есть заинтересованность в управлении ориентацией, нужно их обрабатывать (спасибо Yitao Ding за разъяснение этого момента). Якобиан для ориентации описывает скорости вращения вокруг каждой оси (x,y,z) по отношению к скоростям сочленений. Скорости вращения вокруг каждой оси «происходят» одновременно. Важно отметить, что это – не то же самое, что углы Эйлера, которые применяются последовательно.

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

Преобразование ориентации между представлениями

Можно быстро получить текущую ориентацию захвата в форме матрицы вращения, используя матрицы преобразования для робота. Чтобы получить целевую ориентацию захвата в приведенных ниже примерах, будем использовать удалённый API VREP, который возвращает углы Эйлера.

Важно отметить, что углы Эйлера могут быть в 12 различных форматах. Нужно знать, с какими углами Эйлера работаете (например, вращение вокруг X, затем Y, затем Z, или вращение вокруг X, затем Y, затем X, и т.д.), чтобы всё действовало должным образом. Страница документации API VREP сообщает, что при обращении в ней углы вернутся, соответствующие поворотам x, y, затем z.

Оси вращения могут быть статическими (собственные вращения) или поворачивающимися (внутренние вращения).

Примечание: в документации VREP говорится, что они вращаются вокруг абсолютной системы отсчёта, которую я считаю «статической», но я считаю, что это опечатка на их странице. Если вычислить ориентацию захвата робота UR5, используя матрицы преобразования, а затем преобразовать их в углы Эйлера с осями = 'rxyz', можно получить соответствие с отображаемыми углами Эйлера, но не с осями = 'sxyz'.

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

Генерация ошибки ориентации

Были реализованы 4 различных метода для расчёта ошибки ориентации (Caccavale et al, 1998), (Yuan, 1988), (Nakinishi et al, 2008) и метод со StackOverflow. Опишем каждый из них ниже, а затем посмотрим на результаты их применения в VREP.

StackOverflow

Даны 2 кватерниона ориентации  и , вычислим кватернион вращения  из  в :

Чтобы изолировать  слева, умножим его на обратный к . Все кватернионы ориентации имеют единичную длину, а обратный для единичных кватернионов совпадает с сопряжённым. Для вычисления сопряжённого кватерниона, обозначенного здесь , вычтем либо скалярную, либо векторную часть кватерниона, но не обе их сразу.

Здорово! Теперь известно, как рассчитать поворот, необходимый для перехода от текущей ориентации к целевой ориентации. Далее нужно получить из R набор сил целевых углов Эйлера. В новом методе вычисления ориентации цифровой системы управления с использованием кватернионовA new method for performing digital control system attitude computations using quaternions») (Ickes, 1968) говорится: «в целях контроля последние 3 элемента кватерниона определяют ошибки вращения крена, тангажа и рыскания...». Таким образом, можно просто взять векторную часть кватерниона и использовать её в качестве желаемой силы углов Эйлера.

Примечание: столкнёмся с проблемами, когда пересечём угол π, тогда рука «пройдёт длинный путь». Учтём это, используя q_r[1:]*np.sign(q_r[0]), что гарантирует, что вращение всегда будет обеспечено по траектории в направлении целевого угла <180°. Причина в том, что существует несколько различных кватернионов, которые могут представлять одну и ту же ориентацию.

Следующие 2 анимации показывают, как рука из одной ориентации на первой проходит длинный путь, а на второй – короткий, действие на второй обеспечено умножением на знак скалярной компоненты кватерниона R как указано выше.

https://studywolf.files.wordpress.com/2018/11/wrongway14.gif

https://studywolf.files.wordpress.com/2018/11/wrongway25.gif

Кватернионная обратная связь

По статье «Управление с разрешённым-ускорением роботов-манипуляторов: критический обзор с экспериментами» («Resolved-acceleration control of robot manipulators: A critical review with experiments») (Caccavale et al, 1998).

В разделе IV уравнения (34) этой статьи ошибка ориентации рассчитывается

где  – матрица вращения захвата робота, а  – векторная часть единичного кватерниона, которую можно извлечь из матрицы вращения

Для реализации чего достаточно просто использовать модуль transforms.py для обработки преобразований представления:

Обратная связь по углу/оси

По статье «Управление с разрешённым-ускорением роботов-манипуляторов: критический обзор с экспериментами» («Resolved-acceleration control of robot manipulators: A critical review with experiments») (Caccavale et al, 1998).

В разделе V статьи представлен алгоритм обратной связи по углу/оси, он преодолевает проблемы особенностей, от которых страдают классические методы углов Эйлера. Алгоритм определяет ошибку ориентации в уравнении (45):

где  и  являются скалярной и векторной частью кватернионного представления

где  – матрица вращения, представляющая желаемую ориентацию, а  – матрица вращения, представляющая ориентацию захвата робота. Код реализации выглядит следующим образом:

Немного поиграв с этим методом, кажется, что он работает также. Авторы отмечают в обсуждении, что этот метод может «страдать при больших ошибках ориентации», но плохое поведение во VREP выявить не получилось. Упоминается другой недостаток: больше вычислительная нагрузка, чем у кватернионной обратной связи.

 


Дата добавления: 2019-11-16; просмотров: 86; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!