Роботизированная операционная система ROS представляет собой достаточно мощную платформу для создания роботизированных систем, включающую в себя все необходимое для разработки ваших проектов: от простейших программных компонентов, называемых «узлами», и протокола связи до среды моделирования Gazebo для настоящей роботизированной платформы.
ROS в основном используется совместно с микроконтроллерами, такими как RaspberryPi и Blackbone, которые обладают большими вычислительными возможностями и собственной операционной системой.
Arduino — популярная плата для макетирования, ставшая популярной в связи с недавней концепцией «умного дома» и являющаяся идеальной отправной точкой для новичков в области микроэлектроники и робототехники.
На данный момент имеется не так много информации об использовании роботизированной операционной системы ROS совместно с микроконтроллером Arduino. В основном это зарубежные интернет-ресурсы и книги.
В этой статье я хочу рассказать вам, как «подружить» ROS и Arduino и чего мне удалось добиться в этой комбинации.
Для использования ROS с платой Arduino в ROS есть официальная библиотека — rosserial_arduino .
Установка rosserial_arduino
Установить библиотеку так же просто, как и любые другие пакеты ROS:После этого вам необходимо установить пакет rosserial_arduino из бинарных файлов.sudo apt-get install ros-<distribution_name>-rosserial-arduino sudo apt-get install ros-<distribution_name>-rosserial
Установка немного отличается для версий 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, обычно catkin_ws.
Добавление rosserial_arduino в Arduino IDE
Теперь осталось только скопировать библиотеку ros_lib в среду Arduino, чтобы позволить программам Arduino взаимодействовать с ROS. Библиотека ros_lib была создана на предыдущих этапах установки.Библиотека будет скопирована в папку, которая является папкой по умолчанию для хранения скетчей Arduino, обычно это альбом для рисования.
Установка ros_lib отличается для версий ROS, использующих catkin (из groovy) и rosbuild (fuerte и более ранние).
Для версий с серёжкой установка будет следующая: 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, выберите «Файл» > «Примеры» > ros_lib. Чтобы начать, выберите пример HelloWorld. Эскиз из примеров можно сразу загрузить на доску.
Загрузка ничем не отличается от загрузки любого другого скетча Arduino.
Остается только запустить мастер ROS и клиентское приложение rosserial, которое будет перенаправлять все сообщения Arduino на другие компоненты ROS: roscore
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
Параметр _port определяет последовательный порт, через который доступна плата Arduino, например /dev/ttyACM0.
Единственное действие, которое выполняет скетч HelloWorld — это публикация сообщений в теме чата.
Посмотреть опубликованные сообщения можно с помощью команды rostopic: rostopic echo chatter
Решение проблем при запуске
Если при запуске клиентского приложения Rosserial появляется ошибка: «Невозможно синхронизироваться с устройством; возможна проблема со связью или несоответствие версии программного обеспечения ссылки, например, Hydro rosserial_python с отличным Arduino", тогда вам нужно добавить строку #define USE_USBCON
перед включением ros-библиотек в эскиз.
Возможности rosserial_arduino
rosserial_arduino позволяет публиковать сообщения в темах и подписываться на сообщения из определенных тем.Он также позволяет вам использовать ros::Time и TF и публиковать данные преобразования tf. Например, в ходе своих экспериментов мне удалось создать эскиз для получения данных с ультразвукового датчика расстояния.
HC-SR07 и публикации по тематическому кругу.
Среди интересных возможностей ROS, которые можно использовать в rosserial_arduino, — визуализация числовых данных (например, с датчика) с помощью rqt_plot. Например, вы можете визуализировать данные с датчика HC-RS07 в виде такого графика: rqt_plot range
Управлять сервоприводом также можно, подписавшись на тему сервоприводов и публикуя значения угла поворота сервопривода командой: rostopic pub servo std_msgs/UInt16 <angle>
Что дальше?
rosserial_arduino предлагает серию примеров использования библиотеки с различными датчиками, светодиодами, сервоприводами и кнопками.Все примеры использования можно найти на официальной странице ROS: wiki.ros.org/rosserial_arduino/Tutorials .
На мой взгляд, rosserial_arduino может иметь множество вариантов использования для мобильных роботов.
Например, для колесного робота, оснащенного ультразвуковым датчиком типа SRF08 Ultrasonic Ranger, rosserial_arduino можно использовать следующим образом: узел rosserial_arduino может включать в себя Издателя, который отправляет данные с сонара через определенный интервал времени, и Подписчика, который подписывается к той же теме и передает данные методу, управляющему движением робота.
Пакет rosserial_arduino дает полную свободу разработчику: все зависит только от вашей фантазии.
Удачи в экспериментах с ROS и Arduino! Теги: #ros #arduino #робототехника #разработка робототехники
-
Научное Программирование В Мфти
19 Oct, 24