Понятный робот: модель мобильной платформы

Вводим сквозной пример — простого робота, на котором будем разбирать все темы курса.

Дифференциальный привод (differential drive) — схема движения, где у робота два независимо управляемых колеса: разная скорость колёс задаёт поворот, одинаковая — прямое движение.

Наш робот

Чтобы темы курса не висели в воздухе, договоримся об одном понятном роботе и будем возвращаться к нему. Это небольшая мобильная платформа: квадратное шасси, два ведущих колеса по бокам и одно опорное ролик-колесо сзади. На борту лидар (крутится наверху, измеряет расстояния по кругу), камера спереди, IMU (датчик ускорений и поворотов) и компьютер Raspberry Pi. Задача робота — ездить по комнате, строить карту и добираться до заданной точки, объезжая препятствия.

Из каких узлов он состоит

УзелЗадачаТопик
lidar_driverчитает лидарпубликует /scan
camera_driverчитает камерупубликует /image
odometryсчитает перемещение по колёсампубликует /odom
localizationопределяет позу на картепубликует /pose
plannerстроит маршрут к целипубликует /cmd_vel
base_controllerкрутит моторы по cmd_velподписан на /cmd_vel

Главные топики

Через всю систему проходят несколько ключевых каналов данных. Их имена — фактический стандарт в ROS, вы встретите их почти в каждом проекте:

  • /scan — измерения лидара (тип сообщения LaserScan).
  • /odom — одометрия: оценка положения по вращению колёс.
  • /cmd_vel — команда скорости: «ехать вперёд столько-то, поворачивать столько-то».
  • /tf — преобразования систем координат (об этом будет целый раздел).

Как данные текут по системе

 ВОСПРИЯТИЕ            ПЛАНИРОВАНИЕ           ДЕЙСТВИЕ
 +-----------+        +-----------+        +----------------+
 | lidar     |--/scan->| planner  |--/cmd_vel->| base_controller|--> моторы
 | odometry  |--/odom->|          |        +----------------+
 | camera    |--/image->|         |
 +-----------+        +-----------+

Это и есть базовая архитектура любого автономного робота: восприятие → планирование → действие. Датчики дают картину мира, планировщик решает, куда ехать, контроллер исполняет. К этой схеме мы будем возвращаться весь курс.

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

Команда /cmd_vel — это сообщение типа Twist: линейная скорость по оси X (вперёд/назад) и угловая скорость по оси Z (поворот). base_controller переводит эти две величины в обороты левого и правого колеса по формулам дифференциального привода. Так абстрактное «поверни налево» превращается в конкретные «левое колесо медленнее, правое быстрее».

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

  • Смешивать восприятие и действие в одном узле. Разделение слоёв облегчает замену и отладку.
  • Игнорировать стандартные имена топиков. Готовые пакеты (Nav2, SLAM) ждут именно /scan, /odom, /cmd_vel.
  • Путать /odom и реальную позу. Одометрия накапливает ошибку; точную позу даёт локализация, а не голая одометрия.

Итоги

  • Наш сквозной пример — мобильная платформа с дифференциальным приводом.
  • Она состоит из узлов восприятия, планирования и действия.
  • Ключевые топики: /scan, /odom, /cmd_vel, /tf.
  • Архитектура «восприятие → планирование → действие» — основа автономии.
Проверьте себя
1. Что такое дифференциальный привод?
AПривод с одним колесом
BСхема с двумя независимо управляемыми колёсами, поворот за счёт разной скорости
CГусеничная платформа
DМанипулятор с шестью осями
2. Что несёт топик /cmd_vel?
AИзображение с камеры
BКоманду скорости (линейную и угловую) для робота
CКарту помещения
DЗаряд батареи
3. Какова базовая архитектура автономного робота?
AХранение → сжатие → передача
BВосприятие → планирование → действие
CКомпиляция → линковка → запуск
DВход → master → выход