Управление реальным роботом c обратной связью в ROS (часть 5): различия между версиями
Editor (обсуждение | вклад) |
Editor (обсуждение | вклад) |
||
Строка 17: | Строка 17: | ||
Мы объединим показания энкодеров с обоих колес (точный расчет), чтобы оценить положение робота во времени (одометрия). | Мы объединим показания энкодеров с обоих колес (точный расчет), чтобы оценить положение робота во времени (одометрия). | ||
− | == Обзор: Управление роботом c обратной связью == | + | == 1. Обзор: Управление роботом c обратной связью == |
'''Цели: '''1. Использование данных колесного энкодера для управления с обратной связью и ПИД-регулятором, и для оценки одометрии робота | '''Цели: '''1. Использование данных колесного энкодера для управления с обратной связью и ПИД-регулятором, и для оценки одометрии робота | ||
Строка 33: | Строка 33: | ||
[https://www.youtube.com/watch?v=lgWnBWncRkU Видео-мануал] | [https://www.youtube.com/watch?v=lgWnBWncRkU Видео-мануал] | ||
− | == Архитектура == | + | == 2. Архитектура == |
И опять, у нас есть хост-машина и робот, подключенный через WiFi. Как показано ниже, мы добавляем два узла ROS. gopigo_state_updater запускается на роботе и преобразует данные энкодера колеса в оценки угловой скорости колеса. Мы расширяем gopigo_controller, чтобы использовать эти показания с энкодера для управления с помощью PID. diffdrive_odom запускается на хост-машине и использует оценки энкодера для проведения точного расчета одометрии. | И опять, у нас есть хост-машина и робот, подключенный через WiFi. Как показано ниже, мы добавляем два узла ROS. gopigo_state_updater запускается на роботе и преобразует данные энкодера колеса в оценки угловой скорости колеса. Мы расширяем gopigo_controller, чтобы использовать эти показания с энкодера для управления с помощью PID. diffdrive_odom запускается на хост-машине и использует оценки энкодера для проведения точного расчета одометрии. | ||
Строка 46: | Строка 46: | ||
[[Файл:Operation-1.png|600px|thumb|center|Учитывая показания колесного энкодера, мы можем вычислить угловые скорости для управления с помощью ПИД-регулятора и точных расчетов одометрии.]] | [[Файл:Operation-1.png|600px|thumb|center|Учитывая показания колесного энкодера, мы можем вычислить угловые скорости для управления с помощью ПИД-регулятора и точных расчетов одометрии.]] | ||
+ | |||
+ | == 3. Реализация == | ||
+ | |||
+ | Мы превратим наш контроллер без обратной связьи в контроллер с обратной связью, создав новую ноду gopigo_state_updater и отредактировав ноду gopigo_controller. Затем мы выполним расчеты в новой ноде diffdrive_odom. |
Версия 15:24, 17 июля 2019
В этом разделе мы сосредоточимся на использовании данных, поступающих с колесных энкодеров, с двумя целями:
1. Создание замкнутой системы управления с использованием ПИД-регулятора
Хотя управление с разомкнутым контуром простое в реализации, оно не всегда работает надежно при работе на реальном роботе, потому что комбинация факторов окружающей среды (например есть трение от пола) и внутренних факторов (то есть различий между левым и правым двигателями) играет роль.
Управление с обратной связью использует данные с датчиков (то есть с колесных энкодеров) для регулировки управляющих сигналов, идущих на двигатели, посредством обратной связи (рассчитывается значение ошибки как разница между целью и измерением). Управление с помощью ПИД - это популярный вариант управления замкнутой системой (системой с замкнутым контуром), который прост в реализации.
2. Одометрия с точным расчетом
Одометрия ценна тем, что она:
1) является необходимой информацией для использования стека навигации ROS в будущем
2) позволяет нам видеть траекторию робота
Мы объединим показания энкодеров с обоих колес (точный расчет), чтобы оценить положение робота во времени (одометрия).
1. Обзор: Управление роботом c обратной связью
Цели: 1. Использование данных колесного энкодера для управления с обратной связью и ПИД-регулятором, и для оценки одометрии робота
2. Обучение использованию обратной связи с данными датчиков для усовершенствования управления роботом и для оценки состояния
План:
- Прочитать данные с колесных энкодеров
- Ввести ПИД-регулирование в управление на обоих колесах
- Организовать точный расчет для оценки одометрии робота
Код репозитория (хранилища):
git clone -b closedloop https://github.com/richardw05/gopigo_ws.git
2. Архитектура
И опять, у нас есть хост-машина и робот, подключенный через WiFi. Как показано ниже, мы добавляем два узла ROS. gopigo_state_updater запускается на роботе и преобразует данные энкодера колеса в оценки угловой скорости колеса. Мы расширяем gopigo_controller, чтобы использовать эти показания с энкодера для управления с помощью PID. diffdrive_odom запускается на хост-машине и использует оценки энкодера для проведения точного расчета одометрии.
Ниже показаны сообщения ROS, передаваемые между нодами ROS.
В реальном времени мы сначала оцениваем угловые скорости колес по показаниям энкодеров колес. Они используются для ПИД-регулирования, который уменьшит разницу между целевой и измеряемой скоростями. Затем мы выполняем точные расчеты с использованием прямой кинематики для восстановления линейной и угловой скоростей робота, которые используются для оценки одометрии робота.
3. Реализация
Мы превратим наш контроллер без обратной связьи в контроллер с обратной связью, создав новую ноду gopigo_state_updater и отредактировав ноду gopigo_controller. Затем мы выполним расчеты в новой ноде diffdrive_odom.