PID управление с TurtleSim

Репозиторий проекта на GitLab

Аннотация

Move Turtle — это простой скрипт на Python для ROS, который перемещает черепашку в TurtleSim ROS к заданным координатам (точкам). Этот проект начался как проект для класса CSCI473 в Колорадском университете в Минесоте (CSOM) и позже стал проектом, который помог мне понять, как можно создавать замкнутые системы, знания из которого были использованы для моей работы в Лаборатории человекоцентрированной робототехники (HCR) CSOM.

Контекст

Для справки, ROS означает Robot Operating Systems. ROS — это программное обеспечение с открытым исходным кодом для робототехники, обычно используемое вместе с операционной системой Ubuntu, которое помогает лучше управлять программными компонентами/кластерами роботизированной системы. Вы можете узнать больше о том, как использовать ROS, на официальном вики. Код, который вы пишете в ROS, написан на C++ или Python.

TurtleSim — это простой 2D-симулятор роботов, используемый как введение в ROS и пакеты ROS для новых пользователей ROS. Все, что делает TurtleSim, это открывает простой 2D-дисплей с черепашкой. Эта черепашка действует как “робот”, и вы можете отправлять сообщения этому “роботу”, чтобы перемещать и/или поворачивать его. При движении TurtleSim генерирует некоторую случайную ошибку, чтобы смоделировать физику реального мира простым способом.

Зная, что такое ROS и TurtleSim, почему я их использовал? В весеннем семестре 2020 года я проходил курс под названием “Человекоцентрированная робототехника” в Колорадском университете в Минесоте в рамках своей учебной нагрузки по компьютерным наукам. Курс преподавал доктор Хао Чжан. Курс состоял из трех проектов, и первый проект заключался в настройке ROS, изучении того, как использовать ROS, и реализации либо открытой, либо замкнутой алгоритмической системы, которая заставила бы черепашку в TurtleSim нарисовать букву М. Оригинальное описание проекта можно просмотреть ЗДЕСЬ.

Когда я проходил курс, я завершил этот проект, реализовав открытую алгоритмическую систему. Это решение работало, но было не очень хорошим и нарисовало букву А, которая была “достаточно хорошей”, но далеко не “отличной”. После того как я сдал проект примерно в середине февраля 2020 года, я забыл о нем до года спустя, в феврале 2021 года.

Задача

В феврале 2021 года меня наняли в качестве научного сотрудника в Лабораторию человекоцентрированной робототехники (HCR) в Колорадском университете в Минесоте, где я работал под руководством доктора Хао Чжана. Цель лаборатории — проводить исследования в области “долговременной совместной автономии, с целью позволить роботам работать и адаптироваться на протяжении длительного времени”. На 1 сентября 2022 года лаборатория переехала из Колорадского университета в Минесоту в Университет Массачусетса в Амхерсте. Но когда я работал там, они все еще находились в Колорадо.

В лаборатории HCR мне было поручено работать над проектом Triton. Проект Triton состоял из множества, десятков, роботов, называемых Тритонами. Тритоны были треугольными омни-колесными наземными роботами, которые выглядели так:

Вместе с Тритонами восемь ИК-камер от OptiTrack были расположены в “октогональном порядке” на несколько футов выше уровня земли. Используя эти камеры, программное обеспечение Motive от Optitrack, ПК с Windows 10 и ROS; создается пространство размером 2 метра на 2 метра на 2 метра (x, y, z), где можно определить точное реальное положение объектов с маркировочными метками.

Моя первая задача в проекте Triton заключалась в создании скриптов, которые заставляли бы робота Тритон двигаться к конкретному реальному положению. В то время я не был уверен, как это достичь, но я вспомнил о первом проекте из CSCI473, где мне была представлена идея замкнутой системы, поэтому я начал действительно исследовать замкнутые системы и, в свою очередь, системы обратной связи.

Исследование

Во время моего исследования я обнаружил это замечательное видео от AerospaceControlsLab:

В этом видео была показана и объяснена идея PID-системы. PID-система — это замкнутая, управляющая система, которая производит определенные выходные данные на основе данных из реального мира. В простых терминах, это система обратной связи, которая корректирует свой выход на основе разницы между желаемым значением и измеренным значением. Вот формула для PID-контроллера:

$$ u(t) = K_p e(t) + K_i \int e(t) dt + K_d \frac{de(t)}{dt} $$

  • $u(t)$ — это управляющий сигнал.
  • $K_p$, $K_i$, $K_d$ — это пропорциональные, интегральные и дифференциальные коэффициенты соответственно.
  • $e(t)$ — это сигнал ошибки (разница между желаемым и фактическим выходом).
  • $\int e(t) dt$ — это интеграл ошибки во времени.
  • $\frac{de(t)}{dt}$ — это производная ошибки.

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

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

Поскольку Тритон является наземным роботом, мне нужно беспокоиться только о координатах X и Y. Зная это, мне нужно было определить, какие желаемые и измеренные значения следует измерять и обрабатывать в P-контроллере. В своем исследовании я нашел этот замечательный пост на вики ROS под названием Go to Goal, где они сосредоточились на следующих ошибках:

  • Ошибка расстояния: разница в расстоянии между желаемым местоположением (X, Y) и текущим местоположением (X, Y).
  • Ошибка угла: разница между желаемой ориентацией и текущей ориентацией.

Предложенное решение

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

Тестирование в симуляции

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

После обновления старого кода с использованием ROS Melodic на использование ROS Noetic и с некоторыми итеративными доработками, я смог реализовать предложенное решение в TurtleSim. Демонстрации его функциональности, с некоторыми интересными путями целевых координат, можно найти в конце этого блога. Код для всего этого можно просмотреть ЗДЕСЬ.

Заключение

В заключение, хотя этот проект, черепашка TurtleSim эффективно перемещается к заданным координатам, используя замкнутую систему, значительно превосходя мою первоначальную открытую систему 2020 года. Успешно протестировав, я внедрил это решение с роботами Тритон. Но шум реального мира привел к неожиданным проблемам, требующим недель отладки и тестирования в реальном мире. После этих недель я в конечном итоге заставил Тритон достичь конкретных реальных координат, используя решение, которое я протестировал в TurtleSim. Вот демонстрация Тритона, движущегося к конкретным реальным координатам, используя метод, протестированный в TurtleSim:

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

Основная цель этого блога заключалась в том, чтобы описать создание замкнутой системы, позволяющей черепашке в TurtleSim, а затем и роботам Тритон, точно перемещаться к заданным целевым позициям (X, Y). Я считаю, что эта цель была достигнута, но это могло вызвать некоторый интерес к моей работе в лаборатории HCR. Зная это, у меня есть планы на создание большего количества блогов о моем опыте работы в лаборатории HCR…

Демонстрации движущейся черепашки (TurtleSim)

Это видео содержит следующие демонстрации:

  • Cayley Nodal: Простой дизайн Cayley Nodal
  • Круги: Дизайн, похожий на паутину
  • Внутренние круги: Дизайн “круги внутри кругов”
  • М: Очень простой дизайн буквы М