Управление реальным роботом без обратной связи в ROS (часть 4): различия между версиями
Editor (обсуждение | вклад) |
Editor (обсуждение | вклад) |
||
Строка 116: | Строка 116: | ||
* '''w:''' угловая скорость | * '''w:''' угловая скорость | ||
* '''R:''' радиус колеса | * '''R:''' радиус колеса | ||
+ | |||
+ | Связь касательной и угловой скоростей: | ||
+ | [[Файл:conn_1|thumb|center|]] |
Версия 01:37, 17 июля 2019
В том уроке мы сделаем первые шаги в запуске ROS на реальном роботе. Мы преобразуем команды линейной и угловой целевых скоростей робота в команды, подаваемые на двигатели, которые будут вращать левое и правое колеса нашего робота с дифференциальным приводом. Мы используем разомкнутую систему управления (без обратной связи), которая не использует данные с датчиков (например, энкодеров) в качестве обратной связи.
Содержание
Обзор: разомкнутая система управления роботом
Цели: 1. Организация управления роботом без обратной связи через WiFi с помощью команд скорости
2. Обучение управлению без обратной связи роботом с дифференциальным приводом, с использованием интерфейса передачи сообщений ROS через WiFi, и управление двигателями реального робота
Обзор: У нас есть две машины: хост-машина с Ubuntu и робот, управляемый через Raspberry Pi. Устройства обмениваются сообщениями ROS, объединяя их в сеть для совместного использования одного и того же мастера ROS. Узлы ROS для Raspberry Pi управляют двигателями (влево + вправо) и публикуют показания энкодеров робота. Ноды ROS на хост-машине вычисляют целевые значения скорости для двигателей, а также обновляют одометрию робота.
План:
- Установить ПО на Raspberry Pi, которая на роботе
- Настроить сеть между хост-машиной и Raspberry Pi
- Создать ноды ROS для отправки команд на моторы робота
- Проверить, что робот корректно отрабатывает команды управления
Код репозитория (хранилища):
git clone -b openloop https://github.com/richardw05/gopigo_ws.git
Совместимость:
Программное обеспечение
- ROS: Kinetic
- OS: Ubuntu 16.04
Аппаратное обеспечение
- Робот с дифференциальным приводом: GoPiGo
- USB-адаптер WiFi: Raspberry Pi USB WiFi Dongle
На других роботах с дифференциальным приводом будут это тоже будет работать, но может потребоваться изменение кода для управления двигателями.
Если вы заказываете новый USB-адаптер WiFi, рассмотрите устройство WiFi, поддерживающее стандарт 802.11 AC, если в будущем вы собираетесь передавать данные с камеры.
0. (GoPiGo) Установка ПО
Raspberry Pi робота будет взаимодействовать с платой GoPiGo, которая контролирует и связывается с различными периферийными устройствами (такими как двигатели, инфракрасные датчики и т.д.). Мы установим ROS и библиотеку GoPiGo на Raspberry Pi.
А. Установите ROS на Raspberry Pi. На Raspberry Pi предусмотрена специальная процедура установки ROS. Следуйте инструкциям отсюда: wiki.ros.org/ROSberryPi/Installing ROS Kinetic on the Raspberry Pi
Б. Установите GoPiGo на Raspberry Pi. Инструкции по установке библиотеки GoPiGo можно найти здесь: http://www.dexterindustries.com/GoPiGo/programming/python-programming-for-the-raspberry-pi-gopigo/installing-gopigo-python-library
1. (Опционально) Работа по сети с ROS через WiFi
Сеть WiFi позволит хост-машине и роботу общаться через сообщения ROS. Сначала мы настроим сеть WiFi, а затем настроим сеть ROS.
А. Настройка сети WiFi
Если у вас уже есть SSH между компьютерами, вы можете пропустить этот шаг. Но убедитесь, что оба устройства подключены к одной подсети (или просто подключены к одному и тому же маршрутизатору). Мы хотим организовать SSH от хост-машины к Raspberry Pi.
Если вы не знаете IP-адрес устройства, используйте nmap для поиска устройств в подсети.
nmap -sn 192.168.1.0/24
Теперь вы можете организовать SSH к Raspberry Pi.
ssh pi@{IPADDRESS}
Если у вас возникли проблемы в организации SSH к Raspberry Pi, вам может понадобиться добавить открытый ключ SSH вашего хоста в Raspberry Pi ~/.ssh/authorized_keys.
Это опционально, но IP-адрес трудно запомнить и периодически менять, поэтому рассмотрите возможность использования хостнейма вместо него
hostname -I
Б. ROS через WiFi
Мы настроили оба устройства для связи через WiFi с ROS, заставив их использовать один и тот же мастер ROS. Мы выбираем запуск мастера ROS на хост-компьютере. На хост-компьютере запускаем мастер ROS
roscore
На Raspberry Pi сконфигурируйте его для использования мастера ROS хост-машины.
В качестве временного решения,
export ROS_MASTER_URI=http://IP_ADDRESS:11311
Для постоянного решения добавьте строку выше в ваш файл .bashrc.
Проверьте, что это работает. На Raspberry Pi:
rostopic pub /test std_msgs/Float32 5.0
На хост-машине:
rostopic echo /test
Ссылки:
- wiki.ros.org/ROS/Tutorials/MultipleMachines
- nootrix.com/software/ros-networking
- wiki.ros.org/turtlebot/Tutorials/indigo/NetworkConfiguration
2. Архитектура
В этом проекте наш хост-компьютер будет читать высокоуровневые команды целевой скорости для тела робота, которые преобразуются в отдельные команды для левого и правого колес, которые должен будет отработать робот. Как показано ниже, у нас есть два ключевых узла ROS: diffdrive_controller, который запускается на хост-машине, и gopigo_controller, который запускается на роботе. Это разделение позволит нам в будущем заменить другое оборудование роботов, переписав конкретные ноды ROS GoPiGo.
Исходя из архитектуры стека навигации ROS, мы в основном реализуем базовый контроллер. Ниже показан более детальный анализ основных сообщений, передаваемых между нодами ROS.
В реальном времени мы берем целевые линейные и угловые скорости и используем обратную кинематику для генерации касательных (линейных) скоростей для левого и правого колес. Робот преобразует эти целевые касательные скорости в целевые угловые скорости. Затем они преобразуются в команды двигателям и отправляются на двигатели. Подробности дополнительно обсуждаются ниже в реализации.
3. Реализация
Мы реализуем этот проект с нуля. Начинаем с инициализации рабочего пространства. Затем мы создаем контроллер GoPiGo, который взаимодействует с двигателями. Кроме того, мы создаем контроллер дифференциального привода, который будет управлять скоростями каждого из колес.
А. Инициализация новой рабочей среды
Мы создаем рабочее пространство под названием gopigo_ws. Напомним некоторые команды:
mkdir gopigo_ws catkin init cd gopigo_ws mkdir src catkin build
Б. Контроллер GoPiGo
Контроллер GoPiGo получает заданные скорости и преобразует их в команды для двигателей робота. Для каждого колеса мы берем целевую касательную скорость (линейную скорость точки на колесе), преобразуем ее в угловую скорость (как быстро вращается колесо), а затем преобразуем ее в команды для двигателя (направление и скорость вращения двигателя).
Используются следующие сокращения:
- v: касательная скорость
- w: угловая скорость
- R: радиус колеса
Связь касательной и угловой скоростей: