RViz: визуализация данных робота
RViz превращает абстрактные топики в наглядную 3D-картину того, что робот видит и думает.
RViz — 3D-визуализатор ROS: он подписывается на топики и рисует их содержимое в трёхмерной сцене — модель робота, лучи лидара, карту, преобразования TF, траектории.
Зачем нужен RViz
Числа в ros2 topic echo /scan ничего не говорят интуиции. А когда RViz рисует красные точки лидара вокруг модели робота, вы мгновенно видите: вот стена, вот дверной проём, а вот шум от стеклянной поверхности. RViz — главное «окно в голову робота»: что он воспринимает, где себя считает, куда собирается ехать. Это не управление роботом, а именно наблюдение и отладка.
Дисплеи (Displays)
RViz показывает данные через дисплеи — каждый отвечает за свой тип данных. Вы добавляете нужные и указываете им топик:
| Дисплей | Что рисует | Топик/данные |
| RobotModel | 3D-модель робота из URDF | robot_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; это инструмент наблюдения, не управления.