Понятный робот: модель мобильной платформы
Вводим сквозной пример — простого робота, на котором будем разбирать все темы курса.
Дифференциальный привод (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.
- Архитектура «восприятие → планирование → действие» — основа автономии.