RViz: визуализация данных робота

RViz превращает абстрактные топики в наглядную 3D-картину того, что робот видит и думает.

RViz — 3D-визуализатор ROS: он подписывается на топики и рисует их содержимое в трёхмерной сцене — модель робота, лучи лидара, карту, преобразования TF, траектории.

Зачем нужен RViz

Числа в ros2 topic echo /scan ничего не говорят интуиции. А когда RViz рисует красные точки лидара вокруг модели робота, вы мгновенно видите: вот стена, вот дверной проём, а вот шум от стеклянной поверхности. RViz — главное «окно в голову робота»: что он воспринимает, где себя считает, куда собирается ехать. Это не управление роботом, а именно наблюдение и отладка.

Дисплеи (Displays)

RViz показывает данные через дисплеи — каждый отвечает за свой тип данных. Вы добавляете нужные и указываете им топик:

ДисплейЧто рисуетТопик/данные
RobotModel3D-модель робота из URDFrobot_description
LaserScanточки лидара/scan
Mapкарту помещения/map
TFоси систем координат/tf
Pathзапланированный маршрут/plan
Imageкадр с камеры/image

Fixed Frame — точка отсчёта сцены

Ключевая настройка RViz — Fixed Frame: система координат, относительно которой рисуется вся сцена. Если выбрать map, робот будет ездить по неподвижной карте. Если выбрать base_link, робот «замрёт» в центре, а мир будет двигаться вокруг него. Неверный Fixed Frame — причина №1 жалоб «в RViz всё прыгает и разъезжается».

Типичный сценарий отладки

Робот не объезжает стену. Открываем RViz, Fixed Frame = map, добавляем RobotModel, LaserScan и Map. Видим: точки лидара рисуются не там, где стена на карте. Значит проблема в TF — преобразование laser неверное. Без RViz эту ошибку искали бы часами в логах, а тут она видна за секунды.

Как работает под капотом

RViz — обычный узел ROS, который подписан на множество топиков. Чтобы нарисовать луч лидара в кадре map, он берёт сообщение /scan (оно в кадре laser), узнаёт его frame_id и время из Header, спрашивает у TF2 преобразование laser -> map на это время и пересчитывает каждую точку. Поэтому корректная работа RViz целиком зависит от исправного дерева TF и правильно заполненных Header в сообщениях. Конфигурацию дисплеев RViz сохраняет в файл .rviz, который кладут в пакет и открывают из launch.

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

  • Неверный Fixed Frame. Сцена «прыгает» или данные разъезжаются.
  • Несуществующий frame в TF. Дисплей краснеет: «frame does not exist» — нет преобразования.
  • Считать, что RViz управляет роботом. Это наблюдатель; команды (кроме спец-инструментов вроде 2D Goal) он не шлёт.

Итоги

  • RViz рисует данные робота в 3D: модель, лидар, карту, TF, маршруты.
  • Данные показывают дисплеи, каждому задают топик.
  • Fixed Frame задаёт точку отсчёта всей сцены.
  • RViz опирается на TF и Header; это инструмент наблюдения, не управления.
Проверьте себя
1. Что такое RViz?
AСистема сборки
B3D-визуализатор данных робота (модель, лидар, карта, TF)
CСимулятор физики
DМенеджер пакетов
2. За что отвечает настройка Fixed Frame в RViz?
AЗа цвет фона
BЗа систему координат, относительно которой рисуется вся сцена
CЗа частоту обновления
DЗа имя робота
3. От чего зависит правильная отрисовка лидара в RViz?
AОт скорости процессора
BОт исправного дерева TF и корректных Header в сообщениях
CОт версии Python
DОт цвета точек