Навигация 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.
  • Внутри — дерево поведения из заменяемых плагинов.
Проверьте себя
1. Что делает Nav2?
AКомпилирует пакеты
BОбеспечивает автономную навигацию: карту, локализацию, планирование, обход
CРисует граф узлов
DОписывает робота в URDF
2. Что такое SLAM?
AТип мотора
BОдновременное построение карты и локализация на ней
CФормат сообщения
DКоманда сборки
3. В чём разница глобального и локального планировщиков?
AГлобальный быстрее
BГлобальный строит маршрут по всей карте, локальный объезжает препятствия на ходу
CОни одинаковы
DЛокальный строит карту