Робототехника
SLAM
Mars Perseverance проехал 25 км по Марсу без GPS. Waymo такси проехало миллион километров по дорогам США. iPhone знает свою позицию в 3D в любой комнате для AR. Все они решают одну задачу: SLAM. Одновременно строить карту и понимать где ты находишься - без внешних ориентиров. Это одна из ключевых задач робототехники и дополненной реальности.
- **Mars Perseverance** - Visual SLAM на стереокамерах (Navcam); 25 км по Марсу без GPS; карта строится и уточняется при каждой поездке; ground team верифицирует маршрут по downlinked картам
- **Apple ARKit / Google ARCore** - Visual-Inertial SLAM (камера + IMU); 60fps на смартфоне; используется в 1B+ устройствах для AR приложений; ORB features + EKF fusion
- **Waymo Driver** - LiDAR SLAM для финальной локализации; HD-карты как prior; <10cm точность в mapped zones; Boston Dynamics Spot использует Visual SLAM для навигации в помещениях
Проблема SLAM
Робот Mars Perseverance едет по поверхности Марса. GPS нет. Он должен одновременно: (1) определять где находится, (2) строить карту местности. Проблема: для локализации нужна карта, для построения карты нужна локализация. Это и есть SLAM - chicken-and-egg проблема робототехники.
**SLAM** (Simultaneous Localization And Mapping) - совместная оценка позы робота x_{1:t} и карты m при наблюдениях z_{1:t} и управляющих воздействиях u_{1:t}. Байесовская формулировка: P(x_{1:t}, m | z_{1:t}, u_{1:t}). Два подхода: **filter-based** (Extended Kalman Filter, Particle Filter) и **graph-based** (современный стандарт).
В чём главная сложность SLAM по сравнению с чистой локализацией (известная карта) или чистым картографированием (известная поза)?
Graph-SLAM
Современный стандарт SLAM - graph-based подход. Строится граф: узлы = позы робота в моменты t=1,2,..., рёбра = ограничения из одометрии и наблюдений. Задача: найти конфигурацию узлов, минимизирующую нарушение ограничений. Это нелинейная задача наименьших квадратов.
**Factor graph**: pose nodes + factor nodes (ограничения). Оптимизация через **g2o** или **GTSAM** (Georgia Tech Smoothing and Mapping): Gauss-Newton или Levenberg-Marquardt итерации. **Loop closure** - обнаружение что робот вернулся в посещённое место: глобально корректирует накопленный дрейф. Ключевой момент SLAM.
Что такое loop closure в Graph-SLAM и почему это критически важно?
Visual SLAM
Apple ARKit, Google ARCore, Meta Quest - все используют Visual SLAM для отслеживания позиции устройства в пространстве используя только камеру. Никакого LiDAR, GPS, внешних маркеров. Смартфон знает где он находится в 3D-пространстве комнаты.
**Visual SLAM** (V-SLAM): ORB-SLAM3 - современный стандарт с открытым кодом. Шаги: (1) feature extraction (ORB keypoints), (2) feature matching между кадрами, (3) camera pose estimation (PnP), (4) local BA (Bundle Adjustment), (5) loop detection (DBoW3 bag-of-words), (6) global BA при loop closure.
Что такое Bundle Adjustment в Visual SLAM?
LiDAR SLAM
Waymo, Tesla, Cruise - все автономные автомобили используют LiDAR для SLAM. LiDAR даёт точное облако точек (Point Cloud) до 360 метров. Главное преимущество перед Visual SLAM: работает в темноте, при дожде и снеге. Точность локализации Waymo: <10 см в знакомой зоне.
**LiDAR SLAM** алгоритмы: **LeGO-LOAM** (Lightweight Ground-Optimized LiDAR Odometry And Mapping) - разделяет землю и объекты, эффективен. **LOAM** (Lidar Odometry And Mapping) - классика от Zhang Ji. **LIO-SAM** - объединяет LiDAR + IMU. Scan matching: **ICP** (Iterative Closest Point) или **NDT** (Normal Distributions Transform).
SLAM строит идеально точную карту если датчики достаточно хорошие
Любые датчики имеют шум. SLAM - это вероятностная оценка с неопределённостью, которая растёт без loop closure. Waymo достигает <10см точности в знакомых зонах благодаря HD-картам заранее отснятых районов + реальному SLAM для уточнения. В незнакомых местах точность падает до 50-100см.
SLAM оценивает P(pose | observations) - вероятностное распределение, не точку. Без ограничений (loop closure, GPS) неопределённость растёт O(sqrt(t)). Поэтому автономные автомобили используют HD-карты как prior: SLAM только локализует в предзаписанной карте (гибридный подход).
Почему LiDAR SLAM используется в автономных автомобилях вместо более дешёвого Visual SLAM?
Ключевые идеи
- **SLAM** - совместная оценка позы и карты; chicken-and-egg проблема; Байесовская формулировка P(x_{1:t}, m | z_{1:t}, u_{1:t})
- **Graph-SLAM** - граф поз + ограничения; loop closure устраняет накопленный дрейф; GTSAM/g2o для оптимизации Levenberg-Marquardt
- **Visual SLAM** - ORB-SLAM3: features + matching + Bundle Adjustment + DBoW3 loop detection; ARKit/ARCore на смартфонах
- **LiDAR SLAM** - ICP/NDT scan matching; точнее в тёмных/плохих условиях; стандарт для автономных автомобилей + HD-карты
Связанные темы
SLAM объединяет вероятностные методы, компьютерное зрение и оптимизацию:
- Path Planning — Карта из SLAM - входные данные для планировщика пути робота
- Фильтр Калмана — EKF-SLAM - исторически первый подход; Extended Kalman Filter для нелинейных систем
Вопросы для размышления
- Perseverance едет по Марсу где нет заранее созданных карт. Как loop closure работает если робот никогда не возвращается в точно то же место - как распознать знакомое место по новому ракурсу?
- Waymo использует HD-карты + SLAM для локализации. Что происходит если дорогу перекрыли на ремонт и HD-карта устарела? Как система обнаруживает расхождение и что делает?
- ORB-SLAM3 работает на 30fps на CPU. Для AR на смартфоне нужно 60fps при меньшем энергопотреблении. Какие оптимизации Apple применяет в ARKit чтобы достичь этого на A-series Neural Engine?