Pull to refresh

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

Reading time 4 min
Views 36K
Роботическая операционная система 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
Comments 2
Comments Comments 2

Articles