Програмування робототехніки з 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-<distribution_name>-rosserial-arduino
sudo apt-get install ros-<distribution_name>-rosserial

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

clone hg 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!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.