Arduino и ROS
Last updated
Last updated
Для подключения Arduino устройств к роботам работающим под управлением ROS нам понадобится установить пакет rosserial. Он позволяет создавать ноды на микроконтроллере и подключать их к роботу через Serial соединение.
Для работы рекомендуется использовать МК Arduino Mega или аналоги. С прочими могут возникнуть проблемы с нехваткой памяти, иногда из можно решить с помощью Google и знания английского языка.
Скачать с сайта https://www.arduino.cc/en/software
Разархивировать скачанный архив, для удобства в директорию /home через проводник
Для удобства переименуйте папку в ArduinoIDE
Откройте терминал (CTRL+ALT+T) и выполните следующие действия
cd ArduinoIDE
- зайдет в папку ArduinoIDE
sudo ./install.sh
запустит скрипт инсталяции
После завершения установки уставновите права записи в Serial порт:
./arduino-linux-setup.sh $USER
Запуск и проверка Arduino IDE
После установки Arduino IDE убедитесь что вы можете заливать на ардуино тестовый скетч, например Blink. Вы можете не сразу обнаружить порт в виртуальной машине, в этом случае его необходимо подключить:
В нижнем правом углу окна виртуальной машины нажмите на значок USB и отметьте нужный порт. Убедитесь что все работает.
Для работы с различной периферией (микроконтроллеры) в составе ROS существует специальный пакет rosserial
. Он позволяет просто подключить к ядру roscore
микроконтроллер через Serial порт и взаимодействовать с ним как с полноценной нодой ROS.
Пакет rosserial состоит из двух основных частей, одна работает на стороне компьютера, и взаимодействует с ядром ROS, вторая это набор библиотек для микроконтроллера, которые позволяют используя все сущности ROS разрабатывать программы, взаимодействующие с ROS.
Установка пакета rosserial
происходи командой apt
sudo apt install ros-noetic-rosserial-arduino
Для начала работы с ROS, вам необходимо "собрать" библиотеку ros_lib
для Ардуино
.
Сборку библиотеки необходимо производить самостоятельно, потому что файлы попадающие в библиотеку сильно зависят от того, какие пакеты ROS установлены на компьютере. "Сборщик" просматривает пакеты, находит в них все сообщения которые могут использоваться в вашей программе и собирает эти файлы в единую библиотеку. Только в этом случае и со стороны клиента и со стороны сервера мы получим одинаковые версии сообщений для топиков и сервисов. Использование "чужих" библиотек может привести к ошибкам.
Генерация библиотеки ros_lib для Arduino (обратите внимание на точку в конце, она обозначает то библиотека сгенерируется в папке из которой вы запускаете программу:
rosrun rosserial_arduino make_libraries.py .
После работы скрипта, мы получим папку ros_lib в которой находимся - это и есть библиотека.
Чтобы Arduino IDE смогла работать с библиотекой, перепишем ее в директорию библиотек Ардуино.
cp -r ros_lib ~/Arduino/libraries
Так же это можно сделать средствами Ubuntu - файловым менеджером. У вас с домашней директории после инсталляции появилась папка Arduino содержащая папку libraries - тут место для пользовательских библиотек ардуино.
Если вы все сделали правильно то в примерах Arduino появится раздел ros_lib. Выберите в нем пример HelloWorld
Скомпилируйте и загрузите на Arduino.
Поскольку вы используете один порт и для загрузки скетчей и для коммуникации через rosserial, то запуск rosserial надо осуществлять после загрузки скетча.
При запущенном rosserial Arduino IDE будет ругаться на занятость порта. Каждый раз когда вы захотите залить новый скетч вам необходимо остановить rosserial.
Запустите roscore &
(если не запущен). В отдельном окне терминала запустите rosserial:
rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0
Обратите внимание, что имя порта надо подставить правильное. Подсмотреть его можно в среде Arduino:
Документация модуля и примеры Arduino
http://wiki.ros.org/rosserial_arduino/Tutorials
Видео работы с ROS и АrduinoIDE