Интерполяция траекторий при имитации



ROBOT CONTROL

Примитивы динамического движения: управление траекториями захвата

https://studywolf.wordpress.com/2013/12/05/dynamic-movement-primitives-part-2-controlling-a-system-and-comparison-with-direct-trajectory-control/

 

Фраймворк примитивов динамического движения (DMP) разработан для управления траекторией. В предыдущих постах обсуждались готовые симуляций робототехнических рук, на которые можно было бы набросить контроллер траекторий, здесь мы это сделаем. Система – это модель с тремя звеньями, управляемая контроллером в операционном пространстве (OSC), он преобразует усилия на захват робота в крутящие моменты сочленений. DMP здесь будут управлять ( x , y ) траекторией захвата руки, а OSC будет заботиться о том, чтобы превратить нужные силы руки в крутящие моменты, что будут приложены к руке.

Весь код генерации анимаций этой статьи можно найти на моём github (запустить его можно с помощью вариантов команды python run . py arm 3 dmp write).

Управление трёхзвенной рукой робота с помощью DMP

Настройку трёхзвенной руки робота и OSC-контроллера вместе в этой заметке будем называть «агрегат». Хотим передать некоторый управляющий силой сигнал ( x , y ) агрегату, и агрегат его выполнит. Кроме того, получим сигнал обратной связи ( x , y ) о положении захвата руки. В то же время есть система DMP, которая делает своё дело, перемещает руку вдоль желаемой траектории в ( x , y )-пространстве. Необходимо связать эти 2 системы вместе.

Чтобы легко сделать это, сгенерируем управляющий сигнал для агрегата с помощью DMP, измерим разность между состоянием DMP и состоянием агрегата, и используем её для перевода агрегата в состояние, заданное DMP. Формально:

где  – состояние системы, заданное DMP, y – текущее состояние агрегата, а также
 – усиливающий коэффициент ошибки положения.

Идём дальше, продвинем систему DMP вперёд, и проследим за тем, чтобы значения усиливания в управляющем сигнале были достаточно большими, чтобы агрегат следовал бы траектории DMP. Всё, теперь просто запустите систему DMP до конца траектории, а затем остановите симуляцию.

Для демонстрации управления DMP, настроили систему следовать траекториями чисел, аналогично для руки SPAUN. Как видите, комбинация DMP и управления в операционном пространстве гораздо более эффективна, чем моя предыдущая реализация.

https://studywolf.files.wordpress.com/2013/12/animation.gif

Рис .1.

Добавление обратной связи в систему

Одна из проблем при реализации описанного выше управления заключается в том, что нужно быть осторожным в отношении скорости изменения траектории DMP, потому что, хотя система DMP не ограничена физической динамикой, а агрегат ограничен. В зависимости от расстояния перемещения траектории DMP движение может иметь скорость 1 м/с или 1 см/с. Выше можно видеть, что рука не полностью вытягивает желаемые траектории в местах, где система DMP перемещалась слишком быстро внутрь и наружу, в острых углах. Единственный способ исправить данную проблему без обратной связи – заставить систему DMP двигатьсямедленнеена всей траектории.

Чтобы заставить руку: «двигаться так быстро, как она может, пока её состояние находится в пределах некоторого порогового расстояния от DMP», нужна обратная связь.

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

Всё, что делает этот множитель уравнения – замедляет каноническую систему, когда возникает необходимость, можно рассматривать его, как масштабирование шага по времени. Кроме того, чувствительность можно тоже регулировать коэффициентом  разницы между состоянием руки и DMP.

Можно получить представление о том, как это влияет на систему, посмотрев на динамику канонической системы, в середине прогона вводится коэффициент ошибки положения:

Рис.2.

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

Давайте посмотрим на пример, сравнивающий выполнение вместе с этим элементом обратной связи и без него. Вот система, рисующая число 3 без какой-либо обратной связи:

https://studywolf.files.wordpress.com/2013/12/3nofb.gif

Рис.3.

 

А вот система, рисующая число 3 с включенной обратной связью:

https://studywolf.files.wordpress.com/2013/12/3wfb.gif

Рис.4.

 

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

 

Интерполяция траекторий при имитации

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

Выбранный подход заключается в следующем: каноническая система запускается всегда в течение 1 секунды, и всякий раз, когда траектория, которую следует имитировать, пройдена, ось х траектории масштабируется в диапазон между 0 и 1. Затем изменённая траектория передаётся в интерполятор, затем полученная функция используется для генерации множества красиво разнесённых точек выборки , чтобы имитатор DMP её сопоставил.

Вот этот код:


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

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






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