Навигация Nav2: карта, локализация, путь
Чтобы робот сам доезжал до цели, не врезаясь, используют готовый стек навигации Nav2.
Nav2 (Navigation 2) — официальный стек автономной навигации ROS 2: он строит карту, определяет положение робота, прокладывает путь к цели и объезжает препятствия.
Зачем готовый стек
Автономная навигация — это годы работы целых команд: алгоритмы SLAM, локализации, планирования. Писать это с нуля для каждого робота безумие. Nav2 даёт проверенную реализацию: вы подключаете свой лидар и одометрию к стандартным топикам, настраиваете параметры под габариты робота — и получаете робота, который сам едет к указанной точке. Это вершина того, ради чего нужен ROS: переиспользование сложнейших компонентов.
Четыре задачи навигации
- Построение карты (SLAM). Робот ездит и из данных лидара строит карту помещения, одновременно отслеживая, где он сам. Отсюда название — Simultaneous Localization And Mapping.
- Локализация. Имея готовую карту, робот определяет, где он на ней сейчас (узел AMCL сравнивает текущий скан лидара с картой).
- Планирование пути. Зная карту, положение и цель, планировщик прокладывает маршрут в обход стен.
- Обход препятствий. Локальный планировщик объезжает то, чего нет на карте — человека, коробку — на ходу.
Карта как сетка занятости
Карта в ROS — это OccupancyGrid: сетка клеток, где каждая помечена «свободно», «занято» или «неизвестно». На ней планировщик и ищет путь.
. . # # # . . . # = стена (занято) . . # . . . . . . = свободно . . # . R . G . R = робот, G = цель . . # . . . . . путь: R -> вверх вокруг стены -> G . . . . . . . .
Глобальный и локальный планировщик
Nav2 использует два планировщика. Глобальный строит маршрут по всей карте от старта до цели — это стратегия. Локальный на каждом шаге смотрит, что прямо вокруг робота сейчас, и корректирует движение — это тактика. Если на пути внезапно встал человек, глобальный план остаётся, а локальный объезжает препятствие и возвращается на маршрут.
Как робот общается с Nav2
Цель навигации задают через действие (action) — ведь это длительная задача с прогрессом и отменой. В RViz есть кнопка «2D Goal Pose»: кликнули на карте — отправили цель. Nav2 принимает её, строит путь и публикует команды в /cmd_vel, которые крутят колёса. На входе Nav2 ждёт /scan, /odom и дерево TF.
Как работает под капотом
Nav2 построен на архитектуре деревьев поведения (behavior trees). Дерево описывает логику «вычисли путь → следуй по нему → если застрял, выполни восстановление → повтори». Каждый узел дерева — отдельный подключаемый плагин: можно заменить планировщик или контроллер, не трогая остальное. Состояние всех компонентов координирует менеджер жизненного цикла, который последовательно активирует узлы при старте. Эта модульность — причина, почему Nav2 подходит и пылесосу, и складскому роботу.
Частые ошибки
- Неверные габариты робота (footprint). Nav2 либо считает узкие проходы непроходимыми, либо ведёт робота впритирку к стенам.
- Плохое дерево TF. Без корректных map/odom/base_link локализация и планирование рассыпаются.
- Путать SLAM и локализацию. SLAM строит карту с нуля; локализация работает на готовой карте.
Итоги
- Nav2 — готовый стек автономной навигации ROS 2.
- SLAM строит карту, AMCL локализует, планировщики прокладывают и корректируют путь.
- Карта — OccupancyGrid; цель задают действием, команды идут в /cmd_vel.
- Внутри — дерево поведения из заменяемых плагинов.