# 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="/files/c5KLFbEZzYoSL7woa8mD" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://voltbro.gitbook.io/vbcores/tutorials/ros_lib.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
