Инструменты интроспекции и rqt
ROS даёт богатый набор инструментов, чтобы видеть и отлаживать живую систему без кода.
Интроспекция — это осмотр работающей системы ROS изнутри: какие узлы запущены, какие топики и сервисы есть, что по ним идёт. Главный графический инструмент — rqt.
Командная строка ros2
Утилита ros2 — швейцарский нож робототехника. У неё единый шаблон: ros2 <что> <действие>. Освоив его, вы исследуете любую систему.
| Команда | Что показывает |
ros2 node list / info | узлы и их связи |
ros2 topic list / echo / hz / info | топики, данные, частоту |
ros2 service list / call | сервисы и их вызов |
ros2 action list / send_goal | действия |
ros2 param list / get / set | параметры |
ros2 interface show | структуру типа сообщения |
rqt_graph — карта системы
Команда rqt_graph рисует живой граф вычислений: овалы — узлы, прямоугольники — топики, стрелки — потоки данных. Это бесценно при отладке: сразу видно, что узел планировщика, оказывается, не подписан на лидар, или что в /cmd_vel почему-то пишут два узла сразу.
rqt_graph( lidar_driver ) --/scan--> [ /scan ] --> ( obstacle_avoid ) ( obstacle_avoid ) --/cmd_vel--> [ /cmd_vel ] --> ( base_controller )
rqt и его плагины
rqt — это контейнер графических плагинов. Кроме графа есть: rqt_console (просмотр логов всех узлов в одном окне с фильтрами), rqt_plot (строит график числового поля топика в реальном времени — например, скорость во времени), rqt_reconfigure (крутилки для параметров узлов вживую). Это превращает абстрактную распределённую систему в наглядную приборную панель.
Отладка распределённой системы
Робот — это распределённая система, и баги в ней коварны. Узел запущен, но молчит; топик есть, но пустой; данные идут, но в неверной системе координат. Универсальный алгоритм диагностики:
ros2 node list— все ли узлы поднялись?ros2 topic list+echo— идут ли данные и какие?ros2 topic hz— не упала ли частота?rqt_graph— все ли связи на месте?rqt_console— нет ли ошибок в логах?
Как работает под капотом
Все эти инструменты — обычные узлы ROS. ros2 topic echo создаёт временного подписчика на топик. rqt_graph опрашивает discovery DDS, чтобы узнать, кто что публикует. Логи узлов идут в специальный топик /rosout, и rqt_console просто подписывается на него. Поэтому инструменты интроспекции ничем не «привилегированы» — они играют по тем же правилам графа, что и ваши узлы.
Частые ошибки
- Отлаживать кодом то, что видно командой. Часто
echoиrqt_graphмгновенно показывают проблему. - Забыть про разный ROS_DOMAIN_ID. Инструмент в другом домене не увидит узлов — будет казаться, что их нет.
- Не смотреть /rosout. Ошибки узлов часто уже залогированы, а вы ищете причину вслепую.
Итоги
- ros2 node/topic/service/param/action — командный осмотр живой системы.
- rqt_graph рисует граф узлов и топиков.
- rqt-плагины дают логи, графики и настройку параметров вживую.
- Инструменты — это обычные узлы, играющие по правилам графа.