Связь с железом и micro-ROS
Чтобы ROS управлял настоящими моторами и датчиками, нужны драйверы и мост к микроконтроллерам — micro-ROS.
micro-ROS — версия ROS 2 для микроконтроллеров: она позволяет запустить настоящий ROS-узел прямо на плате вроде ESP32, который публикует и подписывается на топики наравне с узлами на компьютере.
Два мира: компьютер и микроконтроллер
Мозг робота — компьютер (Raspberry Pi, ноутбук) с полноценным ROS 2: навигация, планирование, обработка камеры. Но моторы, энкодеры и простые датчики висят на микроконтроллере (ESP32, STM32) — он работает в реальном времени, точно крутит ШИМ моторов и читает энкодеры. Знакомым по нашим курсам Arduino и MicroPython это близко: МК отвечает за «железную» часть. Вопрос — как связать эти два мира в одну систему ROS.
Способ 1: драйвер-узел на компьютере
Простой подход: на компьютере запускают узел-драйвер, который по последовательному порту (USB/UART) общается с МК по своему протоколу. Узел переводит сообщения ROS в команды для платы и обратно. МК при этом не знает о ROS — он говорит на простом языке «крути мотор на столько-то». Так подключают многие готовые контроллеры моторов.
[ROS на Pi] --/cmd_vel--> [драйвер-узел] --USB/UART--> [ESP32] --> моторы
(переводит ROS <-> протокол платы)
Способ 2: micro-ROS прямо на плате
Более элегантный путь — поставить micro-ROS на сам ESP32. Тогда микроконтроллер становится полноправным узлом графа: он сам публикует /odom с энкодеров и подписывается на /cmd_vel. Отдельный узел-переводчик не нужен — плата говорит на языке ROS напрямую. Это требует более мощных МК (ESP32, STM32), потому что нужно уместить часть стека ROS в ограниченную память.
[ROS на Pi] <==топики==> [ micro-ROS agent ] <--serial--> [ESP32: ROS-узел]
(мост в обычный граф) публикует /odom
слушает /cmd_vel
micro-ROS Agent
МК слишком слаб для полного DDS, поэтому micro-ROS использует облегчённый протокол и агента — программу на компьютере, которая выступает мостом: она общается с платой по последовательному каналу и «вносит» её узел в обычный граф ROS 2. Для остальной системы узел на ESP32 неотличим от любого другого: он виден в ros2 node list, его топики — в ros2 topic list.
Как работает под капотом
micro-ROS построен на XRCE-DDS — «DDS для очень ограниченных устройств». МК не хранит всю логику discovery и сериализации; он шлёт компактные сообщения агенту, а тот разворачивает их в полноценный DDS-трафик. На самом МК micro-ROS обычно работает поверх реал-тайм ОС (например, FreeRTOS) или в составе прошивки. Память жёстко ограничена, поэтому число и размер сообщений планируют заранее — динамически «насоздавать» топиков, как на компьютере, нельзя.
Частые ошибки
- Забыть запустить micro-ROS agent. Без моста узел на плате не появится в графе — «робота не видно».
- Перегрузить слабый МК. Большие сообщения (картинки) на ESP32 не уместятся; ему оставляют моторы и простые датчики.
- Путать уровни ответственности. Реальное время и точный ШИМ — на МК; тяжёлые вычисления — на компьютере.
Итоги
- Железо подключают либо узлом-драйвером на компьютере, либо micro-ROS на самом МК.
- micro-ROS превращает ESP32/STM32 в полноценный узел графа ROS 2.
- micro-ROS Agent — мост между платой и обычным графом через XRCE-DDS.
- МК берёт реальное время и моторы, компьютер — тяжёлые вычисления.