Управление реальным роботом c обратной связью в ROS (часть 5): различия между версиями

Материал из RoboWiki
Перейти к навигации Перейти к поиску
Строка 66: Строка 66:
 
[[Файл:Eqa1.png|252px|thumb|center|]]
 
[[Файл:Eqa1.png|252px|thumb|center|]]
 
Уравнение может быть дополнительно упрощено для получения угловой скорости колеса. Основная цель узла gopigo_state_updater состоит в публикации этих угловых скоростей вращения колес.
 
Уравнение может быть дополнительно упрощено для получения угловой скорости колеса. Основная цель узла gopigo_state_updater состоит в публикации этих угловых скоростей вращения колес.
 +
 +
2. '''Контроллер GoPiGo''' с ПИД-регулятором

Версия 16:29, 17 июля 2019

В этом разделе мы сосредоточимся на использовании данных, поступающих с колесных энкодеров, с двумя целями:

1. Создание замкнутой системы управления с использованием ПИД-регулятора

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

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

2. Одометрия с точным расчетом

Одометрия ценна тем, что она:

1) является необходимой информацией для использования стека навигации ROS в будущем

2) позволяет нам видеть траекторию робота

Мы объединим показания энкодеров с обоих колес (точный расчет), чтобы оценить положение робота во времени (одометрия).

1. Обзор: Управление роботом c обратной связью

Цели: 1. Использование данных колесного энкодера для управления с обратной связью и ПИД-регулятором, и для оценки одометрии робота

2. Обучение использованию обратной связи с данными датчиков для усовершенствования управления роботом и для оценки состояния

План:

  1. Прочитать данные с колесных энкодеров
  2. Ввести ПИД-регулирование в управление на обоих колесах
  3. Организовать точный расчет для оценки одометрии робота

Код репозитория (хранилища):

git clone -b closedloop https://github.com/richardw05/gopigo_ws.git

Видео-мануал

2. Архитектура

И опять, у нас есть хост-машина и робот, подключенный через WiFi. Как показано ниже, мы добавляем два узла ROS. gopigo_state_updater запускается на роботе и преобразует данные энкодера колеса в оценки угловой скорости колеса. Мы расширяем gopigo_controller, чтобы использовать эти показания с энкодера для управления с помощью PID. diffdrive_odom запускается на хост-машине и использует оценки энкодера для проведения точного расчета одометрии.

Показания энкодера колеса преобразуются в угловые скорости вращения колеса, которые используются как для ПИД-регулирования, так и для точных расчетов одометрии.

Ниже показаны сообщения ROS, передаваемые между нодами ROS.

Поток сообщений ROS от колесных энкодеров до вычисления одометрии.

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

Учитывая показания колесного энкодера, мы можем вычислить угловые скорости для управления с помощью ПИД-регулятора и точных расчетов одометрии.

3. Реализация

Мы превратим наш контроллер без обратной связьи в контроллер с обратной связью, создав новую ноду gopigo_state_updater и отредактировав ноду gopigo_controller. Затем мы выполним расчеты в новой ноде diffdrive_odom.

1. GoPiGo State Updater

Колесные энкодеры измеряют, на сколько реально повернулось каждое колесо, и оценивают реальные угловые скорости колес. В дальнейшем наш ПИД-регулятор исправит несоответствия между заданной и измеряемой (реальной) скоростью вращения колеса. Но прежде всего, нода gopigo_state_updater должна преобразовать показания колесного энкодера в угловую скорость.

Интересно, что колесные энкодеры GoPiGo возвращают количество пройденных сантиметров; в то время как большинство кодировщиков возвращает количество пройденных тактов (Следует пояснить, что при повороте на фиксированный малый угол энкодер генерирует некий сигнал . Подсчитывая количество этих сигналов, т.е. количество тактов, мы можем получить угол поворота и скорость поворота колеса). Тем не менее, измеряемые сигналы любого типа можгут быть преобразованы в угловые скорости. Для данных с нашего колесного энкодера мы можем вычислить угол поворота колеса в радианах, как величину, пропорциональную пройденному расстоянию, получаемому с энкодера. Затем мы вычисляем угловую скорость путем деления на время, за которое проводилось измерение (т.е. время, за которое робот преодолел расстояние, полученное с энкодеров).

Используются следующие сокращения:

  • d: изменения в расстоянии, полученные от энкодеров
  • R: радиус колеса робота
  • Δt: время перемещения на расстояние, полученное от энкодера
  • w: угловая скорость колеса

Для вычисления угловой скорости, мы сначала используем расстояние с энкодера, чтобы вычислить, какую часть от длины окружности колеса представляет это расстояние. А значит можно и вычислить угол поворота колеса, умножая это (ту самую часть, долю) на количество радиан за один оборот (очевидно, 2π). Наконец, мы делим на время, необходимое для перемещения на текущее расстояние, полученное с энкодера.

Eqa1.png

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

2. Контроллер GoPiGo с ПИД-регулятором