# Arduino и ROS

Для подключения Arduino устройств к роботам работающим под управлением ROS нам понадобится установить пакет rosserial.   Он позволяет создавать ноды на микроконтроллере и подключать их к роботу через Serial соединение.

*Для работы рекомендуется использовать МК Arduino Mega или аналоги. С прочими могут возникнуть проблемы с нехваткой памяти, иногда из можно решить с помощью Google и знания английского языка.*

### Установка Arduino IDE

Скачать с сайта <https://www.arduino.cc/en/software>

Разархивировать скачанный архив, для удобства в  директорию /home  через проводник

Для удобства переименуйте папку в  `ArduinoIDE`

Откройте терминал (CTRL+ALT+T) и выполните следующие действия

`cd ArduinoIDE`    - зайдет в папку ArduinoIDE

`sudo ./install.sh`  запустит скрипт инсталяции

После завершения установки уставновите права записи в Serial порт:&#x20;

`./arduino-linux-setup.sh $USER`

**Запуск и проверка Arduino IDE**

После установки Arduino IDE убедитесь что вы можете заливать на ардуино тестовый скетч, например Blink.    Вы можете не сразу обнаружить порт в виртуальной машине, в этом случае его необходимо подключить:

![](https://368069091-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOSXnrt0c9kcKOFr9q6qb%2Fuploads%2Fq4VjbGQsNyPhCTn6PGkE%2F2021-12-06_16-55-12.png?alt=media\&token=4f86f313-c1aa-4672-9106-6ac4781080be)

В нижнем правом углу окна виртуальной машины нажмите на значок USB и отметьте нужный порт.  Убедитесь что все работает.

### Установка ROS пакета rosserial

Для работы с различной периферией (микроконтроллеры) в составе ROS существует специальный пакет `rosserial`. Он позволяет просто подключить к ядру `roscore` микроконтроллер через Serial порт и взаимодействовать с ним как с полноценной нодой ROS.

Пакет rosserial состоит из двух основных частей, одна работает на стороне компьютера, и взаимодействует с ядром ROS, вторая это набор библиотек для микроконтроллера, которые позволяют используя все сущности ROS разрабатывать программы, взаимодействующие с ROS.

Установка пакета `rosserial` происходи командой `apt`&#x20;

`sudo apt install ros-noetic-rosserial-arduino`

Для начала работы с ROS, вам необходимо "собрать" библиотеку `ros_lib` для `Ардуино`.

Сборку библиотеки необходимо производить самостоятельно, потому что файлы попадающие в библиотеку сильно зависят от того, какие пакеты ROS установлены на компьютере. "Сборщик" просматривает пакеты, находит в них все сообщения которые могут использоваться в вашей программе и собирает эти файлы в единую библиотеку. Только в этом случае и со стороны клиента и со стороны сервера мы получим одинаковые версии сообщений для топиков и сервисов. Использование "чужих" библиотек может привести к ошибкам.

Генерация библиотеки ros\_lib для Arduino (обратите внимание на точку в конце, она обозначает то библиотека сгенерируется в папке из которой вы запускаете программу:&#x20;

`rosrun rosserial_arduino make_libraries.py .`

После работы скрипта, мы получим папку ros\_lib в которой находимся  - это и есть библиотека.

Чтобы Arduino IDE смогла работать с библиотекой, перепишем ее в директорию библиотек Ардуино.

`cp -r ros_lib ~/Arduino/libraries`

Так же это можно сделать средствами Ubuntu - файловым менеджером. У вас с домашней директории после инсталляции появилась папка Arduino содержащая папку libraries - тут место для пользовательских библиотек ардуино.

Если вы все сделали правильно то в примерах Arduino появится раздел ros\_lib. Выберите в нем пример HelloWorld

![](https://368069091-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOSXnrt0c9kcKOFr9q6qb%2Fuploads%2FBXhacyEigD3SQNnASS4i%2Froslib.jpg?alt=media\&token=da2258ae-d3ac-4052-8c2f-2e5f594a58bf)

Скомпилируйте и загрузите на Arduino.

### Запуск rosserial

Поскольку вы используете один порт и для загрузки скетчей и для коммуникации через rosserial, то запуск rosserial надо осуществлять после загрузки скетча.&#x20;

При запущенном rosserial Arduino IDE будет ругаться на занятость порта. Каждый раз когда вы захотите залить новый скетч вам необходимо остановить rosserial.&#x20;

Запустите `roscore &` (если не запущен). В отдельном окне терминала запустите rosserial:

`rosrun rosserial_python serial_node.py _port:=/dev/ttyUSB0`

Обратите внимание, что имя порта надо подставить правильное. Подсмотреть его можно в среде Arduino:

![](https://368069091-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FOSXnrt0c9kcKOFr9q6qb%2Fuploads%2F87IK5W2hZNCiGBVerQxt%2Fport.jpg?alt=media\&token=ff3bddf0-df72-46a4-bbc3-7c4c6167ca49)

###

### Дополнительная информация

Документация модуля и примеры Arduino

<http://wiki.ros.org/rosserial_arduino/Tutorials>

\
Видео работы с ROS и АrduinoIDE

{% embed url="<https://www.youtube.com/watch?v=GygF4uHqSZM>" %}
