Представьте: вы едете по трассе, и вдруг навигатор говорит, что вы в поле, хотя вы видите асфальт. Или лидар показывает стену там, где её нет, из-за снегопада. Это не баги — это природа сенсоров. Каждый датчик врёт, но по-своему. Задача локализации — не отфильтровать один «правильный» сигнал, а собрать пазл из кучи лжи, противоречий и шума, чтобы получить координаты с точностью до сантиметров. Без этого никакой автопилот не поедет — не сможет понять, где он, и уж тем более — куда ему рулить.
Допустим, вы верите только GPS. В городе небоскребы создают многолучевость — ошибка до 20 метров. Машина едет по встречной полосе. Спасибо, не надо.
Зачем вообще фузия, если есть лидар?
Лидар даёт облако точек — красиво, дорого, но тоже не идеально. Снег, дождь, пыль — это шум. Отражающие поверхности (зеркала, лужи) — призрачные точки. А ещё лидар не отвечает на вопрос «где я?», если у него нет карты. Нужно сопоставить текущее облако с предзагруженной картой — а это уже задача ICP или NDT. Но если машина уже сбилась на пару метров, ICP упрётся в локальный минимум и поедет не туда. Поэтому без IMU и колесной одометрии никуда.
Кухня: как сенсоры договариваются между собой
Классика инженерной мысли — расширенный фильтр Калмана (EKF). Он предсказывает состояние по модели движения, а потом корректирует его измерениями. У каждого сенсора — своя матрица ковариации: насколько я доверяю лидару против одометрии. Если GPS резко прыгнул — EKF его почти проигнорирует, если ковариация GPS заранее поставлена большой. Это разумно, но дьявол в деталях.
Второй популярный подход — графы факторов (Factor Graphs). Вместо последовательного уточнения строится граф из переменных (позы) и факторов (измерения, одометрия, loop closures). Потом решается задача оптимизации — минимизация суммы ошибок. Этот метод даёт более точную траекторию, особенно при наличии повторных проходов по одним и тем же местам (loop closure). Его используют Waymo и Cruise.
1 Калибровка — мать порядка
Перед тем как сливать данные, надо понять, где физически расположены сенсоры относительно друг друга. Малейший сдвиг в 1 см при переводе точки из кадров лидара в кадр камеры даёт ошибку в метрах на дистанции 50 м. Используйте extrinsic calibration (target-based или online, как в Kalibr). Без этого любая фузия — гадание.
2 Синхронизация времени — не опция
Сенсоры выдают данные с разными тактами: LiDAR — 10 Гц, камера — 30 Гц, IMU — 100 Гц. Если у вас нет аппаратной синхронизации (PTP или GPS PPS), вам придется интерполировать. Ошибка временной метки на 50 мс при скорости 10 м/с даст смещение 0.5 метра. Не смертельно, но для точной локализации — критично.
3 Отбраковка выбросов (outlier rejection)
Фильтр Калмана предполагает, что шум гауссов, но на практике бывают битые измерения: отражение от стекла даёт точку далеко в стороне. Нужен детектор выбросов. Часто используют тест по хи-квадрат на инновации (Mahalanobis distance). Если измерение слишком далеко от предсказания — оно игнорируется. В графовых методах это задаётся robust cost function (Huber, Cauchy), которые автоматически понижают вес выбросов.
4 Ассоциация данных — главная боль
Допустим, у нас есть карта (память) и новое сканирование лидара. Надо сопоставить точки. Если на карте забор, а в новом скане забор сместился из-за ошибки локализации — алгоритм может ошибочно привязаться к другой стене. Классические методы: ICP (итеративный, склонен к локальным минимумам), NDT (более устойчив), а в последние годы — нейросетевые дескрипторы (PointNetLK, DCP). Но нейронки требуют качественных данных и большого объёма — тут и пригождаются данные из AR-игр, которые уже наполнили карты городов семантической информацией.
5 Loops и привязка к карте
Когда машина проезжает по перекрёстку второй раз, появляется возможность «замкнуть петлю» — сильно уменьшить накопленный дрейф. Хороший детектор loop closure (например, ScanContext или OverlapNet) позволяет найти соответствие даже при изменении времени суток. После этого запускается глобальная оптимизация (graph SLAM или Bundle Adjustment).
Реальный кейс: ЭвоКарго и городская доставка
Возьмём роботов-доставщиков ЭвоКарго. Они работают в плотной городской среде: узкие тротуары, статические препятствия, люди. GPS там часто банят небоскрёбы. Решение — мультисенсорная локализация: колёсная одометрия + IMU + лидар + камера. Но ключевая фишка — ассоциация с картой, построенной заранее с помощью SLAM. Новые сенсорные данные сравниваются не с облаком точек всей карты, а с локальным субмапом. Это снижает вычислительную нагрузку и позволяет работать на бортовом Jetson. Интересно, что для повышения точности они используют облегчённые нейросети детекции — это помогает отсеивать динамические объекты (пешеходы, машины) и не учитывать их при локализации.
| Сенсор | Что даёт | Что мешает |
|---|---|---|
| LiDAR | Точная геометрия до 100 м | Осадки, зеркальные поверхности |
| Камера | Семантика, разметка | Зависимость от освещения, искажения |
| IMU | Высокочастотное движение | Дрейф со временем, накопление ошибки |
| Wheel odometry | Скорость и пройденное расстояние | Пробуксовка, неровности дороги |
| GPS | Абсолютная привязка | Многолучевость, помехи, городской каньон |
Типичные ошибки, которые взломают вашу локализацию
Встречал команды, которые полагались только на IMU и лидар — и на третий километр получали ошибку в 3 метра из-за дрейфа гироскопа. Да, IMU дорогие (FOG или RLG) стоят как машина, но дешёвые MEMS не держат больше минуты без коррекции. Не верьте в «магию» фильтра, если у вас нет хотя бы двух независимых источников абсолютной привязки (например, GPS + loop closure).
Другая грабля — игнорирование калибровки временем. Если IMU выдает данные со сдвигом 10 мс относительно лидара, при резком повороте (рад/с) возникнет рассогласование, которое фильтр будет пытаться компенсировать, но в итоге координаты поплывут. В проектах, где время синхронизировано по PTP, точность локализации возрастает на 20-30% — не пренебрегайте этим.
Будущее: вероятности уступают место энд-ту-энду?
В 2026 году уже есть попытки обучить нейросеть напрямую предсказывать поправку позы по сырым данным сенсоров — без явной ассоциации точек. Например, системы штрафования с ИИ показывают, что камеры могут быть единственным источником для локализации, если есть хорошая геопривязка. Но пока эта история работает только в хорошо освещенных и размеченных местах. Для реального беспилотника рано списывать EKF и графы — они дают математические гарантии ковариаций и устойчивость к выбросам, которую чистый ML не всегда обеспечивает.
Как это часто бывает в инженерии, прорыв происходит на стыке: вероятностная основа + обученный детектор выбросов + семантическое понимание сцены. Пример из практики — роботы-доставщики, которые учатся на данных из AR-игр, уже умеют предсказывать, где находятся бордюры и столбы, и отбрасывают ложные совпадения до того, как они попали в фильтр.
Как не сойти с ума, настраивая локализацию
Если вы разработчик беспилотной системы — запомните три правила:
- Никогда не делите ковариацию сенсоров на глаз. Вычисляйте её экспериментально: записываете статичную сцену, смотрите дисперсию измерений. Отклонение в движении может отличаться, но это лучше, чем гадание.
- Обязательно тестируйте отказ сенсора: заткните лидар тряпкой, выдерните разъём IMU — машина должна сохранять локализацию за счёт оставшихся (хотя бы на несколько секунд).
- Используйте встроенную диагностику: публикуйте topic с ковариациями и статусом каждого сенсора. Когда в логе поплывёт оценка, вы быстро найдёте виноватого.
Кстати, об отказоустойчивости — команды, которые внедряют reinforcement learning для координации множества беспилотников, отмечают, что локализация на RL-политиках не нуждается в точной карте — агенты обучаются держать дистанцию и ехать по полосе, опираясь на визуальные ориентиры. Но это уже другая история, для другого уровня автономности.
Какой вывод? Проблема неопределенности не решается одним сенсором или одним алгоритмом. Это постоянный trade-off: больше данных — больше шума, меньше данных — больше ошибок. Инженерный подход — не бояться неопределённости, а измерять её, моделировать и использовать. Потому что если вы знаете, насколько вы не уверены — вы на шаг ближе к тому, чтобы эту неуверенность уменьшить. Именно этим и занимается локализация: превращает «я не знаю где я» в «я знаю, что с вероятностью 95% я нахожусь в этом круге диаметром 10 см». И для этого стоит повозиться с EKF, графами и калибровкой.