Pull to refresh

Программирование робототехники с Arduino и ROS

Reading time4 min
Views36K
Роботическая операционная система ROS является довольно мощной платформой для создания роботических систем, которая включает все необходимое для разработки своих проектов от простейших программных компонентов, называемых “узлами”, и протокола обмена данными до среды симулирования реальной роботической платформы Gazebo. В основном ROS используется в связке с такими микроконтролерами, как RaspberryPi и Blackbone, которые обладают большими вычислительными возможностями и собственной операционной системой.

Arduino является популярной платой для прототипирования, получившее широкое распространение в связи с возникшим не так давно понятием “умный дом” и которая явлется идеальной стартовой точкой для новичков в области микроэлектроники и робототехники.

В данный момент существует не так много информации об использовании роботической операционной системы ROS в связке с микроконтроллером Arduino. В основном это зарубежные интернет ресурсы и книги.

В данной статье я хочу рассказать как «подружить» ROS и Arduino и что мне удалось добиться в этой связке.

Для использования ROS с платой Arduino существует официальная библиотека в ROS — rosserial_arduino.

Установка rosserial_arduino


Установка библиотеки так же проста как установка любых других пакетов ROS:

sudo apt-get install ros-<distribution_name>-rosserial-arduino
sudo apt-get install ros-<distribution_name>-rosserial

После этого нужно установить пакет rosserial_arduino из бинарных файлов. Установка немного отличается для ROS версий начиная с groovy, где для сборки пакетов была создана собственная утилита catkin. Для версий ранее groovy нужно выполнить следующие команды:

hg clone https://kforge.ros.org/rosserial/hg rosserial
rosmake rosserial_arduino

Для версий ROS, использующих catkin (groovy и более поздние) процедура установки будет следующей:

cd <ws>/src
git clone https://github.com/ros-drivers/rosserial.git
cd <ws>
catkin_make
catkin_make install
source <ws>/install/setup.bash

Здесь ws обозначает название папки catkin workspace, обычно catkin_ws.

Добавление rosserial_arduino в Arduino IDE


Теперь осталось только скопировать библиотеку ros_lib в среду Arduino чтобы позволить программам Arduino взаимодействовать с ROS. Библиотека ros_lib была сгенерирована на предыдущих шагах установки.

Библиотека будет скопирована в папку , которая является папкой по умолчанию для хранения скетчей Arduino, обычно sketchbook.

Установка ros_lib отличается для версий ROS, использующих catkin (начиная с версии groovy) и rosbuild (fuerte и более ранние).

Для версий с catkin установка будет следующей:

cd <sketchbook>/libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .

А для версий fuerte и более ранних будет так:

roscd rosserial_arduino/src
cp -r ros_lib <sketchbook>/libraries/ros_lib

Запуск примеров для rosserial_ros


Теперь можно открыть примеры для rosserial_arduino в Arduino IDE. Для этого запустите Arduino IDE, выберите File > Examples > ros_lib. Выберите для начала пример HelloWorld.

Скетч из примеров можно сразу загрузить на плату. Загрузка ничем не отличается от загрузки любого другого скетча Arduino.
Осталось лишь запустить ROS мастер и клиентское приложение rosserial, которое будет перенаправлять все сообщение Arduino другим компонентам ROS:

roscore
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0

Параметр _port определяет последовательный порт, по которому доступна плата Arduino, у меня это например, /dev/ttyACM0.

Единственное действие, которое выполняет скетч HelloWorld это публикация сообщений в тему chatter. Вы можете увидеть публикуемые сообщения с помощью команды rostopic:

rostopic echo chatter

Решение проблем запуска


Если при запуске клиентского приложения rosserial появилась ошибка: «Unable to sync with device; possible link problem or link software version mismatch such as hydro rosserial_python with groovy Arduino», то нужно добавить строку

#define USE_USBCON

перед включением библиотек ros в скетче.

Возможности rosserial_arduino


rosserial_arduino позволяет публиковать сообщения в темы и подписываться на сообщения из конкретных тем. Также он позволяет использовать ros::Time и TF и публиковать данные tf трансформации.

Например, при экспериментах мне удалось создать скетч для получения данных с ультразвукового сенсора расстояния HC-SR07 и публикации в тему range.

Среди интересных особенностей ROS, которую можно использовать в rosserial_arduino это визуализация численных данных (например, с сенсора) с rqt_plot. Например, визуализовать данные с сенсора HC-RS07 в виде графика можно так:

rqt_plot range


image

Также можно контролировать серво подписавшись на тему servo и публиковать значения для угла поворота серво командой:

rostopic pub servo std_msgs/UInt16  <angle>


Что дальше?


rosserial_arduino предлагает серию примеров по использованию библиотеки с различными сенсорами, LED, серво и кнопками. Все примеры использования можно найти на официальной странице ROS: wiki.ros.org/rosserial_arduino/Tutorials.

На мой взгляд, rosserial_arduino может иметь множество сценариев использования для мобильных роботов. Например, для колесного робота, оснащенного ультразвуковым сенсором типа SRF08 Ultrasonic Ranger rosserial_arduino можно использовать следующим образом: узел rosserial_arduino может включать Publisher, который через определенный интервал времени посылает данные с сонара, и Subscriber, который подписывается на ту же тему и передает данные методу, который контролирует движение робота. Пакет rosserial_arduino дает полную свободу разработчику: все зависит только от вашей фантазии.

Удачи в экспериментах с ROS и Arduino!
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+10
Comments2

Articles