# ROS\_LIB

Для работы с различной периферией (микроконтроллеры) в составе 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

Скомпилируйте и загрузите на микроконтроллер VBCore. Если пример не открывается, то нужно поменять его расширение .pde на .ino Для этого зайдите в директорию, в которой лежит скетч: Arduino/libraries/ros\_lib/examples/HelloWorld. Дальше переименуйте скетч, заменив расширение .pde на .ino Все, можно возращаться в среду Arduino и загружать скетч.

Если у вас возникли какие-то ошибки, попробуйте найти описание своей оброблемы в главе с ошибками или загуглить самостоятельно.

## Запуск rosserial

Поскольку вы используете один порт и для загрузки скетчей и для коммуникации через rosserial, то запуск rosserial надо осуществлять после загрузки скетча. Не забудьте в Arduino IDE закрыть serial port.

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

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

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

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

<figure><img src="https://3551773033-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FBjLyfPc4FcQUfXFi5fQr%2Fuploads%2FjGL06q1luF2p4lVhJoGw%2Fimage.png?alt=media&#x26;token=d96e59cf-58c0-460b-808e-b2d696524185" alt=""><figcaption></figcaption></figure>
