Программирование робототехники с Arduino и ROS02.02.2015 08:48
Роботическая операционная система ROS является довольно мощной платформой для создания роботических систем, которая включает все необходимое для разработки своих проектов от простейших программных компонентов, называемых «узлами», и протокола обмена данными до среды симулирования реальной роботической платформы Gazebo. В основном ROS используется в связке с такими микроконтролерами, как RaspberryPi и Blackbone, которые обладают большими вычислительными возможностями и собственной операционной системой.Arduino является популярной платой для прототипирования, получившее широкое распространение в связи с возникшим не так давно понятием «умный дом» и которая явлется идеальной стартовой точкой для новичков в области микроэлектроники и робототехники.В данный момент существует не так много информации об использовании роботической операционной системы ROS в связке с микроконтроллером Arduino. В основном это зарубежные интернет ресурсы и книги.В данной статье я хочу рассказать как «подружить» ROS и Arduino и что мне удалось добиться в этой связке.Для использования ROS с платой Arduino существует официальная библиотека в ROS — rosserial_arduino.Установка rosserial_arduinoУстановка библиотеки так же проста как установка любых других пакетов ROS:
sudo apt-get install ros--rosserial-arduino
sudo apt-get install ros--rosserial
После этого нужно установить пакет rosserial_arduino из бинарных файлов. Установка немного отличается для ROS версий начиная с groovy, где для сборки пакетов была создана собственная утилита catkin. Для версий ранее groovy нужно выполнить следующие команды:
hg clone https://kforge.ros.org/rosserial/hg rosserial
rosmake rosserial_arduino
Для версий ROS, использующих catkin (groovy и более поздние) процедура установки будет следующей:
cd /src
git clone https://github.com/ros-drivers/rosserial.git
cd
catkin_make
catkin_make install
source /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 /libraries
rm -rf ros_lib
rosrun rosserial_arduino make_libraries.py .
А для версий fuerte и более ранних будет так:
roscd rosserial_arduino/src
cp -r ros_lib /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
Также можно контролировать серво подписавшись на тему servo и публиковать значения для угла поворота серво командой:
rostopic pub servo std_msgs/UInt16
Что дальше?
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!
© Habrahabr.ru