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

Роботическая операционная система 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 imageТакже можно контролировать серво подписавшись на тему 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