Архитектура робота, отладка и экосистема

Собираем всё вместе: как устроен целый робот, как его отлаживать и куда двигаться в экосистеме ROS.

Архитектура «восприятие → планирование → действие» — стандартная организация автономного робота: слой датчиков питает слой принятия решений, который управляет слоем исполнения.

Полная картина робота

За курс мы прошли все кусочки; теперь соберём их в единую систему нашей мобильной платформы. Данные текут слева направо, а TF2 связывает все системы координат поперёк.

 ВОСПРИЯТИЕ            ПЛАНИРОВАНИЕ              ДЕЙСТВИЕ
 +-----------+        +----------------+       +----------------+
 | lidar     |-/scan->|                |       |                |
 | camera    |-/image-| Nav2:          |-/cmd_vel->| base_ctrl   |-> моторы
 | imu       |-/imu-->| SLAM+локализ.  |       | (micro-ROS)    |
 | odometry  |-/odom->| планировщики   |       +----------------+
 +-----------+        +----------------+
        \                    |                        /
         `-------- TF2: map/odom/base_link/laser ----'

Это и есть «понятный робот»: датчики дают картину мира, Nav2 решает, куда ехать, контроллер базы на micro-ROS крутит моторы, а TF2 держит всё в единой системе координат.

Отладка распределённой системы

Робот — распределённая система из многих узлов, и баги в ней редко лежат на поверхности. Полезно иметь дисциплину диагностики «сверху вниз»:

  1. Граф: rqt_graph — все ли узлы и связи на месте? Часто проблема в отсутствующей или лишней стрелке.
  2. Данные: ros2 topic echo/hz — идут ли сообщения и с нужной частотой?
  3. Координаты: view_frames, RViz — цело ли дерево TF, не разъезжаются ли данные?
  4. Логи: rqt_console и /rosout — нет ли ошибок и предупреждений?
  5. Запись: ros2 bag — воспроизвести инцидент и разобрать спокойно.

Большинство загадок («робот не едет», «врезается в стену») решаются именно этими пятью шагами, без единой правки кода.

Экосистема и сообщество

Сила ROS — в людях и пакетах вокруг него. Тысячи открытых пакетов: драйверы почти любого лидара и камеры, готовые контроллеры, симуляторы, инструменты. Документация, форумы (ROS Discourse), вопросы и ответы, ежегодная конференция ROSCon. Прежде чем писать что-то с нуля, почти всегда стоит поискать готовый пакет — велик шанс, что задачу уже решили.

РесурсЗачем
Официальная документациятуториалы и справочник API
Индекс пакетовпоиск готовых решений
ROS Discourse / Q&Aвопросы, анонсы, помощь
GitHub проектовисходники, issues, примеры

Где применяют ROS

  • Мобильные роботы: складская логистика, доставка, уборка, патрулирование.
  • Манипуляторы: сборка, сварка, паллетирование, лабораторная автоматизация.
  • Дроны и БПЛА: аэросъёмка, инспекция, картографирование.
  • Беспилотный транспорт и исследования: прототипы, университеты, космос.

Как работает под капотом большой системы

В зрелом проекте слои часто разносят по машинам: восприятие и планирование — на мощном бортовом компьютере, исполнение — на микроконтроллерах через micro-ROS. DDS делает это прозрачным: узлы общаются одинаково, неважно, в одном они процессе, на одной плате или на разных компьютерах в сети. Эта масштабируемость от учебной тележки до автономного грузовика — и есть причина, почему ROS стал индустриальным стандартом.

Частые ошибки

  • Писать с нуля то, что есть в экосистеме. Сначала ищите готовый пакет.
  • Отлаживать вслепую. Дисциплина «граф → данные → TF → логи → запись» экономит часы.
  • Смешивать слои. Чистое разделение восприятия, планирования и действия облегчает рост системы.

Итоги

  • Архитектура робота: восприятие → планирование → действие, связанные TF2.
  • Отлаживают сверху вниз: граф, данные, TF, логи, записи.
  • Экосистема ROS огромна — почти всё уже написано и доступно.
  • ROS масштабируется от учебной платформы до промышленных роботов и дронов.
Проверьте себя
1. Какова стандартная архитектура автономного робота?
AЗапись → сжатие → передача
BВосприятие → планирование → действие, связанные через TF2
CКомпиляция → линковка → запуск
DMaster → slave → backup
2. С чего разумно начинать отладку распределённой системы ROS?
AСразу переписать узлы
BПроверить граф, данные топиков, TF, логи и при необходимости запись bag
CПереустановить Ubuntu
DПоменять микроконтроллер
3. Что стоит сделать прежде, чем писать новый компонент робота?
AСразу писать с нуля
BПоискать готовый пакет в экосистеме ROS
CСменить язык на C++
DОтключить TF2