SLAM: Полное инженерное руководство по автономной навигации беспилотных систем
Введение За последние двадцать лет технология SLAM (Simultaneous Localization and Mapping) стала одной из ключевых в робототехнике, автономном транспорте и беспилотной авиации. Сегодня она применяется в автономных автомобилях, промышленных роботах, складских системах, сервисных роботах, космических аппаратах и современных БПЛА. Практически каждый автономный аппарат сталкивается с одной фундаментальной проблемой: определением собственного положения в пространстве. Пока работает спутниковая навигация (GPS, ГЛОНАСС, Galileo, BeiDou), задача кажется простой. Однако в помещениях, тоннелях, густой городской застройке, лесу или при намеренном подавлении спутниковых сигналов эта возможность исчезает. Тогда единственным источником информации остаются собственные датчики аппарата. Именно здесь начинается область применения SLAM.
Администратор

Содержание
- Часть 1. Почему миру понадобился SLAM
- Часть 2. Архитектура SLAM: как дрон понимает, где он находится
- Часть 3. Feature Detection — как беспилотник выбирает ориентиры в окружающем мире
- Часть 4. Дескрипторы признаков: как компьютер «узнаёт» один и тот же объект спустя тысячи кадров
- Часть 5. Feature Matching — как беспилотник понимает, что видит тот же самый мир
- Часть 6. Visual Odometry — как беспилотник вычисляет собственное движение
- Часть 7. Bundle Adjustment — алгоритм, который превращает хаос измерений в точную карту
- Часть 8. Loop Closure — как беспилотник понимает, что уже был здесь раньше
- Часть 9. Visual-Inertial SLAM (VIO) — как камера и IMU вместе удерживают дрон без GPS
- Часть 10. LiDAR SLAM — когда беспилотник «видит» мир лазером вместо камеры
- Часть 11. Аппаратная архитектура автономного БПЛА — какое оборудование действительно необходимо для полета без GPS
- Часть 12. От камеры до моторов. Как данные SLAM управляют беспилотником
- Часть 13. Создание собственного автономного комплекса: от эксперимента до промышленного прототипа
- Часть 14. Сравнение современных SLAM-систем для БПЛА: ORB-SLAM3, VINS-Fusion, OpenVINS, FAST-LIO2 и LIO-SAM
- Часть 15. Навигация без GPS: как беспилотники определяют положение при отсутствии спутниковой навигации
- Часть 16. Искусственный интеллект в SLAM: как нейросети меняют автономную навигацию
- Часть 17. Практический проект: создание GPS-denied дрона с Visual-Inertial SLAM
- Часть 18. EKF и State Estimation — настоящий «мозг» автономного дрона
- Часть 19. Удержание позиции на высоте 200 метров без GPS: практическая инженерия
- Часть 20. Полная архитектура автономного БПЛА уровня Enterprise
Часть 1. Почему миру понадобился SLAM
«Беспилотник без навигации — это всего лишь дистанционно управляемая модель. Автономным он становится только тогда, когда способен ответить на вопрос: "Где я нахожусь?" без помощи человека.»
Введение
За последние двадцать лет технология SLAM (Simultaneous Localization and Mapping) стала одной из ключевых в робототехнике, автономном транспорте и беспилотной авиации. Сегодня она применяется в автономных автомобилях, промышленных роботах, складских системах, сервисных роботах, космических аппаратах и современных БПЛА.
Практически каждый автономный аппарат сталкивается с одной фундаментальной проблемой: определением собственного положения в пространстве.
Пока работает спутниковая навигация (GPS, ГЛОНАСС, Galileo, BeiDou), задача кажется простой. Однако в помещениях, тоннелях, густой городской застройке, лесу или при намеренном подавлении спутниковых сигналов эта возможность исчезает. Тогда единственным источником информации остаются собственные датчики аппарата.
Именно здесь начинается область применения SLAM.
Глава 1. Почему GPS не является универсальным решением
Существует распространенное мнение, что современный беспилотник постоянно определяет свои координаты по GPS. На практике это верно лишь частично.
Глобальные навигационные спутниковые системы обладают рядом фундаментальных ограничений.
Основные недостатки GNSS
- зависимость от спутникового сигнала;
- низкая мощность принимаемого сигнала;
- чувствительность к помехам;
- возможность спуфинга (подмены координат);
- ухудшение точности в городской среде;
- невозможность работы в помещениях.
Для гражданских приемников типичная точность составляет 1–3 м, а при неблагоприятных условиях ошибка может значительно увеличиваться.
Для автономного полета этого часто недостаточно.
Представим беспилотник, которому необходимо зависнуть возле линии электропередачи для инспекции изолятора. Ошибка в несколько метров уже может привести к столкновению.
Почему нельзя использовать только инерциальную систему
Следующая идея кажется очевидной:
«Если спутники недоступны, достаточно установить хороший гироскоп.»
К сожалению, физика работает иначе.
Любая инерциальная система содержит ошибки измерения.
Даже самый качественный MEMS-гироскоп имеет:
- шум;
- температурный дрейф;
- смещение нуля (Bias);
- случайные ошибки.
На каждом измерении ошибка крайне мала.
Но проблема заключается в том, что инерциальная навигация основана на интегрировании измерений.
Если датчик ошибся совсем немного сегодня, то завтра эта ошибка станет больше.
Через минуту — еще больше.
Через несколько минут она превращается в десятки метров.
Именно поэтому говорят:
Инерциальная навигация обладает неограниченно растущей ошибкой.
Простой пример накопления ошибки
Представим идеальный эксперимент.
Беспилотник неподвижно висит в воздухе.
На самом деле его скорость равна:
0 м/с
Однако акселерометр измерил небольшую погрешность:
0.02 м/с²
Для человека эта величина кажется ничтожной.
Но компьютер начинает интегрировать ускорение.
Через несколько секунд появляется ложная скорость.
Затем скорость снова интегрируется.
Возникает ложное перемещение.
В итоге навигационная система начинает считать, что аппарат улетел на несколько метров, хотя он все это время оставался неподвижным.
Это явление называется инерциальным дрейфом (Inertial Drift).
Почему дорогие самолеты могут летать без GPS?
Возникает закономерный вопрос.
Если инерциальная система настолько неточна, каким образом авиалайнеры или ракеты могут использовать ее часами?
Ответ заключается в классе используемых датчиков.
В массовых БПЛА применяются MEMS IMU, стоимость которых составляет десятки или сотни долларов.
В авиации используются:
- волоконно-оптические гироскопы (FOG);
- кольцевые лазерные гироскопы (RLG);
- высокоточные кварцевые акселерометры.
Такие системы обладают дрейфом в десятки и сотни раз меньшим, но стоят на порядки дороже и значительно тяжелее.
Для большинства беспилотников подобное решение экономически и конструктивно нецелесообразно.
Логическая ловушка навигации
Попробуем сформулировать задачу иначе.
Чтобы построить карту местности, необходимо знать собственное положение.
Но чтобы определить собственное положение, нужна карта.
Получается замкнутый круг.
Именно этот парадокс долгое время считался одной из центральных проблем мобильной робототехники.
SLAM решает его, одновременно уточняя и карту окружающей среды, и положение самого аппарата. По мере движения новые наблюдения позволяют корректировать как модель мира, так и собственные координаты, уменьшая накопленные ошибки.
Почему именно камеры стали главным датчиком
Казалось бы, лидар выглядит более точным инструментом.
Однако камеры обладают рядом преимуществ:
- очень высокая информативность;
- небольшая масса;
- низкая стоимость;
- отсутствие подвижных частей;
- возможность работы на больших дистанциях;
- возможность применения алгоритмов компьютерного зрения.
Современная камера разрешением 1920×1080 содержит более двух миллионов пикселей в каждом кадре. Каждый кадр — это огромный объем информации о структуре окружающей среды.
Именно поэтому большинство современных систем автономной навигации строится вокруг визуальной информации, а инерциальные датчики используются для повышения устойчивости и точности.
Что такое SLAM?
SLAM (Simultaneous Localization and Mapping) — это совокупность алгоритмов, которые позволяют роботу или беспилотнику:
- строить карту окружающей среды;
- одновременно определять собственное положение на этой карте;
- непрерывно уточнять и карту, и координаты по мере движения.
Ключевое слово здесь — одновременно.
Карта не является заранее известной, а положение аппарата не считается заранее известным. Оба результата появляются в процессе совместной оценки.
Именно это делает SLAM одной из самых сложных и одновременно наиболее важных технологий современной автономной робототехники.
Где SLAM применяется сегодня
Сегодня SLAM лежит в основе множества реальных систем:
- автономные инспекционные дроны;
- складские мобильные роботы;
- автономные автомобили;
- строительные и горнодобывающие машины;
- сервисные роботы;
- устройства дополненной реальности;
- исследовательские планетоходы.
В беспилотной авиации SLAM особенно востребован там, где использование GNSS ограничено или невозможно: в помещениях, под мостами, в тоннелях, в густой городской застройке и при работе в условиях радиоэлектронных помех.
Литература и официальные ресурсы
Базовые статьи
- Durrant-Whyte, H., Bailey, T. Simultaneous Localization and Mapping (SLAM): Part I & II — классический обзор технологии.
- Cadena, C. et al. Past, Present, and Future of Simultaneous Localization and Mapping (IEEE Transactions on Robotics, 2016) — один из наиболее авторитетных современных обзоров.
Полезные проекты
- OpenCV — библиотека компьютерного зрения.
- ORB-SLAM3 — одна из самых известных открытых реализаций Visual SLAM.
- OpenVINS — открытая реализация Visual-Inertial Navigation System.
В следующей части мы начнем разбирать внутреннюю архитектуру SLAM буквально "по винтикам", начиная с датчиков и потока данных внутри системы.
Часть 2. Архитектура SLAM: как дрон понимает, где он находится
«SLAM — это не один алгоритм. Это конвейер из десятков взаимосвязанных алгоритмов, работающих одновременно и обрабатывающих тысячи операций в секунду.»
В предыдущей части мы выяснили, почему GPS и инерциальной навигации недостаточно для автономного полета. Теперь пришло время заглянуть внутрь самой системы.
Сегодня большинство начинающих инженеров представляет SLAM как «какую-то программу, которая смотрит в камеру». На самом деле современный Visual-Inertial SLAM — это распределенная система реального времени, состоящая из нескольких независимых потоков вычислений.
Именно архитектура определяет, сможет ли беспилотник зависнуть в одной точке, вернуться по пройденному маршруту или продолжить полет после полной потери GPS.
Архитектура современного SLAM
Практически любой современный SLAM состоит из нескольких подсистем.
Датчики
│
┌──────────────┼──────────────┐
│ │ │
Камера IMU Лидар
│ │ │
└──────────────┼──────────────┘
│
Синхронизация времени
│
▼
Front-End (Одометрия)
│
▼
Local Mapping (Локальная карта)
│
▼
Loop Closure (Поиск совпадений)
│
▼
Graph Optimization (Оптимизация)
│
▼
Итоговая карта и координаты
Эта схема кажется простой, однако за каждым блоком скрываются тысячи строк кода и сложная математика.
Front-End — "глаза" системы
Front-End — самая быстро работающая часть SLAM.
Его задача — ответить на вопрос:
Что изменилось между двумя соседними кадрами?
Он работает с частотой камеры:
- 30 FPS
- 60 FPS
- 90 FPS
- иногда 120 FPS
Каждые 10–30 миллисекунд он должен:
- получить изображение;
- убрать оптические искажения;
- найти ключевые точки;
- сопоставить их с предыдущим кадром;
- вычислить перемещение камеры.
Если Front-End не успевает работать в реальном времени, весь SLAM перестает быть пригодным для полета.
Back-End — "мозг" системы
Back-End не занимается обработкой каждого кадра.
Его задача намного сложнее.
Он отвечает за:
- уменьшение накопленной ошибки;
- оптимизацию траектории;
- корректировку карты;
- объединение всех измерений.
Именно здесь работают такие библиотеки, как:
- g2o
- GTSAM
- Ceres Solver
Именно они делают SLAM точным.
Почему нужен отдельный поток IMU
Многие думают:
Камера снимает 60 кадров.
Значит этого достаточно.
На практике — нет.
Представим:
Камера снимает
60 кадров/сек.
Между кадрами проходит
16 миллисекунд.
Для человека это мгновение.
Для квадрокоптера — огромный промежуток времени.
За 16 миллисекунд аппарат уже успевает:
- накрениться;
- изменить скорость;
- начать поворот;
- получить порыв ветра.
Если ждать следующего кадра, управление станет нестабильным.
Поэтому IMU работает отдельно.
Типичная частота:
200–1000 Гц.
Промышленные системы:
2000–8000 Гц.
Именно IMU сообщает контроллеру:
«Дрон уже начал вращаться.»
Еще до того, как камера это увидит.
Почему нужна синхронизация времени
Представьте:
- Камера сделала снимок в 12:00:00.000
- А IMU записал данные 12:00:00.012
- Разница всего 12 миллисекунд.
- Но при скорости 20 м/с
- аппарат уже сместился почти на 24 сантиметра.
Получается, что камера и гироскоп "видели" разные положения. Это приводит к ошибкам.
Поэтому профессиональные системы синхронизируют датчики с точностью до микросекунд.
Почему дешевый USB не подходит
Очень распространенная ошибка начинающих разработчиков.
Берут:
- USB-камеру;
- USB-IMU.
Подключают их к Raspberry Pi. И пытаются собрать SLAM. Результат почти всегда неудовлетворительный. Почему? USB не гарантирует постоянную задержку.
Например:
Кадр №1: 18 мс
Кадр №2: 25 мс
Кадр №3: 31 мс
Кадр №4: 16 мс
Такой "джиттер" разрушает точность системы. Именно поэтому профессиональные камеры имеют аппаратную синхронизацию.
Что происходит после получения кадра
Первый этап обработки вовсе не поиск объектов.
Сначала выполняется калибровка изображения.
Камера никогда не снимает идеально.
Объектив создает:
- бочкообразную дисторсию;
- подушкообразную дисторсию;
- хроматические аберрации.
Поэтому каждый кадр проходит этап Undistortion. После него прямые линии снова становятся прямыми.
Почему калибровка так важна
Представим стену здания. В реальности она идеально ровная. Но объектив сделал ее слегка изогнутой. Если использовать такое изображение напрямую, алгоритм решит, что камера повернулась. Ошибка будет накапливаться. Поэтому любая серьезная система сначала проходит процедуру калибровки.
Самая популярная библиотека:
- OpenCV Camera Calibration
Калибровка камеры
Во время калибровки определяется несколько параметров.
Внутренние параметры
Матрица камеры:
fx
fy
cx
cy
где:
fx - Фокусное расстояние по X.
fy - Фокусное расстояние по Y.
cx - Координата центра изображения.
cy - Координата центра изображения.
Эти четыре числа знает практически каждый алгоритм SLAM. Без них невозможно вычислить положение камеры.
Коэффициенты дисторсии
Кроме матрицы вычисляются коэффициенты:
k1
k2
k3
p1
p2
Они описывают, насколько объектив искажает изображение.
После этого каждый кадр автоматически исправляется.
Почему объектив важнее мегапикселей
Начинающие инженеры часто ищут камеры с максимальным разрешением.
Но для SLAM гораздо важнее:
- глобальный затвор (Global Shutter);
- отсутствие смаза при движении;
- стабильная экспозиция;
- качественная оптика;
- высокая частота кадров.
Например, камера с разрешением 1,6 Мп и глобальным затвором часто обеспечивает более надежную навигацию, чем 12-Мп камера с роллинг-затвором.
Rolling Shutter — главный враг Visual SLAM
Большинство бытовых камер использует Rolling Shutter.
В этом режиме строки матрицы считываются последовательно.
Во время быстрого движения изображение "скручивается":
Реальный столб
│
Rolling Shutter
/
Для человека это почти незаметно. Для алгоритмов SLAM — серьезная проблема.
Поэтому профессиональные системы предпочитают камеры с Global Shutter, где весь кадр фиксируется одновременно.
Камеры, которые чаще всего используют в робототехнике
Бюджетный уровень
- Arducam Global Shutter Camera
Подходит для экспериментов с Raspberry Pi и Jetson.
Средний класс
- Luxonis OAK-D Lite
Особенности:
- стереокамера;
- встроенный IMU;
- аппаратный ускоритель Myriad X;
- поддержка нейросетей.
Профессиональный уровень
- Stereolabs ZED X Mini
Используется на автономных роботах и тяжелых БПЛА.
Почему архитектура SLAM напоминает человеческое восприятие
Интересно, что современные системы во многом повторяют работу человеческого мозга.
- Глаза (камеры) получают изображение.
- Вестибулярный аппарат (IMU) сообщает об ускорениях и поворотах.
- Кратковременная память (Front-End) анализирует последние изменения.
- Долговременная память (Back-End и карта) хранит накопленную модель окружающего мира.
- Механизм узнавания (Loop Closure) позволяет понять: «Это место я уже видел».
Именно благодаря сочетанию этих подсистем робот постепенно формирует устойчивое представление о мире, а не просто обрабатывает отдельные кадры.
Литература и ресурсы
- OpenCV Calib3D Documentation
- Kalibr Calibration Toolkit — один из наиболее распространенных инструментов для совместной калибровки камер и IMU.
- ROS 2 Documentation — основная программная среда для современных робототехнических систем, в которой интегрируется большинство SLAM-решений.
Примечание автора. В следующих главах имеет смысл постепенно добавлять собственные схемы, диаграммы потоков данных и иллюстрации работы алгоритмов. Это сделает руководство не просто текстом, а полноценным техническим пособием.
Часть 3. Feature Detection — как беспилотник выбирает ориентиры в окружающем мире
«Для человека дерево — это дерево. Для алгоритма SLAM дерево — это набор устойчивых геометрических признаков, которые можно обнаружить снова через секунду, минуту или километр полета.»
Самое большое заблуждение о SLAM
Большинство людей думает, что алгоритм анализирует всё изображение целиком.
На самом деле это не так.
Представьте обычный кадр Full HD.
Разрешение:
1920 × 1080
Это более 2 миллионов пикселей.
Если сравнивать каждый пиксель каждого кадра с предыдущим, даже современные процессоры не смогут выполнять вычисления в реальном времени.
Поэтому SLAM делает совсем иначе.
Он задает вопрос:
Какие точки изображения являются наиболее информативными?
Именно они становятся ориентирами.
Что такое Feature?
Feature (ключевая точка, особенность, ориентир) — это участок изображения, который:
- легко обнаружить;
- легко найти повторно;
- трудно спутать с другим объектом.
Именно такие точки становятся "маяками" для навигации.
Какие точки плохие?
Рассмотрим несколько примеров.
Однородная поверхность
██████████████████
██████████████████
██████████████████
██████████████████
Например:
- белая стена;
- голубое небо;
- снег;
- вода.
Все пиксели одинаковые.
Алгоритм не понимает, куда произошло смещение.
Прямая линия
──────────────
──────────────
──────────────
Например:
край крыши.
Если изображение сдвинуть вдоль линии, определить величину смещения практически невозможно.
Это называется проблемой апертуры (Aperture Problem).
Лучший ориентир — угол
Рассмотрим такой объект.
██████
█
█
█
Теперь всё иначе.
Если угол сместился:
- вправо;
- вверх;
- вниз;
- влево,
его положение определяется однозначно.
Именно поэтому большинство алгоритмов ищет именно углы.
Почему окно дома лучше дерева?
Представим два объекта.
Первый:
- дерево.
Второй:
- окно здания.
Дерево постоянно меняется:
- ветер;
- листья;
- тени;
- снег;
- дождь.
Окно:
- всегда одинаковое;
- имеет контраст;
- содержит множество углов.
Поэтому городская среда значительно удобнее для Visual SLAM.
Какие признаки ищет алгоритм?
Современные алгоритмы предпочитают:
✔ углы
✔ пересечения линий
✔ текстуры
✔ резкие переходы яркости
✔ дорожную разметку
✔ кирпичную кладку
✔ края дорожных знаков
✔ болты
✔ трещины
✔ вентиляционные решетки
✔ выступающие элементы конструкции
Какие признаки практически бесполезны?
Плохо подходят:
❌ облака
❌ вода
❌ однотонная трава
❌ песок
❌ снег
❌ туман
❌ стекло
❌ зеркала
Как компьютер понимает, что перед ним угол?
Вот здесь начинается настоящая математика.
Представим маленькое окно изображения:
□□□□□
□□■□□
□■■■□
□□■□□
□□□□□
Теперь попробуем сдвинуть его.
Если изображение почти не изменилось — это плохая точка.
Если изменилось сильно — это хороший ориентир.
Именно эта идея лежит в основе большинства классических детекторов.
Harris Corner Detector
В 1988 году появился алгоритм, который до сих пор считается классикой.
Идея очень красивая.
Берется маленькое окно изображения.
Оно последовательно сдвигается:
←
→
↑
↓
↖
↗
↘
↙
Для каждого смещения вычисляется изменение яркости.
Получаются три варианта.
1. Изменений почти нет
██████
██████
██████
Это однородная область.
Такие точки сразу отбрасываются.
2. Изменения только в одном направлении
██████
......
......
Это край объекта.
Он тоже плохо подходит.
3. Изменения происходят всегда
███...
███...
...███
Вот это угол.
Именно такие точки Harris считает наиболее ценными.
Почему Harris сегодня используют редко?
У него есть недостатки.
Он плохо переносит:
- изменение масштаба;
- поворот камеры;
- сильное изменение освещения.
Для современных БПЛА этого недостаточно.
FAST — самый популярный детектор
В 2006 году появился алгоритм FAST (Features from Accelerated Segment Test).
Он до сих пор используется почти во всех системах реального времени.
Почему?
Потому что невероятно быстрый.
Как работает FAST
Представим пиксель.
Вокруг него строится окружность из 16 точек.
○
○ ○
○ X ○
○ ○
○
Теперь сравнивается яркость всех соседей.
Если подряд находится несколько значительно более светлых или более темных пикселей, центральная точка признается углом.
Проверка требует всего несколько операций.
На современных процессорах FAST способен находить десятки тысяч точек в секунду.
Почему ORB практически вытеснил остальных
В начале 2010-х разработчики столкнулись с проблемой. FAST прекрасно ищет углы.
Но совершенно не умеет понимать: Это тот же самый угол или другой?
Нужно было научиться "запоминать" найденные точки. Так появился ORB.
Что такое ORB
ORB состоит из двух частей.
Первая:
FAST- ищет углы.
Вторая:
BRIEF - создает цифровой "паспорт" каждой точки.
Получается:
Точка №125
101011010110101010101101010101
Для каждой найденной особенности строится компактный бинарный дескриптор.
Когда появляется следующий кадр, система сравнивает эти последовательности и быстро определяет, является ли найденная точка той же самой.
Почему ORB оказался настолько успешным?
Причин несколько.
Он:
- очень быстрый;
- устойчив к поворотам;
- почти бесплатен вычислительно;
- не требует GPU;
- отлично работает на ARM-процессорах.
Именно поэтому ORB стал основой большинства открытых систем Visual SLAM.
Например:
- ORB-SLAM3
А почему не SIFT?
Многие инженеры слышали: "SIFT гораздо лучше."
Это действительно так.
SIFT способен обнаруживать признаки даже после:
- сильного изменения масштаба;
- поворота;
- изменения освещения.
Но есть проблема. Он значительно тяжелее вычислительно.
Например:
- ORB может обработать кадр за несколько миллисекунд.
- SIFT — в несколько раз дольше на том же оборудовании.
Для беспилотника это критично.
SURF
SURF создавался как ускоренная версия SIFT. Он действительно оказался быстрее.
Однако всё равно не смог конкурировать с ORB в системах реального времени.
Современные нейросетевые детекторы
Последние годы классические алгоритмы постепенно дополняются нейросетями.
Наиболее известные решения:
- SuperPoint
- DISK
- R2D2
- ALIKED
Они способны находить более устойчивые признаки в сложных условиях: при слабом освещении, сильных изменениях масштаба или размытости. Однако цена за это — более высокие требования к вычислительным ресурсам.
Сколько признаков нужно?
Это частый вопрос. Ответ зависит от среды.
Типичные значения:
| Среда | Количество признаков |
|---|---|
| Коридор | 200–500 |
| Лес | 1000–3000 |
| Город | 3000–8000 |
| Индустриальный объект | 5000–15000 |
Важно понимать: больше — не всегда лучше. Избыточное количество слабых признаков может замедлить работу системы и увеличить вероятность ложных совпадений.
Практический вывод
Feature Detection — это фундамент Visual SLAM. Если на этом этапе выбраны плохие ориентиры, последующие алгоритмы не смогут компенсировать ошибку. Именно поэтому разработчики уделяют огромное внимание выбору детектора, настройке его параметров и качеству входного изображения.
В современных автономных БПЛА всё чаще используются гибридные подходы: классические детекторы (например, ORB) для работы в реальном времени и нейросетевые модели для сложных сцен или периодической коррекции карты.
Литература и ресурсы
Классические работы
- C. Harris, M. Stephens. A Combined Corner and Edge Detector (1988).
- E. Rosten, T. Drummond. Machine Learning for High-Speed Corner Detection (FAST, 2006).
- E. Rublee et al. ORB: An Efficient Alternative to SIFT or SURF (ICCV 2011).
Официальные ресурсы и код
- OpenCV Feature Detection Documentation
- ORB-SLAM3 GitHub
- OpenCV GitHub
Часть 4. Дескрипторы признаков: как компьютер «узнаёт» один и тот же объект спустя тысячи кадров
«Найти угол — легко. Гораздо сложнее доказать, что этот угол на новом кадре — тот же самый, что и секунду назад.»
Почему Feature Detection недостаточно?
В предыдущей главе мы научили систему находить хорошие ориентиры. Предположим, алгоритм обнаружил 2500 углов.
Возникает новый вопрос:
Как понять, что угол №145 на новом кадре — это тот же угол, который был найден секунду назад?
Для человека задача кажется тривиальной.
Мы мгновенно узнаём:
- окно дома;
- дорожный знак;
- дерево;
- автомобиль.
Но компьютер не знает, что такое окно. Для него существуют только числа.
Следовательно, каждую найденную точку необходимо превратить в цифровой отпечаток, который можно сравнивать. Этот отпечаток называется дескриптором (Descriptor).
Что такое дескриптор?
Дескриптор — это математическое описание окрестности ключевой точки. Представим, что камера обнаружила угол окна.
Вместо хранения изображения алгоритм записывает его характеристики:
- распределение яркости;
- локальные градиенты;
- взаимное расположение контрастных областей;
- ориентацию;
- иногда масштаб.
Получается компактный набор данных, по которому можно узнать этот объект позже.
Аналогия с отпечатком пальца
Дескриптор очень похож на отпечаток пальца человека. Полностью восстановить палец по отпечатку невозможно. Но определить владельца — можно. Точно так же невозможно восстановить изображение по дескриптору.
Но можно определить:
Это та же самая точка или нет?
Почему нельзя сравнивать изображения?
Представим два кадра.
Первый:
+------------+
| окно |
+------------+
Через секунду дрон немного повернулся.
Получилось:
+------------+
| окно |
+------------+
Изменилось:
- положение;
- освещение;
- масштаб;
- перспектива.
Пиксели уже совершенно другие.
Если сравнить изображения напрямую — совпадение окажется очень плохим.
Поэтому сравниваются не изображения, а дескрипторы.
Каким должен быть хороший дескриптор?
Он обязан быть устойчивым к следующим изменениям.
Поворот
Дрон может повернуться на:
- 30°
- 90°
- 180°
Точка должна остаться узнаваемой.
Масштаб
Аппарат приблизился к зданию.
Окно стало в четыре раза больше.
Дескриптор должен остаться тем же.
Освещение
Солнце зашло за облако.
Яркость изображения изменилась.
Но объект тот же.
Частичное перекрытие
Например,
ветка закрыла половину окна.
Алгоритм всё равно должен узнать объект.
Небольшой шум
Изображение никогда не бывает идеальным.
Есть:
- шум матрицы;
- сжатие видео;
- дождь;
- снег;
- пыль.
Дескриптор должен быть устойчивым и к этим факторам.
SIFT — первый по-настоящему мощный дескриптор
В 1999 году Дэвид Лоу предложил алгоритм SIFT (Scale-Invariant Feature Transform), который стал настоящим прорывом.
Идея проста. Вокруг каждой точки строится небольшая область.
Например:
41 × 41 пиксель
Она разбивается на небольшие блоки.
Для каждого блока вычисляются:
- направление градиента;
- сила градиента.
Получается гистограмма направлений.
В итоге формируется вектор из:
- 128 чисел
Именно этот вектор становится дескриптором.
Почему SIFT был революционным?
Он оказался устойчивым одновременно к:
- масштабу;
- повороту;
- изменению освещения;
- умеренным перспективным искажениям.
В начале 2000-х практически все исследования по компьютерному зрению использовали именно SIFT.
Но была проблема.
Почему SIFT редко используют на дронах?
Вычислительная сложность.
Для каждой точки необходимо вычислить:
- множество градиентов;
- несколько гистограмм;
- нормализацию;
- дополнительные проверки.
На современном ПК это не проблема. Но на ARM-процессоре беспилотника это означает потерю драгоценного времени.
SURF
Позже появился алгоритм SURF (Speeded-Up Robust Features).
Основная идея — получить почти такую же устойчивость, как у SIFT, но значительно быстрее. SURF действительно ускорил вычисления, однако для современных автономных БПЛА оказался всё равно слишком тяжёлым.
BRIEF — совершенно другой подход
Разработчики задали неожиданный вопрос. А действительно ли нужны длинные векторы из 128 чисел? Можно ли описать точку проще? Ответ оказался положительным.
Как работает BRIEF
Вокруг найденной точки случайным образом выбираются пары пикселей.
Например:
A
B
Если
A > B
записывается
1
Если
A < B
записывается
0
Таких сравнений выполняются сотни.
Например:
101100011010110001010110...
Получается бинарная строка. Именно она становится дескриптором.
Почему бинарные дескрипторы оказались настолько быстрыми?
Потому что компьютеры великолепно работают с битовыми операциями. Сравнение двух бинарных строк выполняется практически мгновенно.
Hamming Distance
Теперь необходимо определить, насколько похожи два дескриптора. Для этого используется расстояние Хэмминга. Представим два дескриптора.
Первый:
10110110
Второй:
10100111
Сравним их.
10110110
10100111
Отличаются три бита. Следовательно,
Hamming Distance = 3
Чем меньше значение, тем выше вероятность, что это одна и та же точка.
Почему ORB победил большинство конкурентов?
ORB объединил две идеи.
FAST
↓
быстро ищет углы.
BRIEF
↓
быстро создаёт бинарные дескрипторы.
Затем добавлены:
- компенсация поворота;
- выбор наиболее информативных сравнений;
- оптимизация скорости.
В результате ORB оказался идеальным компромиссом между скоростью и качеством.
Именно поэтому:
- ORB-SLAM3
- OpenCV ORB Documentation
используют именно ORB.
Почему нейросети постепенно вытесняют классические дескрипторы?
Классические методы основаны на правилах, которые придумал человек.
Нейросети делают иначе. Они сами учатся понимать, какие признаки лучше всего подходят для узнавания объектов. Например, если обучить сеть на миллионах изображений, она начинает самостоятельно выбирать наиболее устойчивые особенности.
SuperPoint
Одной из первых успешных моделей стал - SuperPoint.
Особенность алгоритма:
он одновременно выполняет
- поиск ключевых точек;
- построение дескрипторов.
Это уменьшает вероятность ошибок, поскольку обе задачи решаются одной моделью.
Официальный репозиторий:
- SuperPoint (Magic Leap)
SuperGlue — следующий шаг
Найти дескрипторы недостаточно. Теперь нужно понять, какие точки соответствуют друг другу. Для этого была разработана модель SuperGlue. Она рассматривает не каждую точку отдельно, а весь набор признаков, используя архитектуру Transformer и механизм внимания (Attention). В результате значительно уменьшается количество ложных совпадений.
Репозиторий:
- SuperGlue Pretrained Network
LightGlue
В 2023–2024 годах широкое распространение получил LightGlue.
Его особенность — динамически изменять объём вычислений. Если сцена простая, алгоритм завершает работу быстрее. Если сложная — использует больше вычислительных ресурсов.
Благодаря этому LightGlue стал одним из наиболее популярных современных методов сопоставления признаков.
Репозиторий:
- LightGlue
Сколько времени занимает создание дескрипторов?
Для современного дрона с камерой 60 FPS весь цикл должен укладываться примерно в 16 мс на кадр. В этот бюджет входят:
- получение изображения;
- коррекция дисторсии;
- поиск ключевых точек;
- вычисление дескрипторов;
- сопоставление с предыдущим кадром.
Если система не укладывается в этот интервал, она начинает пропускать кадры, что ухудшает точность навигации.
Именно поэтому выбор алгоритма всегда является компромиссом между качеством и скоростью.
Вывод главы
Feature Detection отвечает на вопрос: Где находятся интересные точки?
Descriptor отвечает на другой вопрос: Какие из этих точек я уже видел раньше?
Без дескрипторов невозможны:
- Visual Odometry;
- построение траектории;
- обнаружение повторного посещения места (Loop Closure);
- оптимизация карты.
По сути, именно дескрипторы дают SLAM способность "узнавать" окружающий мир.
Основные публикации
- D. Lowe. Distinctive Image Features from Scale-Invariant Keypoints (IJCV, 2004).
- E. Rublee et al. ORB: An Efficient Alternative to SIFT or SURF (ICCV, 2011).
- P. F. Alcantarilla et al. AKAZE Features (BMVC, 2013).
Полезные ресурсы
- OpenCV Feature2D Documentation
- OpenCV ORB API
- SuperPoint GitHub
- LightGlue GitHub
Часть 5. Feature Matching — как беспилотник понимает, что видит тот же самый мир
«Самая опасная ошибка в SLAM — не потерять ориентир, а перепутать его с другим. Один ложный объект может исказить всю карту.»
После предыдущих глав у нас уже есть две вещи:
✔ найдены ключевые точки
✔ для каждой точки построен дескриптор
Но этого недостаточно. Перед системой стоит новая задача.
Допустим, первый кадр содержит:
- 3728 ключевых точек
Через 16 миллисекунд появляется следующий кадр.
На нем найдено:
- 3854 точки
Возникает вопрос: Какая точка нового кадра соответствует точке старого кадра? Именно это называется Feature Matching.
Почему это настолько сложно?
Представим городской квартал.
На изображении находятся:
- 150 окон
- 300 кирпичей
- 40 автомобилей
- сотни углов
Многие элементы выглядят почти одинаково.
Например:
□□□□□□□□□□□□
□□□□□□□□□□□□
□□□□□□□□□□□□
□□□□□□□□□□□□
Каждое окно практически копия соседнего. Если алгоритм перепутает окна, ошибка сразу попадет в вычисление координат. Через несколько секунд весь SLAM может "сломаться". Поэтому Matching считается одной из самых ответственных частей системы.
Самый простой алгоритм
Допустим, есть дескриптор
101010011101...
Необходимо найти максимально похожий.
Самая очевидная идея — сравнить его со всеми остальными.
Точка №1
↓
сравнить с №1
↓
сравнить с №2
↓
сравнить с №3
↓
...
↓
сравнить с №3854
Так работает алгоритм - Brute Force Matching
Brute Force Matcher
Алгоритм невероятно простой.
Для каждого дескриптора:
вычислить расстояние
↓
найти минимальное
↓
запомнить совпадение
Если используется ORB, то применяется Hamming Distance.
Если SIFT — обычно L2 Distance (Евклидово расстояние).
Почему Brute Force плохо масштабируется?
Представим 5000 признаков.
Количество сравнений становится 5000 × 5000 = 25 миллионов
И это только для одного кадра. При 60 FPS получаем миллиарды сравнений каждую минуту. Даже современному процессору приходится тяжело.
KD-Tree
Инженеры быстро поняли, что искать по всему списку бессмысленно. Можно сначала отсортировать признаки. Так появилась структура
KD-Tree (K-Dimensional Tree).
Идея похожа на телефонный справочник. Если нужно найти Иванова, не нужно читать всю книгу. Мы сразу открываем раздел "И". KD-Tree делает примерно то же самое, но для многомерных векторов.
FLANN
Когда признаков становится десятки тысяч, используют FLANN (Fast Library for Approximate Nearest Neighbors).
Официальный сайт проекта:
- FLANN Project
FLANN строит специальные поисковые структуры, позволяющие искать ближайшие дескрипторы почти мгновенно. Именно поэтому OpenCV использует FLANN для SIFT и SURF.
Почему "почти правильный" ответ лучше идеального
На первый взгляд странно Почему Approximate? Почему не искать идеально? Потому что робот должен лететь. Если поиск занимает 50 миллисекунд, дрон уже успел изменить положение. Лучше получить совпадение, точность которого 99,8%, но за 2 миллисекунды. Именно поэтому большинство современных систем предпочитает быстрые приближенные методы.
Но Matching ещё не закончен
Представим, мы нашли совпадения.
Точка 15
↓
Точка 284
Отлично? Нет. Половина совпадений всё ещё ложная.
Почему появляются ложные совпадения?
Представим бизнес-центр. Все окна одинаковые.
Алгоритм получает
□
□
□
□
□
Для компьютера это почти одинаковые изображения. Он легко может перепутать окно третьего этажа с окном пятого. Если использовать эти данные, дрон "телепортируется" на несколько метров.
Cross Check
Первый способ борьбы. Представим. Из первого кадра
- точка A нашла соответствие B.
Теперь запускаем поиск наоборот. Из второго кадра
- точка B должна найти A.
Если получилось
A → B
B → A
совпадение считается надежным.
Если
A → B
B → C
оно удаляется. Эта проверка называется Cross Check.
Lowe Ratio Test
Самый известный фильтр ложных совпадений. Предложен Дэвидом Лоу. Представим, есть два кандидата.
- Лучший - 0.18
- Второй 0.19
Они почти одинаковые. Значит, алгоритм не уверен. Такую точку лучше удалить.
Теперь другой пример.
- Лучший 0.18
- Второй 0.71
Здесь разница огромная. Совпадение почти наверняка правильное. Именно это и проверяет- Lowe Ratio Test.
Геометрическая проверка
Даже этого недостаточно. Допустим, осталось 800 совпадений. Среди них
20 ложных.
Можно ли их найти?
Да.
Именно здесь появляется
самый известный алгоритм
компьютерного зрения —
RANSAC
Почему RANSAC считается гениальным?
Представим,
после Matching
мы получили
1000 совпадений
Но среди них
150 ошибочных.
Если использовать их все,
получится неправильная модель движения.
RANSAC делает иначе.
Он случайным образом выбирает минимальный набор соответствий, строит по нему гипотезу о движении камеры и затем проверяет, сколько остальных точек согласуются с этой гипотезой.
Если большинство совпадений подтверждают модель, она считается хорошей. Если нет — алгоритм пробует другую случайную комбинацию.
Пример работы RANSAC
Представим,
после сопоставления получили такие точки.
- ● ● ● ●
- ● ●
X
- ● ●
X
- ● ● ●
Где
●
правильные совпадения,
а
X
ошибочные.
RANSAC автоматически отбросит выбросы (Outliers),
оставив только согласованные точки.
Именно поэтому он используется практически во всех системах Visual SLAM.
Почему RANSAC настолько важен для дронов?
Представим FPV-дрон,
летящий
120 км/ч.
Камера вибрирует.
В кадре появляются:
- смаз движения;
- блики;
- тени;
- вращающиеся винты.
Даже лучший дескриптор начинает ошибаться.
Без RANSAC
ошибочные совпадения мгновенно разрушат навигацию.
Именно поэтому практически каждый современный SLAM вызывает RANSAC
сотни раз в секунду.
Что происходит после RANSAC?
Теперь остаются только
хорошие соответствия.
Например:
780 надежных совпадений
Именно они становятся входными данными
для следующего этапа.
От совпадений к движению
Теперь возникает главный вопрос.
Если известно,
что
эта точка
↓
переместилась сюда
можно ли определить,
как двигалась камера?
Ответ —
да.
Именно это делает
Visual Odometry.
Она вычисляет:
- перемещение по X;
- перемещение по Y;
- перемещение по Z;
- поворот по Roll;
- поворот по Pitch;
- поворот по Yaw.
Получается полная шестимерная поза камеры (6DoF).
Сколько совпадений необходимо?
На практике всё зависит от сцены.
| Условия | Хороших совпадений |
|---|---|
| Плохая текстура (стены, бетон) | 50–150 |
| Лес | 300–1000 |
| Город | 1000–5000 |
| Индустриальный объект | 3000–10000 |
Важно не абсолютное количество, а их пространственное распределение. Если все точки сосредоточены в одном углу изображения, оценка движения будет менее устойчивой.
Современные методы сопоставления
Классические методы постепенно дополняются нейросетями.
Сегодня всё чаще используются:
- SuperGlue
- LightGlue
- LoFTR
В отличие от традиционных алгоритмов, они учитывают контекст всей сцены и способны находить соответствия даже там, где классические дескрипторы работают нестабильно.
Практический пример: ORB-SLAM3
Конвейер обработки в ORB-SLAM3 выглядит следующим образом:
Камера
│
▼
Поиск ORB-признаков
│
▼
Создание ORB-дескрипторов
│
▼
Brute Force (Hamming)
│
▼
Lowe Ratio Test
│
▼
RANSAC
│
▼
Visual Odometry
│
▼
Локальная карта
Именно эта последовательность позволила ORB-SLAM3 стать одним из наиболее успешных открытых проектов в области Visual SLAM.
Практический вывод главы
Feature Matching — это «фильтр доверия» всей системы. На этом этапе определяется, какие наблюдения действительно относятся к одному и тому же объекту, а какие являются случайными совпадениями.
Ошибки здесь особенно опасны: даже несколько ложных соответствий могут привести к неверной оценке движения, что затем повлияет на карту, траекторию и последующую локализацию.
Поэтому современные системы используют не один алгоритм сопоставления, а целый каскад проверок: быстрый поиск кандидатов, тест Лоу, взаимную проверку, RANSAC и, всё чаще, нейросетевые методы сопоставления.
Что дальше?
Следующая глава будет одной из ключевых во всём руководстве. Мы подробно разберём Visual Odometry — как по нескольким сотням совпавших точек вычисляются шесть степеней свободы движения камеры, что такое Essential Matrix, Fundamental Matrix, PnP, эпиполярная геометрия, почему возникает проблема масштаба у монокулярных камер и каким образом SLAM впервые начинает определять собственное положение в пространстве.
Рекомендуемая литература
- David G. Lowe. Distinctive Image Features from Scale-Invariant Keypoints (IJCV, 2004).
- Martin A. Fischler, Robert C. Bolles. Random Sample Consensus (RANSAC) (1981).
- Richard Hartley, Andrew Zisserman. Multiple View Geometry in Computer Vision — фундаментальная книга по многовидовой геометрии.
Полезные ресурсы
- OpenCV Feature Matching Documentation
- OpenCV findFundamentalMat (RANSAC)
- LoFTR GitHub
Примечание автора: начиная со следующей части мы переходим от обработки изображений к пространственной геометрии. Именно там происходит главное «волшебство» SLAM — из двумерных изображений система начинает восстанавливать трёхмерное движение беспилотника. Это один из самых математически насыщенных, но и самых важных разделов всего руководства.
Часть 6. Visual Odometry — как беспилотник вычисляет собственное движение
«До этого момента SLAM только наблюдал мир. Теперь он начинает понимать, как сам перемещается в пространстве.»
Самый важный этап всего SLAM
Если попросить инженеров назвать одну технологию, без которой Visual SLAM невозможен, большинство ответит:
Visual Odometry (VO).
Именно здесь впервые появляются координаты дрона.
До этого момента система лишь:
✔ находила признаки
✔ строила дескрипторы
✔ сопоставляла признаки
Но она совершенно не понимала,
куда полетел беспилотник.
Теперь начинается настоящая навигация.
Что такое Visual Odometry?
Visual Odometry (визуальная одометрия) — это вычисление собственного перемещения по последовательности изображений.
Название произошло от автомобильного одометра.
Автомобильный одометр считает:
Сколько проехали колеса?
Visual Odometry отвечает на другой вопрос:
Насколько изменилась картинка вокруг камеры?
Очень простой пример
Представим,
камера смотрит на дом.
Первый кадр
Дом
███
███
Камера
▲
Через секунду
дрон пролетел
2 метра вправо.
Получился второй кадр.
Дом
███
███
▲
Камера
Все объекты сместились.
Возникает вопрос:
Можно ли определить движение камеры только по этим изменениям?
Ответ —
да.
Именно это делает Visual Odometry.
Как человек определяет движение?
Представьте,
что вы едете в автомобиле.
Близкие деревья
"летят"
очень быстро.
Далекие горы
почти неподвижны.
Мозг мгновенно понимает:
машина движется.
Компьютер делает практически то же самое.
Почему движение видно?
Представим
одну точку.
Кадр №1
●
Через секунду
Кадр №2
●
Точка сместилась.
Если таких точек
1000,
можно вычислить,
как двигалась камера.
Но есть проблема...
Рассмотрим два изображения.
Кадр №1
Дом
Кадр №2
Дом
Что произошло?
Вариант 1
Камера полетела вправо.
Вариант 2
Дом поехал влево.
По одному изображению
ответить невозможно.
Поэтому Visual Odometry всегда предполагает,
что окружающий мир неподвижен,
а движется именно камера.
Это одно из фундаментальных допущений SLAM.
Что такое 6DoF?
В реальном мире камера может двигаться
не только вперед.
У нее есть
шесть степеней свободы.
Перемещение
X
← →
Y
↑ ↓
Z
вверх вниз
Вращение
Roll
наклон крыла
Pitch
нос вверх
нос вниз
Yaw
поворот
налево
направо
Получается
6 параметров.
Именно их должна вычислить Visual Odometry.
Откуда взять глубину?
Вот здесь появляется первая серьезная проблема.
Камера —
двумерная.
Изображение —
плоское.
Но мир —
трехмерный.
Как узнать расстояние?
Монокамера
Если камера одна,
то сразу узнать глубину невозможно.
Она определяется
по движению.
Например.
Первый кадр.
Дом
Второй.
Дом
По изменению перспективы
можно вычислить
расстояние.
Но только после того,
как камера уже начала двигаться.
Именно поэтому монокулярный SLAM не знает абсолютного масштаба сразу после запуска.
Почему монокулярный SLAM не знает размеров мира?
Представим фотографию.
На ней автомобиль.
Что можно сказать?
Он может быть:
игрушкой
или
настоящим грузовиком.
По одному снимку определить невозможно.
Поэтому монокамера знает
форму сцены,
но не знает ее абсолютный масштаб.
Если алгоритм решил,
что дерево высотой
5 метров,
он также мог бы решить,
что это дерево высотой
50 метров.
Геометрия останется одинаковой.
Это называется
Scale Ambiguity.
Как проблему масштаба решают современные системы?
Есть несколько способов.
IMU
Самый популярный.
Инерциальные датчики измеряют реальные ускорения.
Поэтому система начинает понимать
реальные размеры движения.
Именно так работают
Visual-Inertial SLAM.
Стереокамера
Если камер две,
расстояние определяется
почти мгновенно.
Точно так же,
как человек видит глубину двумя глазами.
RGB-D
Если используется
камера глубины,
например
Intel RealSense D455
то расстояние вообще измеряется напрямую.
Эпиполярная геометрия
Это один из самых красивых разделов компьютерного зрения.
Представим.
Камера сделала
два снимка.
Получились
две точки наблюдения.
Камера 1 ●
\
\
Дом
/
/
Камера 2 ●
Каждая точка изображения
образует луч.
Пересечение лучей
дает положение объекта
в пространстве.
Но есть еще более важное следствие.
Эпиполярное ограничение
Если точка была найдена
на первом изображении,
то на втором
она может находиться
не где угодно.
Она обязана лежать
на определенной линии.
Эта линия называется
эпиполярной линией.
Получается,
вместо поиска
по всему изображению
алгоритм ищет
только вдоль одной линии.
Это уменьшает вычисления
в сотни раз
и резко снижает вероятность ложных совпадений.
Fundamental Matrix
Эпиполярную геометрию описывает
матрица
F
Она связывает
две камеры.
Если известна
Fundamental Matrix,
можно вычислить,
где должна находиться
каждая точка
на следующем кадре.
В OpenCV это реализовано функцией:
- findFundamentalMat()
Essential Matrix
Если камера откалибрована
(а для SLAM это обязательное условие),
используется не Fundamental Matrix,
а более точная
Essential Matrix.
Она содержит информацию только о взаимном положении камер, без влияния внутренних параметров объектива.
В OpenCV:
- findEssentialMat()
После её вычисления вызывается:
- recoverPose()
Именно эта функция возвращает:
- матрицу вращения (Rotation Matrix);
- направление переноса (Translation Vector).
Это и есть первое приближение к положению камеры между двумя кадрами.
Почему Translation Vector не всегда означает реальное расстояние?
Это одна из самых распространённых ошибок новичков.
После вызова recoverPose() многие ожидают получить ответ:
«Дрон пролетел ровно 2,35 метра».
Но этого не происходит.
Для монокамеры вектор переноса показывает направление движения, а его длина известна только с точностью до масштаба.
Например:
t =
0.72
0.15
0.68
Это не означает,
что дрон пролетел
72 сантиметра.
Это означает лишь,
что он двигался
примерно в этом направлении.
Абсолютный масштаб появится только после объединения с IMU, стереокамерой или датчиком глубины.
Триангуляция
Теперь начинается настоящая трёхмерная геометрия.
Представим,
две камеры увидели один и тот же фонарь.
Камера 1
\
\
- Фонарь
/
/
Камера 2
Пересечение лучей позволяет вычислить координаты объекта:
X
Y
Z
Этот процесс называется триангуляцией.
Именно так из двумерных изображений рождается трёхмерная карта мира.
Почему ошибки неизбежны?
В реальности лучи почти никогда не пересекаются идеально.
Причины:
- шум матрицы;
- неточная калибровка;
- вибрации;
- ошибки сопоставления;
- несовершенная оптика.
Поэтому вместо точного пересечения используются методы оптимизации, которые находят наиболее вероятное положение точки.
Этим мы займёмся в следующих главах, когда будем разбирать Bundle Adjustment и Pose Graph Optimization.
Практический пример: ORB-SLAM3
На этапе Visual Odometry система выполняет следующий конвейер:
ORB Features
│
▼
Feature Matching
│
▼
RANSAC
│
▼
Essential Matrix
│
▼
recoverPose()
│
▼
Triangulation
│
▼
Первичная 3D-карта
│
▼
Оценка движения камеры (6DoF)
Каждый из этих этапов должен укладываться в миллисекунды, иначе беспилотник не сможет работать в реальном времени.
Вывод главы
Visual Odometry — это первый этап, на котором SLAM перестаёт быть системой обработки изображений и становится системой навигации.
Именно здесь двумерные пиксели превращаются в:
- трёхмерные точки;
- траекторию движения;
- оценку положения камеры;
- основу для построения карты.
Однако полученная траектория ещё далека от идеала. Ошибки постепенно накапливаются, и без специальных методов коррекции дрон со временем начнёт «уплывать» от реального положения.
Что будет дальше?
Следующая часть посвящена Bundle Adjustment (BA) — алгоритму, который многие называют «сердцем современного SLAM». Мы подробно разберём, почему Visual Odometry неизбежно ошибается, как BA одновременно уточняет координаты всех трёхмерных точек и всех положений камеры, почему эта задача сводится к огромной нелинейной оптимизации и как библиотеки Ceres Solver, g2o и GTSAM позволяют уменьшить ошибки с метров до сантиметров.
Основная литература
- Richard Hartley, Andrew Zisserman. Multiple View Geometry in Computer Vision — фундаментальная книга по эпиполярной геометрии.
- Scaramuzza D., Fraundorfer F. Visual Odometry: Part I & II — один из лучших обзоров по визуальной одометрии.
- Szeliski R. Computer Vision: Algorithms and Applications.
Полезные ресурсы
- OpenCV Calib3D Module
- ORB-SLAM3 GitHub
- OpenVINS GitHub
Часть 7. Bundle Adjustment — алгоритм, который превращает хаос измерений в точную карту
«Visual Odometry говорит: "Я думаю, что дрон находится здесь". Bundle Adjustment отвечает: "Давайте пересчитаем всё ещё раз и выясним, где он находится на самом деле".»
Почему Visual Odometry недостаточно?
В предыдущей главе мы научились вычислять положение камеры между двумя кадрами.
Предположим, дрон летит над промышленной площадкой.
Через каждую 1/60 секунды Visual Odometry вычисляет новую позу:
Кадр 1
X = 0.00
Кадр 2
X = 0.31
Кадр 3
X = 0.63
Кадр 4
X = 0.95
Кадр 5
X = 1.27
Всё выглядит идеально.
Но каждая оценка содержит небольшую ошибку.
Например:
Ошибка кадра
±0.5 %
±0.8 %
±0.3 %
±0.6 %
Каждая ошибка почти незаметна.
Но через несколько тысяч кадров происходит следующее.
Вместо:
120 метров
алгоритм получает
124 метра
Через десять минут полёта ошибка может достигать десятков метров.
Почему возникает ошибка?
Представим простейшую ситуацию.
Есть три камеры.
Камера 1
Камера 2
Камера 3
Все они наблюдают один фонарь.
Visual Odometry вычислила:
Фонарь
X = 12.1
Y = 4.8
Z = 1.6
Но в следующем кадре тот же самый фонарь оказался немного в другом месте.
Получилось:
X = 12.3
Y = 4.7
Z = 1.5
Какое значение правильное?
Ни одно.
Обе оценки содержат шум.
Самая гениальная идея Bundle Adjustment
Вместо того чтобы верить последнему измерению,
BA говорит:
Давайте одновременно пересчитаем ВСЕ камеры и ВСЕ точки.
Не одну.
Не две.
А сразу всю карту.
Это фундаментальное отличие BA от обычной фильтрации.
Почему алгоритм называется Bundle Adjustment?
Название появилось ещё в фотограмметрии.
Представим фотоаппарат.
Каждый пиксель изображения соответствует лучу света.
Получается целый "пучок лучей" (Bundle).
Камера
\
\
\
●
/
/
/
Bundle Adjustment изменяет положение камер и точек так, чтобы все лучи пересекались максимально точно.
Что именно оптимизируется?
Одновременно корректируются:
1. Координаты всех камер
X
Y
Z
Roll
Pitch
Yaw
2. Координаты всех точек
X
Y
Z
3. Иногда параметры камеры
Например:
- фокусное расстояние;
- коэффициенты дисторсии;
- внутренние параметры.
Это называется Self Calibration.
Представьте огромную таблицу
Допустим,
дрон пролетел
500 метров.
Получилось:
Камер
4200
И найдено
3D-точек
280 000
Каждая точка наблюдается
примерно
20 раз.
Получается более
5 миллионов наблюдений.
И всё это Bundle Adjustment пересчитывает одновременно.
Что такое Reprojection Error?
Это самое важное понятие всей главы.
Допустим,
SLAM считает,
что точка находится здесь.
●
Но камера увидела её немного левее.
×
Расстояние между ними —
это ошибка перепроецирования (Reprojection Error).
●-----------×
Чем она меньше,
тем лучше построена карта.
Практически все современные SLAM стремятся минимизировать именно эту ошибку.
Как вычисляется Reprojection Error?
Предположим,
мы знаем:
- положение камеры;
- положение точки.
Можно вычислить,
куда эта точка должна попасть на изображении.
Получили
(842, 510)
Но реально камера увидела её
(846, 508)
Ошибка составляет
4 пикселя
BA пытается сделать так,
чтобы ошибка стала
0.5 пикселя
или даже
0.2 пикселя
Именно поэтому хорошие карты выглядят настолько точными.
Почему задача невероятно сложная?
Представим.
Есть
4000 камер
и
300000 точек.
Нельзя изменить только одну камеру.
Потому что изменятся все лучи.
Нельзя изменить только одну точку.
Потому что её наблюдают десятки камер.
Получается гигантская взаимосвязанная система.
Изменение одной переменной влияет на тысячи других.
Нелинейная оптимизация
Из-за перспективной проекции задача не имеет простого аналитического решения.
Поэтому используются методы численной оптимизации.
Наиболее известные:
- Gauss–Newton
- Levenberg–Marquardt
- Dogleg Method
Именно они последовательно уменьшают ошибку, пока не будет достигнут минимум.
Почему Levenberg–Marquardt стал стандартом?
Представьте, что вы спускаетесь с горы в густом тумане.
Если делать слишком большие шаги, можно сорваться.
Если слишком маленькие — идти придётся очень долго.
Алгоритм Левенберга–Марквардта автоматически регулирует размер шага:
- далеко от решения — делает осторожные шаги;
- рядом с минимумом — ускоряет сходимость.
Поэтому он используется практически во всех промышленных системах SLAM.
Sparse Matrix — главный секрет скорости
Если записать всю систему в виде обычной матрицы, её размер может достигать миллионов строк и столбцов.
Но есть важное наблюдение.
Каждая камера видит только небольшую часть всех точек.
Следовательно, большинство элементов матрицы — нули.
Например:
█ 0 0 0 0
0 █ 0 0 0
0 0 █ 0 0
0 0 0 █ 0
Такие матрицы называют разрежёнными (Sparse Matrices).
Современные алгоритмы работают только с ненулевыми элементами, что позволяет ускорить вычисления на порядки.
Schur Complement — хитрость, изменившая SLAM
В начале 2000-х стало ясно, что оптимизировать одновременно миллионы переменных слишком дорого.
Тогда начали применять Schur Complement.
Идея проста:
вместо одновременной оптимизации камер и точек,
сначала временно исключаются точки,
а вычисления ведутся только для камер.
После этого положение точек восстанавливается автоматически.
Этот приём уменьшает объём вычислений в несколько раз и используется практически во всех современных реализациях Bundle Adjustment.
Локальный и глобальный Bundle Adjustment
На практике никто не запускает полную оптимизацию после каждого кадра.
Используются два режима.
Local Bundle Adjustment
Оптимизируются:
- последние 10–30 ключевых кадров;
- несколько тысяч ближайших точек.
Работает постоянно.
Занимает:
10–50 мс
Global Bundle Adjustment
Пересчитывается вся карта.
Может включать:
- десятки тысяч кадров;
- миллионы точек.
Время работы:
от нескольких секунд до нескольких минут.
Обычно запускается после обнаружения Loop Closure, когда система понимает, что вернулась в уже знакомое место.
Библиотеки, которые используют инженеры
Практически все современные проекты используют готовые оптимизаторы.
Ceres Solver
Разработан Google.
Особенности:
- автоматическое дифференцирование;
- высокая точность;
- удобный API.
Официальный сайт:
- Ceres Solver
g2o
Самая известная библиотека в мире SLAM.
Используется в:
- ORB-SLAM;
- LSD-SLAM;
- DSO;
- многочисленных исследовательских проектах.
Репозиторий:
- g2o GitHub
GTSAM
Разработана исследователями из Georgia Tech.
Особенно популярна в:
- автономных автомобилях;
- Visual-Inertial SLAM;
- робототехнике.
Официальный сайт:
- GTSAM
Как это работает в ORB-SLAM3?
Каждый новый ключевой кадр запускает цепочку:
Новый KeyFrame
│
▼
Добавление новых 3D-точек
│
▼
Local Bundle Adjustment
│
▼
Уточнение координат камер
│
▼
Уточнение координат точек
│
▼
Уменьшение ошибки перепроецирования
│
▼
Обновлённая локальная карта
Пока Front-End продолжает обрабатывать новые кадры, Back-End в отдельном потоке оптимизирует карту. Именно разделение этих задач позволяет системе работать в реальном времени.
Практическое значение для БПЛА
Представьте тяжёлый беспилотник зависает на высоте 200 метров без GPS.
Камера постоянно получает новые изображения.
Каждая оценка движения немного шумит.
Без Bundle Adjustment ошибка будет накапливаться:
- сначала сантиметры;
- затем десятки сантиметров;
- затем метры.
С BA все прошлые наблюдения постоянно переоцениваются. Если дрон снова увидел знакомые ориентиры, система может скорректировать накопленные ошибки и вернуть оценку положения ближе к реальности.
Именно поэтому качественный SLAM способен удерживать стабильную локальную карту в течение длительного времени даже при отсутствии спутниковой навигации.
Вывод главы
Bundle Adjustment — это механизм, который превращает последовательность приблизительных оценок в согласованную геометрическую модель окружающего мира.
Без него Visual Odometry быстро деградирует из-за накопления ошибок. С ним карта становится значительно точнее, а траектория — устойчивее.
Именно Bundle Adjustment является одной из главных причин, почему современные системы SLAM способны работать не минуты, а часы.
Часть 8. Loop Closure — как беспилотник понимает, что уже был здесь раньше
«Настоящий SLAM начинается не тогда, когда робот строит карту, а тогда, когда он способен узнать место, которое видел час назад, с другого ракурса и при другом освещении.»
Почему даже Bundle Adjustment не спасает?
После предыдущей главы может показаться, что проблема решена.
Есть:
- Visual Odometry;
- Bundle Adjustment;
- тысячи ориентиров;
- точная локальная карта.
Почему тогда существует еще один огромный модуль?
Ответ очень простой.
Представим полет.
Старт
↓
100 метров
↓
300 метров
↓
600 метров
↓
1000 метров
↓
Возвращение домой
Каждый метр полета содержит небольшую ошибку.
Например,
не
1 метр,
а всего
0,2 %
Через километр получится уже несколько метров накопленного дрейфа.
Когда дрон вернется домой,
его карта будет выглядеть так.
Реальность
□────────────□
SLAM
□───────────╮
│
│
□
Начало и конец маршрута не совпадут.
Хотя в реальности это одно место.
Именно это и исправляет Loop Closure
Loop Closure отвечает только на один вопрос.
"Я уже видел это место раньше?"
Не
"где я?"
Не
"куда лечу?"
А именно
узнавание места.
Почему задача настолько сложная?
Представим.
Утром дрон сфотографировал здание.
Через час
он снова прилетел туда.
Но теперь:
- солнце находится с другой стороны;
- появились тени;
- машины припаркованы иначе;
- люди ушли;
- дверь открыта;
- деревья качаются.
Для человека очевидно,
что это то же самое место.
Для компьютера —
совсем нет.
Человек узнает место мгновенно
Посмотрите на свою квартиру.
Вы узнаете ее:
- ночью;
- днем;
- зимой;
- после ремонта;
- даже если переставить мебель.
Почему?
Потому что мозг не сравнивает пиксели.
Он узнает
структуру сцены.
Именно этому пытается научиться SLAM.
Place Recognition
Первый этап Loop Closure называется
Place Recognition
(распознавание места).
Алгоритм должен ответить:
Среди десятков тысяч кадров
есть ли похожий?
Почему нельзя сравнивать все изображения?
Представим.
Дрон летал
30 минут.
Получилось
60 FPS
×
1800 секунд
=
108 000 кадров
Если каждый новый кадр сравнивать
со всеми предыдущими,
получится
миллиарды сравнений.
Это невозможно.
Bag of Words
В начале 2000-х инженеры заимствовали идею
из поисковых систем.
Представим текст.
Вместо хранения всей книги
можно хранить только частоту слов.
Например.
война
34
солдат
82
дрон
127
танк
11
Получается компактное описание документа.
Эта идея получила название
Bag of Words
Как это работает для изображений?
Вместо слов используются
визуальные признаки.
Например.
Есть
миллион ORB-дескрипторов.
Их объединяют
в словарь.
Получается
например
Слово №125
окно
Слово №338
угол
Слово №441
кирпич
Слово №932
дверная ручка
Конечно,
компьютер не знает,
что это окно.
Это просто номера кластеров признаков.
Но идея остается такой же.
Построение Visual Vocabulary
Сначала собирается огромная база изображений.
Например,
миллионы фотографий.
Из них извлекаются
ORB-дескрипторы.
Затем применяется
кластеризация
(K-Means).
Получается
дерево слов.
Например.
Все признаки
↓
1000 групп
↓
100 групп
↓
10 групп
↓
Visual Word
Так строится
Visual Vocabulary.
DBoW2
Самая известная реализация
Bag of Words
для SLAM —
DBoW2
Именно ее использует
ORB-SLAM2
и
ORB-SLAM3.
Репозиторий:
- DBoW2 GitHub
Как работает поиск?
Представим.
Получен новый кадр.
Из него извлекли
3000 признаков.
Каждый признак заменили
номером слова.
Получилось
что-то вроде:
125
337
18
441
441
812
932
125
Фактически
получилась
"статья"
из визуальных слов.
Теперь можно сравнить
ее
со всеми предыдущими кадрами
очень быстро.
TF-IDF
Bag of Words использует
тот же принцип,
что и Google.
Редкие признаки
ценнее,
чем распространенные.
Например.
Угол кирпича
встречается
почти везде.
Он малоинформативен.
А вот
редкая вентиляционная решетка
может встретиться
только один раз.
Следовательно,
ее вес будет гораздо выше.
Это называется
TF-IDF
(Term Frequency – Inverse Document Frequency).
Кандидат найден
Представим.
Из
100 000 кадров
система выбрала
5 наиболее похожих.
Это еще
не означает,
что Loop Closure найден.
Нужна проверка.
Геометрическая проверка
Теперь запускается
тот же RANSAC,
который мы изучали ранее.
Если совпадения
действительно
образуют одну и ту же геометрию,
значит
место найдено.
Если нет —
ложное совпадение.
Почему ложные Loop Closure опаснее всего?
Представьте.
Дрон летит
вдоль одинаковых складов.
□ □ □ □ □ □
Все здания одинаковые.
Если алгоритм решит,
что склад №12 —
это склад №2,
карта буквально "сложится".
Ошибка может составить
десятки метров.
Именно поэтому
геометрическая проверка
обязательна.
Что происходит после обнаружения Loop Closure?
Вот теперь начинается
магия.
Предположим,
карта выглядела так.
Начало
□───────────────╮
│
│
□ Конец
Loop Closure говорит:
Начало и конец —
одно место.
Теперь система должна
свести карту.
Получается
□──────────────□
Весь маршрут
перестраивается.
Все камеры
немного перемещаются.
Все точки
немного корректируются.
И ошибка,
которая копилась
полчаса,
почти исчезает.
Pose Graph
Теперь карта
уже представляет собой
не просто набор точек.
Она становится
графом.
Узел графа —
это
положение камеры.
●────●────●────●
Ребро —
измерение
между двумя камерами.
Когда найден
Loop Closure,
добавляется
новое ребро.
Получается.
●────●────●────●
│ │
└───────────────┘
Теперь граф
становится замкнутым.
Pose Graph Optimization
После добавления нового ребра
запускается
глобальная оптимизация.
Используются
те же библиотеки:
- g2o
- GTSAM
- Ceres Solver
Но теперь оптимизируются
не точки,
а вся траектория.
Почему ORB-SLAM3 считается настолько надежным?
Потому что
Loop Closure
работает
в отдельном потоке.
Пока
Front-End
обрабатывает
новые кадры,
Loop Thread
ищет
повторные места.
Если они найдены,
Back-End
перестраивает карту,
не останавливая полет.
Что происходит на практике?
Представим квадрокоптер, выполняющий инспекцию солнечной электростанции.
Он пролетает вдоль первого ряда панелей, затем второго, третьего и, наконец, возвращается к месту старта.
Если Loop Closure отсутствует, траектория постепенно «уплывает», и к концу миссии карта может оказаться смещенной на несколько метров.
Если же система распознает место старта и подтверждает это геометрически, вся накопленная ошибка распределяется по траектории. В результате координаты становятся значительно ближе к реальным, а карта замыкается без заметного разрыва.
Современные системы распознавания мест
Bag of Words по-прежнему широко применяется благодаря своей скорости, однако сегодня активно используются и нейросетевые методы.
Наиболее известные:
- NetVLAD — формирует глобальный дескриптор сцены, устойчивый к изменениям ракурса и освещения.
- OpenVPRLab — современная платформа для исследований в области Visual Place Recognition.
- CosPlace — модель для распознавания мест в крупных городах и на больших расстояниях.
Именно такие подходы постепенно приходят на смену классическим словарям визуальных признаков.
Практический вывод
Можно сказать, что:
- Visual Odometry отвечает: «Куда я только что переместился?»
- Bundle Adjustment отвечает: «Давайте уточним всю историю движения.»
- Loop Closure отвечает: «Я снова оказался в уже знакомом месте.»
Без Loop Closure любая система со временем превращается в очень хорошую одометрию с неизбежным дрейфом.
С Loop Closure она становится настоящей системой Simultaneous Localization and Mapping.
Часть 9. Visual-Inertial SLAM (VIO) — как камера и IMU вместе удерживают дрон без GPS
«Камера видит мир, но видит редко. IMU ничего не видит, но чувствует каждое движение. Только вместе они позволяют дрону зависать в воздухе там, где GPS давно перестал работать.»
Самый главный вопрос
Вернемся к задаче, с которой начиналось наше руководство.
Представьте квадрокоптер.
Высота:
200 метров
GPS отсутствует.
ГЛОНАСС отсутствует.
Радиомаяков нет.
Ветер:
8 м/с
Порывы —
до
12 м/с
Можно ли удержать аппарат в одной точке?
Ответ —
да.
Но только при условии, что работают сразу несколько систем.
Главная из них —
Visual-Inertial SLAM.
Почему одной камеры недостаточно?
Представим, камера работает с частотой
30 FPS
Это означает:
новый кадр приходит каждые
33 миллисекунды
Для человека это мгновение.
Для квадрокоптера — вечность.
Что происходит за 33 миллисекунды?
Представим небольшой порыв ветра.
За
33 мс
аппарат уже успел:
- накрениться;
- изменить скорость;
- начать вращение;
- сместиться на несколько сантиметров.
Но камера еще ничего не увидела.
Получается,
контроллер "слеп".
А теперь посмотрим на IMU
Современный инерциальный модуль работает:
400 Гц
1000 Гц
2000 Гц
То есть новое измерение приходит каждые
1 миллисекунду
или даже быстрее.
Получается интересная картина.
Камера говорит:
Где я был 30 миллисекунд назад.
IMU говорит:
Что происходит прямо сейчас.
Камера и IMU идеально дополняют друг друга
Именно поэтому инженеры часто используют такую аналогию.
Камера —
это
глаза.
IMU —
это
вестибулярный аппарат человека.
Попробуйте закрыть глаза.
Вы всё равно ощущаете:
- поворот головы;
- ускорение;
- наклон.
Это делает внутреннее ухо.
Точно так же работает IMU.
Что находится внутри IMU?
Типичный модуль содержит два основных датчика.
Гироскоп
Измеряет угловую скорость.
Например.
Roll
12°/с
Pitch
−4°/с
Yaw
18°/с
Он отвечает на вопрос:
Насколько быстро вращается аппарат?
Акселерометр
Измеряет ускорение.
Например.
X
0.18 g
Y
−0.03 g
Z
1.02 g
Он отвечает:
Какие силы сейчас действуют на дрон?
Почему IMU недостаточно?
Представим идеальный эксперимент.
Дрон неподвижен.
На самом деле
скорость
0
Но акселерометр измерил
0.015 м/с²
Крошечная ошибка.
Контроллер начинает интегрировать.
Через минуту появляется ложная скорость.
Через пять минут —
ложное положение.
Это называется
дрейф IMU.
А камера?
У камеры противоположная проблема.
Она практически не имеет накопленного дрейфа.
Если дрон снова увидел тот же угол здания,
камера мгновенно понимает:
Я снова здесь.
Но между кадрами она ничего не знает.
Получается удивительная ситуация.
| Камера | IMU |
|---|---|
| Очень точная | Менее точная |
| Медленная | Очень быстрая |
| Не любит темноту | Не зависит от света |
| Нет накопленного дрейфа | Ошибка постепенно растет |
Получается,
недостатки одной системы
идеально компенсируются достоинствами другой.
Sensor Fusion
Объединение датчиков называется
Sensor Fusion.
Это одна из самых сложных задач современной робототехники.
Как происходит объединение?
Представим временную шкалу.
0 мс
IMU
IMU
IMU
IMU
IMU
IMU
Камера
IMU
IMU
IMU
IMU
Камера
Пока камера молчит,
контроллер использует IMU.
Как только приходит новый кадр,
камера корректирует накопившийся дрейф.
Preintegration — одно из важнейших открытий
Раньше использовали все измерения IMU по отдельности.
Это было очень дорого вычислительно.
В 2015 году группа Кристиана Форстера (ETH Zurich) предложила алгоритм IMU Preintegration.
Суть идеи:
вместо обработки сотен отдельных измерений между двумя кадрами они объединяются в одно компактное инерциальное ограничение.
Это резко уменьшило вычислительную нагрузку и стало стандартом практически для всех современных VIO-систем.
Работа:
Forster et al. "IMU Preintegration on Manifold" (RSS 2015) — одна из наиболее цитируемых статей в этой области.
Как выглядит поток данных?
IMU
│
├──────────────┐
│ │
▼ │
Preintegration │
│
Камера───────────┘
│
▼
Feature Tracking
│
▼
Совместная оптимизация
│
▼
6DoF
Именно эта схема лежит в основе большинства современных VIO.
EKF или Factor Graph?
Сегодня существуют две основные школы.
Первая
Extended Kalman Filter
(EKF)
Это развитие классического фильтра Калмана.
Он постоянно поддерживает
текущее состояние системы.
После каждого нового измерения
оно немного корректируется.
Преимущества:
- высокая скорость;
- небольшие требования к памяти;
- отлично подходит для микроконтроллеров.
Недостатки:
- трудно учитывать большое количество старых наблюдений;
- накопление ошибок выше.
Вторая школа
Factor Graph
Именно она сейчас доминирует.
Вместо фильтра
строится граф.
Каждый узел —
положение камеры.
Каждое ребро —
измерение.
Получается огромная сеть ограничений.
●────●────●────●
│ │ │
●────●────●────●
Теперь оптимизируется
не последнее измерение,
а вся история движения.
Именно поэтому современные проекты,
такие как ORB-SLAM3,
OpenVINS
и VINS-Fusion,
используют факторные графы.
Самые известные Visual-Inertial системы
VINS-Mono
Один из наиболее известных открытых проектов.
Особенности:
- одна камера;
- IMU;
- Loop Closure;
- глобальная оптимизация.
Репозиторий:
VINS-Mono
GitHub
VINS-Fusion
Следующее поколение.
Поддерживает:
- несколько камер;
- GPS;
- IMU;
- Loop Closure.
Репозиторий:
VINS-Fusion GitHub
OpenVINS
Один из наиболее чисто реализованных академических проектов.
Особенности:
- MSCKF;
- высокая скорость;
- отличная документация.
Репозиторий:
OpenVINS GitHub
Basalt
Современная система Visual-Inertial SLAM от исследователей ETH Zurich.
Особенности:
- высокая производительность;
- поддержка стереокамер;
- оптимизация под современные процессоры.
Репозиторий:
Basalt GitHub
Почему DJI зависает так стабильно?
Хотя внутренние алгоритмы DJI не опубликованы, по патентам, научным публикациям и поведению аппаратов можно сделать обоснованный вывод, что современные профессиональные дроны используют комбинацию нескольких источников данных:
- IMU высокой частоты;
- барометр;
- GNSS;
- камеры визуального позиционирования;
- иногда стереокамеры или датчики глубины.
Все эти данные объединяются системой оценки состояния (state estimation), которая непрерывно уточняет положение аппарата. Конкретная архитектура является коммерческой тайной, поэтому утверждать использование определённого алгоритма (например, ORB-SLAM3 или VINS-Mono) нельзя.
А можно ли зависать на 200 метрах без GPS?
Теперь возвращаемся к самому интересному вопросу.
Теоретически — да.
Но только при соблюдении нескольких условий.
Необходимы:
- Хорошая текстура под дроном (дороги, здания, поля с выраженной структурой).
- Достаточное освещение.
- Качественная камера с глобальным затвором.
- Хорошо откалиброванная IMU.
- Высокопроизводительный вычислитель (например, NVIDIA Jetson Orin, Qualcomm RB5 или аналогичный).
- Современный VIO/SLAM.
Если же под аппаратом:
- снег;
- вода;
- густой туман;
- однородное поле;
- ночное небо,
визуальная навигация резко ухудшается, поскольку системе становится трудно находить устойчивые ориентиры.
Что будет в следующей главе?
До этого момента мы рассматривали камеры как основной источник информации.
Однако существует другой класс систем, который всё чаще применяется в промышленной робототехнике и автономных автомобилях — LiDAR SLAM.
В следующей части мы подробно разберём:
- почему лидар способен работать ночью и в условиях слабого освещения;
- как устроены современные 16-, 32-, 64- и 128-лучевые лидары;
- что такое ICP (Iterative Closest Point), NDT (Normal Distributions Transform) и LOAM (Lidar Odometry and Mapping);
- чем Visual SLAM отличается от LiDAR SLAM;
- почему самые надёжные автономные платформы используют гибридный подход Visual–LiDAR–Inertial SLAM.
Это позволит понять, почему в современных автономных системах камеры и лидары всё чаще работают совместно, а не конкурируют друг с другом.
Часть 10. LiDAR SLAM — когда беспилотник «видит» мир лазером вместо камеры
«Камера видит цвета. LiDAR видит расстояния. Именно поэтому ночью лидар часто оказывается полезнее человеческого зрения.»
Почему инженеры начали использовать LiDAR?
К этому моменту мы уже подробно изучили Visual SLAM.
Он прекрасно работает:
- днем;
- в городе;
- над дорогами;
- внутри помещений.
Но теперь представим другую задачу.
Беспилотник инспектирует линию электропередачи ночью.
Камера видит вот это:
████████████
████████████
████████████
Практически ничего.
Для Visual SLAM работа становится крайне сложной.
Теперь включается LiDAR.
Через доли секунды появляется трехмерное облако точек.
- •
- •
- •
- •
- •
- •
Освещение больше не имеет значения.
Что такое LiDAR?
LiDAR (Light Detection and Ranging) — это активный дальномер.
Он не наблюдает отраженный солнечный свет.
Он сам излучает лазерный импульс.
Как измеряется расстояние?
Работает очень просто.
Лазер испускает короткий импульс.
LiDAR
→
Дом
←
Измеряется время,
за которое импульс вернулся обратно.
Используется известная формула:
Расстояние =
скорость света
×
время
/
2
Деление на два необходимо,
потому что луч проходит путь
туда
и обратно.
Насколько это быстро?
Скорость света:
299 792 458 м/с
Если объект находится
в
100 метрах,
луч возвращается примерно через
667 наносекунд
То есть менее одной миллионной доли секунды.
Из одной точки получается карта
Представим,
LiDAR сделал
одно измерение.
•
Затем повернулся
на
0,2°.
Получилась следующая точка.
- •
Еще поворот.
- • •
Через доли секунды
получается
облако из миллионов точек.
Point Cloud
Так называется основной результат работы лидара.
Не изображение.
Не фотография.
А множество координат.
Например.
P1
X=4.12
Y=8.54
Z=2.17
---------
P2
X=4.16
Y=8.61
Z=2.18
И так
сотни тысяч раз.
Почему Point Cloud лучше фотографии?
Представим стену.
Фотография:
██████████
Что известно?
Только цвет.
Теперь облако точек.
X
Y
Z
Известны реальные координаты поверхности.
Поэтому можно измерить:
- расстояние;
- объем;
- угол;
- уклон;
- высоту.
Типы лидаров
Сегодня существует несколько архитектур.
Механический LiDAR
Самый известный.
Вращается вся головка.
Например:
- Ouster OS1
- Velodyne Alpha Prime
Преимущества:
- большой угол обзора;
- высокая дальность;
- отличная точность.
Недостатки:
- подвижные части;
- масса;
- стоимость.
Solid-State LiDAR
Никаких вращающихся элементов.
Сканирование производится электронным способом.
Например:
- Livox Mid-360
- Hesai XT32M2X
Преимущества:
- компактность;
- надежность;
- меньшая цена;
- высокая виброустойчивость.
Именно такие лидары всё чаще устанавливаются на БПЛА.
Сколько лучей бывает?
Очень часто можно услышать:
16 Beam
32 Beam
64 Beam
128 Beam
Это означает количество одновременно работающих лазерных каналов.
16 лучей
•
•
•
•
•
Подходит:
- небольшим роботам;
- простым БПЛА;
- картографированию.
64 луча
••••••••••••••
••••••••••••••
••••••••••••••
Получается уже очень плотная карта.
Именно такие системы долгое время использовались в автономных автомобилях.
Но как построить карту?
Получили
два облака точек.
Первое.
●●●●
●●●●
Через секунду —
второе.
●●●●
●●●●
Теперь нужно определить,
насколько сместился лидар.
ICP
Самый известный алгоритм.
Iterative Closest Point
Идея ICP
Представим два облака.
Первое.
●
●
●
Второе.
○
○
○
Необходимо
сдвигать,
вращать
и поворачивать
второе облако,
пока точки максимально не совпадут.
Получается.
●○
●○
●○
Это и есть
ICP.
Почему ICP работает медленно?
Представим.
Одно облако содержит
300 000 точек
Второе —
столько же.
Для каждой точки
нужно найти
ближайшую.
Получаются
десятки миллиардов сравнений.
Поэтому современные реализации используют:
- KD-Tree;
- Octree;
- GPU.
Point-to-Point ICP
Самый простой вариант.
Минимизируется расстояние между точками.
●----------○
Работает хорошо,
но чувствителен к шуму.
Point-to-Plane ICP
Более современный вариант.
Минимизируется расстояние
не до точки,
а до поверхности.
────────────
○
Получается значительно быстрее
и точнее.
Практически все современные проекты используют именно этот подход.
NDT
Еще один популярный алгоритм.
Normal Distributions Transform
Вместо хранения отдельных точек
пространство разбивается
на кубики.
В каждом кубике
строится
нормальное распределение.
Получается гладкая математическая модель.
Почему NDT иногда лучше ICP?
Представим лес.
ICP пытается совместить
миллионы листьев.
NDT описывает
весь участок
несколькими распределениями.
Поэтому вычислений
становится меньше.
LOAM — революция 2014 года
Настоящий прорыв произошел после публикации статьи:
LOAM (Lidar Odometry and Mapping).
Авторы предложили разделить вычисления.
Быстрый поток.
LiDAR
↓
Odometry
100 Гц
Медленный поток.
LiDAR
↓
Mapping
10 Гц
Получилось одновременно:
- быстро;
- точно.
Эта идея до сих пор используется во многих современных системах.
Современные наследники LOAM
Сегодня существует целое семейство алгоритмов.
A-LOAM
Упрощенная открытая реализация LOAM.
Репозиторий:
- A-LOAM GitHub
FAST-LIO2
Один из самых быстрых современных LiDAR–IMU SLAM.
Особенности:
- объединение IMU и LiDAR;
- работа в реальном времени;
- высокая устойчивость.
Репозиторий:
- FAST-LIO2 GitHub
LIO-SAM
Одна из лучших современных систем.
Использует:
- LiDAR;
- IMU;
- факторные графы;
- GTSAM.
Репозиторий:
- LIO-SAM GitHub
Почему LiDAR не заменил камеры?
Может показаться,
что лидар лучше во всем.
Но это не так.
Представим белую стену.
Для камеры:
██████████
Почти нет текстуры.
Visual SLAM испытывает трудности.
Лидар измерит её форму идеально.
Теперь посмотрим на дорожный знак.
Камера сразу распознает:
- текст;
- цвет;
- символы.
Лидар увидит только плоскую пластину.
Поэтому эти технологии решают разные задачи.
Сравнение технологий
| Характеристика | Visual SLAM | LiDAR SLAM |
|---|---|---|
| Работа ночью | Ограничена | Отличная |
| Работа в тумане | Сильно ухудшается | Частично сохраняется |
| Цветовая информация | Есть | Нет |
| Геометрическая точность | Высокая | Очень высокая |
| Масса оборудования | Низкая | Выше |
| Стоимость | Ниже | Значительно выше |
| Энергопотребление | Низкое | Выше |
Что используют современные автономные БПЛА?
Наиболее совершенные системы практически никогда не полагаются только на один тип сенсоров.
Типовая архитектура выглядит так:
Камеры
│
▼
Visual SLAM
│
├────────┐
│ │
▼ ▼
IMU ───► Sensor Fusion ◄─── LiDAR
│
▼
State Estimation
│
▼
Автопилот PX4 / ArduPilot
│
▼
Управление полётом
Именно такой подход называют мультимодальной навигацией (Multi-Sensor Fusion). Если один датчик временно теряет качество данных (например, камера в сумерках или лидар под сильным дождём), остальные продолжают поддерживать оценку положения аппарата.
Практический вывод
Для задачи, с которой началось наше исследование — удержание беспилотника на высоте около 200 метров без GPS, — лидар не является универсальным решением.
На такой высоте большинство компактных лидаров уже работает на пределе дальности и получает недостаточно плотное облако точек для точного позиционирования относительно земли. Кроме того, масса, энергопотребление и стоимость делают их менее привлекательными для небольших БПЛА.
Поэтому в современных беспилотниках чаще применяется комбинация:
- Visual-Inertial SLAM — как основной источник локализации;
- LiDAR — для картографирования, обхода препятствий и повышения надёжности в сложных условиях;
- барометр, магнитометр и другие датчики — для дополнительной стабилизации.
Часть 11. Аппаратная архитектура автономного БПЛА — какое оборудование действительно необходимо для полета без GPS
«Алгоритм может быть идеальным, но если камера смазывает изображение, а IMU шумит, никакой SLAM не спасет аппарат.»
От алгоритмов к реальному железу
Мы уже подробно рассмотрели:
- Feature Detection;
- Visual Odometry;
- Bundle Adjustment;
- Loop Closure;
- Visual-Inertial SLAM;
- LiDAR SLAM.
Теперь пришло время ответить на главный инженерный вопрос.
Какое оборудование действительно используется в современных системах автономной навигации?
Именно на этом этапе большинство любительских проектов начинает существенно отличаться от промышленных решений.
Полная архитектура автономного дрона
Современный автономный БПЛА можно представить как несколько взаимосвязанных уровней.
Миссия
│
▼
Планировщик маршрута
│
▼
Навигация (SLAM/VIO)
│
▼
State Estimation (EKF)
│
▼
Автопилот PX4 / ArduPilot
│
▼
ESC → Двигатели → Винты
SLAM вообще не управляет моторами.
Он только отвечает на вопрос:
"Где сейчас находится аппарат?"
Какие датчики необходимы?
Практически любой современный автономный БПЛА использует следующий набор.
Камера
↓
IMU
↓
Барометр
↓
Магнитометр
↓
GPS (если доступен)
↓
Иногда LiDAR
↓
Иногда Radar
↓
Иногда UWB
Все они поступают в систему оценки состояния.
Камера — самый важный датчик Visual SLAM
От качества камеры зависит больше половины успеха.
Большинство новичков выбирает камеру по разрешению.
Это ошибка.
Для SLAM гораздо важнее:
- глобальный затвор;
- низкий уровень шума;
- высокая частота кадров;
- хороший динамический диапазон;
- стабильная экспозиция.
Rolling Shutter — главный враг дрона
Большинство дешевых камер используют
Rolling Shutter.
Что происходит?
Матрица считывается построчно.
────────────
────────────
────────────
────────────
Если дрон быстро вращается,
верх изображения уже снят,
а низ —
еще нет.
Получается
искривление объектов.
Например.
Настоящая башня
│
│
│
│
Rolling Shutter
/
/
/
/
SLAM воспринимает такие искажения как движение сцены.
Ошибка резко возрастает.
Global Shutter
Профессиональные камеры работают иначе.
Все пиксели экспонируются одновременно.
██████████
██████████
██████████
Никаких перекосов.
Именно поэтому почти все промышленные системы используют Global Shutter.
Лучшие камеры для Visual SLAM
Sony IMX296
Очень популярный промышленный сенсор.
Особенности:
- Global Shutter;
- высокая чувствительность;
- хорошая работа ночью.
Документация:
- Sony IMX296
Sony IMX568
Одно из самых современных решений.
Преимущества:
- высокая скорость;
- низкий шум;
- широкий динамический диапазон.
FLIR Blackfly S
Один из стандартов исследовательских лабораторий.
Особенности:
- аппаратная синхронизация;
- Global Shutter;
- высокая стабильность.
Официальный сайт:
- FLIR Blackfly S
Почему объектив не менее важен?
Даже лучшая камера бесполезна,
если установлен дешевый объектив.
Критические параметры:
- минимальная дисторсия;
- высокая резкость по краям;
- отсутствие люфта;
- фиксированное фокусное расстояние.
IMU — сердце системы
Если камера —
глаза,
то IMU —
вестибулярный аппарат.
Большинство современных модулей включает:
Гироскоп
+
Акселерометр
Иногда добавляют
магнитометр.
MEMS или FOG?
Существует несколько классов IMU.
MEMS
Используются почти во всех БПЛА.
Преимущества:
- компактность;
- низкая цена;
- небольшой вес.
Недостаток —
дрейф.
FOG (Fiber Optic Gyroscope)
Используют интерференцию света в оптоволокне.
Преимущества:
- чрезвычайно малый дрейф;
- высокая точность.
Недостатки:
- высокая стоимость;
- большие размеры;
- большее энергопотребление.
FOG чаще применяется в авиации, морских системах и высокоточных инерциальных навигационных комплексах, чем на малых квадрокоптерах.
Популярные IMU
Bosch BMI088
Один из наиболее популярных датчиков для дронов.
Особенности:
- хорошая виброустойчивость;
- низкий шум.
Документация:
- Bosch BMI088
InvenSense ICM-42688-P
Очень распространен в современных полетных контроллерах.
Особенности:
- высокая частота измерений;
- низкое энергопотребление.
Документация:
- ICM-42688-P
Analog Devices ADIS16470
Промышленный класс.
Используется:
- роботами;
- наземной техникой;
- автономными платформами.
Документация:
- ADIS16470
Барометр
Многие недооценивают этот датчик.
На практике именно он удерживает высоту гораздо стабильнее, чем IMU.
Наиболее популярны:
- Bosch BMP388;
- Infineon DPS310.
Барометр не знает абсолютной высоты над уровнем моря с высокой точностью, но отлично фиксирует относительные изменения высоты.
Магнитометр
Используется для определения курса.
Однако рядом с:
- линиями электропередачи;
- металлическими конструкциями;
- мощными электродвигателями;
- средствами радиоэлектронной борьбы,
его показания могут существенно искажаться.
Поэтому современные системы стараются не делать магнитометр единственным источником информации о курсе.
Вычислительная платформа
Теперь переходим к самому дорогому компоненту.
Raspberry Pi 5
Подходит:
- обучение;
- небольшие роботы;
- эксперименты.
Недостаток —
недостаточная производительность для сложного Visual SLAM с нейросетями.
NVIDIA Jetson Orin Nano
Сегодня одна из самых популярных платформ.
Преимущества:
- GPU;
- CUDA;
- TensorRT;
- поддержка ROS2.
Официальный сайт:
- Jetson Orin Nano
NVIDIA Jetson Orin NX
Используется во многих промышленных проектах.
Позволяет одновременно выполнять:
- Visual SLAM;
- обнаружение объектов;
- планирование маршрута;
- нейронные сети.
Qualcomm RB5
Очень интересная альтернатива.
Особенности:
- низкое энергопотребление;
- встроенный AI Accelerator;
- хорошая интеграция с камерами.
Официальный сайт:
- Qualcomm Robotics RB5 Platform
Полетный контроллер
SLAM не заменяет автопилот.
Обычно используются:
PX4
Открытая архитектура.
Поддерживает:
- MAVLink;
- ROS2;
- внешние системы навигации.
Официальный сайт:
- PX4 Autopilot
ArduPilot
Еще одна популярная открытая система.
Поддерживает:
- самолеты;
- квадрокоптеры;
- наземных роботов;
- катера.
Официальный сайт:
- ArduPilot
Как все соединяется?
Полная схема современного автономного БПЛА выглядит так.
Камера
│
▼
Visual Front-End
│
▼
Visual-Inertial SLAM
▲ │
│ ▼
IMU State Estimation
│
Барометр ──────┤
│
Магнитометр ──────┤
│
GPS ─────────┤ (если доступен)
▼
MAVLink ODOMETRY
▼
PX4 / ArduPilot
▼
Контроллер PID
▼
ESC ×4
▼
Двигатели
Самая распространенная ошибка начинающих
Многие считают:
"Достаточно купить дорогую камеру."
Это неверно.
SLAM — это система.
Если хотя бы один компонент работает плохо, страдает вся цепочка.
Типичные проблемы:
- вибрации двигателя передаются на IMU;
- объектив плохо закреплен;
- камера не синхронизирована с IMU;
- неправильная калибровка внутренних параметров камеры;
- плохая временная синхронизация между датчиками.
На практике именно калибровка и синхронизация часто оказываются важнее, чем выбор самой дорогой камеры или вычислителя.
Практический пример конфигурации
Для создания экспериментального автономного квадрокоптера с удержанием позиции без GPS сегодня можно рассматривать следующий стек:
| Компонент | Рекомендуемый вариант |
|---|---|
| Камера | FLIR Blackfly S или модуль на Sony IMX296 (Global Shutter) |
| IMU | BMI088 или ICM-42688-P |
| Вычислитель | NVIDIA Jetson Orin Nano |
| Полётный контроллер | Pixhawk с PX4 |
| ПО | ROS 2 + ORB-SLAM3 или OpenVINS |
| Дополнительно | Барометр, магнитометр, при необходимости лидар для обхода препятствий |
Такой комплект соответствует современной исследовательской архитектуре и позволяет экспериментировать с автономной навигацией в условиях отсутствия GPS.
Часть 12. От камеры до моторов. Как данные SLAM управляют беспилотником
«Большинство начинающих инженеров думают, что SLAM управляет дроном. На самом деле он лишь отвечает на один вопрос: "Где я?". Управление — это задача автопилота.»
Главный миф автономной навигации
Когда говорят:
"Дрон летает на SLAM"
это не совсем верно.
На самом деле SLAM вообще не знает:
- что такое двигатель;
- что такое ESC;
- что такое PID;
- сколько оборотов у моторов.
Для него существует только математика.
На выходе SLAM получает одну очень маленькую структуру данных.
Например:
Position
X = 124.38
Y = -17.24
Z = 203.17
Rotation
Roll = 0.8°
Pitch = -2.3°
Yaw = 187.2°
Всего шесть чисел.
Но именно они становятся основой управления всем беспилотником.
Кто действительно управляет двигателями?
Настоящим пилотом является
Flight Controller
Например:
- PX4
- ArduPilot
Автопилот принимает решения:
- увеличить тягу;
- уменьшить обороты;
- наклониться вперед;
- остановить аппарат;
- выполнить миссию.
Как выглядит полный путь данных?
Представим полет.
Камера делает снимок.
Через несколько миллисекунд начинается длинная цепочка вычислений.
Камера
↓
SLAM
↓
Оценка положения
↓
Автопилот
↓
Контроллер
↓
ESC
↓
Двигатели
На первый взгляд всё выглядит просто.
Но внутри происходит десятки отдельных процессов.
Разделим систему на уровни
Современная архитектура напоминает операционную систему.
Каждый уровень отвечает только за свою задачу.
Уровень 1
Датчики.
Камера
IMU
Барометр
GPS
LiDAR
Уровень 2
Обработка данных.
Visual SLAM
Visual Inertial SLAM
LiDAR SLAM
Уровень 3
State Estimation
Именно здесь объединяются:
- SLAM;
- IMU;
- GPS;
- барометр;
- магнитометр.
Получается единое положение аппарата.
Уровень 4
Контроллер полета.
PX4
или
ArduPilot.
Уровень 5
Низкоуровневое управление.
PWM
DShot
CAN
Уровень 6
ESC.
Уровень 7
Моторы.
Почему нужен ROS?
Представим,
каждый модуль написан
разными инженерами.
SLAM —
одной командой.
Навигация —
другой.
Планировщик —
третьей.
Нужно как-то обмениваться сообщениями.
Именно для этого используется
ROS 2
(Robot Operating System).
Официальный сайт:
- ROS 2 Documentation
ROS — это не операционная система
Несмотря на название,
ROS не заменяет Linux.
Он работает поверх Ubuntu и предоставляет инфраструктуру обмена сообщениями между программами.
Можно представить его как очень быструю "почтовую службу" между процессами.
Что такое Node?
В ROS всё состоит из независимых узлов.
Например.
Camera Node
↓
SLAM Node
↓
Planner Node
↓
PX4 Node
Каждый процесс работает отдельно.
Если один модуль перезапустить,
остальные продолжают работать.
Topics
Как передаются данные?
Через
Topics
Например.
Камера публикует изображения.
/camera/image
SLAM подписывается
на этот канал.
После обработки
создает новый.
/odom
Теперь навигация
подписывается
на
/odom.
Получается
цепочка.
Пример обмена
Камера
↓
/camera/image
↓
ORB-SLAM3
↓
/odom
↓
Planner
↓
/trajectory
↓
PX4
Никаких прямых соединений.
Только публикация сообщений.
Что такое TF?
В любой момент времени
существует сразу несколько координатных систем.
Например.
Мир
↓
Дрон
↓
Камера
↓
IMU
Каждая имеет свои координаты.
Почему это важно?
Представим.
SLAM говорит.
Камера
X = 3
Автопилот спрашивает.
Где находится центр аппарата?
Оказывается,
камера закреплена
не по центру.
Она смещена.
Например.
15 см вперед
4 см вправо
3 см вниз
Следовательно,
координаты камеры
и корпуса
различаются.
TF Tree
ROS постоянно хранит дерево преобразований.
Например.
world
↓
base_link
↓
camera
↓
imu
Благодаря этому
каждый модуль понимает,
где находится любой датчик.
Как SLAM передает координаты PX4?
Через сообщения
MAVLink.
Наиболее важное —
ODOMETRY
Именно оно содержит:
Положение
+
Ориентацию
+
Скорость
+
Угловые скорости
Автопилот воспринимает эти данные
как внешнюю навигационную систему.
Что происходит дальше?
Представим,
SLAM сообщил:
X
125.12
Через
20 миллисекунд
получаем:
125.16
Контроллер понимает,
что аппарат сместился
на
4 сантиметра.
Теперь он вычисляет,
какой наклон нужен,
чтобы вернуть аппарат обратно.
PID-регулятор
Самый известный алгоритм управления.
Он постоянно вычисляет:
Ошибка
↓
Коррекция
↓
Ошибка
↓
Коррекция
Например.
Нужно удерживать
координату
X=0
Но SLAM сообщил:
X=0.14
Получаем ошибку.
Контроллер немного уменьшает тягу
одной пары двигателей
и увеличивает другой.
Аппарат возвращается обратно.
Почему всё должно работать быстро?
Представим задержку.
SLAM работает
не за
20 миллисекунд,
а за
Получается.
Ветер
↓
Аппарат уже улетел
↓
SLAM только заметил
Контроллер начинает исправлять
ошибку,
которая уже давно устарела.
Появляются колебания.
Поэтому задержка —
один из важнейших параметров.
Частоты работы разных систем
| Система | Типичная частота |
|---|---|
| IMU | 400–2000 Гц |
| Контур стабилизации PX4 | 250–1000 Гц |
| Камера | 30–120 Гц |
| Visual SLAM | 20–60 Гц |
| Планировщик маршрута | 1–20 Гц |
| Обновление миссии | <1 Гц |
Из таблицы видно,
что SLAM далеко не самый быстрый модуль.
Поэтому он не управляет моторами напрямую.
Внешняя навигация (External Vision)
И PX4, и ArduPilot поддерживают режим,
в котором GPS полностью заменяется внешней системой позиционирования.
Источником могут быть:
- ORB-SLAM3;
- OpenVINS;
- VINS-Fusion;
- Motion Capture;
- UWB.
Для автопилота это просто другой источник координат.
Как выглядит полный программный стек?
Камера
│
▼
ROS Camera Driver
│
▼
ORB-SLAM3 / OpenVINS
│
/odom /tf
│
▼
MAVROS / Micro XRCE-DDS
│
▼
PX4
│
▼
EKF2 / Estimator
│
▼
Position Controller
│
▼
Attitude Controller
│
▼
Rate Controller
│
▼
ESC
│
▼
Двигатели
Архитектура современных автономных БПЛА
Практически все современные исследовательские и промышленные платформы строятся по одному принципу:
- Front-End — обработка изображений и поиск признаков.
- Back-End — оптимизация карты и траектории.
- State Estimator — объединение данных всех датчиков.
- Mission Planner — принятие решений и построение маршрута.
- Flight Controller — непосредственное управление полётом.
Такое разделение позволяет независимо улучшать каждый компонент системы.
Практический пример
Рассмотрим зависание квадрокоптера на высоте 200 метров без GPS.
За одну секунду происходит примерно следующее:
- IMU выдаёт 1000–2000 измерений.
- Камера передаёт 30–60 кадров.
- VIO вычисляет десятки оценок положения.
- EKF объединяет все данные.
- Контур управления PX4 сотни раз корректирует тягу двигателей.
Пилот видит лишь неподвижный аппарат в небе, но внутри него каждую секунду выполняются тысячи вычислений.
Вывод главы
SLAM — это лишь один, хотя и критически важный, компонент автономной навигации.
Сам по себе он не умеет управлять дроном. Его задача — максимально точно определить положение аппарата в пространстве и передать эту информацию системе управления.
Именно совместная работа SLAM, State Estimation, автопилота и контуров управления делает возможным устойчивый полёт без GPS.
Часть 13. Создание собственного автономного комплекса: от эксперимента до промышленного прототипа
«Самый сложный этап в SLAM — не написать алгоритм. Самый сложный этап — заставить все компоненты работать вместе в реальном мире: камера, IMU, вычислитель, автопилот, вибрации, задержки и окружающая среда.»
1. С чего начинать разработку автономного БПЛА
Главная ошибка начинающих инженеров:
Сначала купить железо, потом думать о программном обеспечении.
Правильный подход обратный.
Сначала определяется задача.
Например:
Задача А
Удержание позиции без GPS.
Требования:
- зависание;
- медленный полет;
- возврат в исходную точку.
Достаточно:
- VIO;
- IMU;
- барометр;
- PX4.
Задача Б
Автономный облёт объекта.
Требуется:
- карта;
- избегание препятствий;
- планирование маршрута.
Нужно:
- SLAM;
- LiDAR или стереокамера;
- вычислитель мощнее.
Задача В
Полностью автономная миссия.
Например:
- поиск объекта;
- распознавание;
- принятие решений.
Добавляются:
- нейронные сети;
- AI Vision;
- планировщик поведения.
2. Архитектура экспериментального комплекса
Начнем с реалистичной системы исследовательского уровня.
Камера
│
▼
NVIDIA Jetson
│
ROS 2 + SLAM/VIO
│
▼
MAVLink
│
▼
PX4 Controller
│
▼
ESC
│
▼
Моторы
3. Выбор вычислительной платформы
Уровень 1 — учебный
Raspberry Pi 5
Подходит для:
- ROS 2;
- простых алгоритмов;
- обучения.
Ограничения:
- сложный SLAM будет работать медленно;
- нет мощного GPU.
Уровень 2 — оптимальный для разработки
NVIDIA Jetson Orin Nano
Это фактически современный стандарт для робототехники.
Возможности:
- CUDA;
- TensorRT;
- ускорение нейросетей;
- обработка камер.
Официальная информация:
NVIDIA Jetson Orin Nano Developer Kit
Подходит для:
- ORB-SLAM3;
- VINS-Fusion;
- OpenVINS;
- YOLO;
- Deep Learning.
Уровень 3 — промышленный
NVIDIA Jetson AGX Orin
Используется в:
- роботах;
- автономных автомобилях;
- промышленных системах.
Преимущества:
- высокая производительность;
- большой запас вычислений.
Недостатки:
- цена;
- энергопотребление.
4. Камерный модуль для SLAM
Здесь нельзя экономить.
Камера должна иметь:
Global Shutter
Обязательно для быстрого движения.
Стабильный FPS
Например:
30–60 кадров/сек.
Хорошую синхронизацию
Критично:
камера должна быть синхронизирована с IMU.
Популярные решения
Intel RealSense
Очень распространённая камера в робототехнике.
Например:
Intel RealSense.
Используется:
- роботами;
- дронами;
- лабораторными платформами.
Официальный проект:
Intel RealSense SDK
Плюсы:
- готовые драйверы;
- глубина;
- ROS-поддержка.
Минусы:
- не все модели имеют Global Shutter.
Luxonis OAK-D
Интересное решение.
Внутри:
- стереокамеры;
- нейронный ускоритель;
- глубина.
Официальный сайт:
Luxonis OAK-D
Подходит для:
- компактных роботов;
- небольших БПЛА.
FLIR Blackfly S
Профессиональный вариант.
Плюсы:
- Global Shutter;
- промышленное качество;
- точная синхронизация.
5. Выбор IMU
Для дрона IMU должна быть:
- низкий шум;
- высокая частота;
- хорошая виброустойчивость.
Хорошие варианты:
Bosch BMI088
Один из самых популярных IMU в робототехнике.
Используется во многих автопилотах.
InvenSense ICM-42688
Современный MEMS-сенсор.
Плюсы:
- высокая частота;
- низкое энергопотребление.
6. Полётный контроллер
Сам вычислитель SLAM не должен управлять моторами.
Для этого нужен отдельный контроллер.
Pixhawk
Самое распространенное семейство.
Использует:
- PX4;
- ArduPilot.
Почему разделяют?
Потому что:
Jetson может зависнуть.
Linux может перезагрузиться.
SLAM может упасть.
Но автопилот должен продолжать удерживать аппарат.
7. Программное обеспечение
Теперь собираем стек.
Операционная система
Обычно:
Ubuntu Linux.
Например:
- Ubuntu 22.04;
- ROS 2 Humble.
ROS 2
Основной коммуникационный слой.
Отвечает за:
- передачу изображений;
- координаты;
- TF;
- управление узлами.
SLAM
Варианты:
ORB-SLAM3
Один из самых известных.
Поддерживает:
- Monocular;
- Stereo;
- RGB-D;
- Visual-Inertial.
Репозиторий:
ORB-SLAM3 GitHub
OpenVINS
Лучше подходит для чистой VIO.
Особенности:
- высокая скорость;
- хорошая документация.
Репозиторий:
OpenVINS GitHub
VINS-Fusion
Хороший компромисс.
Поддерживает:
- несколько камер;
- GPS;
- IMU.
8. Калибровка — самый недооцененный этап
Можно купить оборудование на тысячи евро,
но плохая калибровка уничтожит результат.
Существует несколько типов калибровки.
Внутренняя калибровка камеры
Определяются:
- фокусное расстояние;
- центр изображения;
- дисторсия.
Например:
fx = 520.4
fy = 519.8
cx = 320.1
cy = 240.7
Калибровка камеры и IMU
Нужно узнать:
где находится IMU относительно камеры.
Например:
Camera
↓
10 см вперед
↓
IMU
Используется:
- Kalibr.
Репозиторий:
Kalibr GitHub
9. Вибрации — главный враг SLAM
Дрон является очень сложной платформой.
Источники вибрации:
- моторы;
- пропеллеры;
- рама;
- резонансы.
Что происходит?
IMU получает:
не движение,
а вибрацию.
Например:
Настоящее:
ускорение = 0.01g
Измерение:
ускорение = 0.4g
SLAM начинает думать:
аппарат резко движется.
Как бороться?
Используют:
- балансировку винтов;
- демпферы;
- мягкое крепление IMU;
- фильтры.
10. Первый запуск: только симуляция
Никогда не начинайте сразу с реального полета.
Сначала:
Gazebo
Симулятор физики.
Позволяет:
- создать дрон;
- добавить камеру;
- проверить SLAM.
PX4 SITL
Software In The Loop.
Автопилот работает полностью виртуально.
Схема:
Gazebo
↓
PX4
↓
ROS2
↓
SLAM
11. Реальная последовательность разработки
Правильный порядок:
Этап 1
Запустить камеру.
Проверить:
- FPS;
- задержку;
- качество изображения.
Этап 2
Запустить SLAM на компьютере.
Проверить:
- строится ли карта;
- нет ли дрейфа.
Этап 3
Добавить IMU.
Проверить VIO.
Этап 4
Подключить PX4.
Передавать:
/odometry
Этап 5
Только после этого:
первый автономный полет.
12. Реальная конфигурация уровня R&D
Пример современной исследовательской платформы:
| Компонент | Решение |
|---|---|
| Компьютер | Jetson Orin Nano |
| Камера | OAK-D / FLIR Blackfly |
| IMU | BMI088 |
| Автопилот | Pixhawk + PX4 |
| Middleware | ROS 2 Humble |
| SLAM | ORB-SLAM3 / OpenVINS |
| Связь | MAVLink |
| Калибровка | Kalibr |
13. Почему это всё сложно на высоте 200 метров?
Возвращаемся к исходной задаче.
На 200 метрах появляются новые проблемы:
Масштаб
Мелкие детали становятся меньше.
Камере сложнее находить признаки.
Ветер
Аппарат постоянно корректирует положение.
Потеря текстуры
Например:
- поле;
- снег;
- вода.
SLAM теряет ориентиры.
Освещение
Солнце:
- ослепляет камеру;
- меняет контраст.
Поэтому реальные системы часто используют комбинацию:
Visual-Inertial SLAM
+
Барометр
+
Radar/LiDAR
+
GNSS (если доступен)
+
AI Vision
Главный вывод
Создание автономного БПЛА без GPS — это не один алгоритм.
Это сложная инженерная система, где:
- камера дает информацию о мире;
- IMU дает динамику;
- SLAM строит понимание пространства;
- EKF объединяет данные;
- PX4 управляет полетом;
- моторы реализуют решение.
Именно эта архитектура позволяет современным роботам и беспилотникам работать там, где классическая навигация невозможна.
Часть 14. Сравнение современных SLAM-систем для БПЛА: ORB-SLAM3, VINS-Fusion, OpenVINS, FAST-LIO2 и LIO-SAM
«Не существует лучшего SLAM вообще. Существует лучший SLAM для конкретной задачи, сенсоров и вычислительных ограничений.»
1. Почему выбор SLAM-системы так важен
На бумаге все системы делают одно и то же:
- получают данные сенсоров;
- оценивают положение;
- строят карту;
- уменьшают ошибку.
Но в реальном БПЛА разница огромна.
Одна система может идеально работать внутри помещения.
Другая — на улице.
Третья — на скорости 20 м/с.
Четвертая — при полном отсутствии текстуры.
2. Основные классы SLAM для дронов
Сегодня можно разделить системы на четыре больших класса.
1. Visual SLAM
Использует только камеры.
Пример:
- ORB-SLAM3.
Плюсы:
- легкий;
- дешевый;
- мало энергопотребление.
Минусы:
- зависит от освещения;
- плохо работает без текстуры.
2. Visual-Inertial SLAM (VIO)
Камера + IMU.
Это наиболее распространенный вариант для БПЛА.
Примеры:
- VINS-Fusion;
- OpenVINS;
- ORB-SLAM3 V-I.
3. LiDAR SLAM
Использует лазерный сканер.
Примеры:
- LIO-SAM;
- FAST-LIO2.
Плюсы:
- точная геометрия;
- работает ночью.
Минусы:
- цена;
- вес;
- энергопотребление.
4. Multi-Sensor Fusion
Комбинация:
- камеры;
- IMU;
- LiDAR;
- GPS;
- радар.
Это уровень промышленных систем.
3. ORB-SLAM3
Общая информация
ORB-SLAM3 GitHub
ORB-SLAM3 — одна из самых известных открытых SLAM-систем.
Разработчик:
исследовательская группа Universidad de Zaragoza.
Поддерживаемые режимы
ORB-SLAM3 умеет работать:
Monocular
Одна камера.
Камера
↓
SLAM
Stereo
Две камеры.
Левая камера
+
Правая камера
Позволяет сразу получать глубину.
RGB-D
Камера + датчик глубины.
Например:
RealSense.
Visual-Inertial
Камера + IMU.
Наиболее интересный режим для БПЛА.
Архитектура ORB-SLAM3
Camera
↓
ORB Feature Extraction
↓
Tracking
↓
Local Mapping
↓
Loop Closing
↓
Global Optimization
Сильные стороны
1. Отличный Loop Closure
Одна из лучших сторон системы.
Она хорошо понимает:
"Я уже был здесь."
2. Работа с долгими маршрутами
Можно пройти:
- несколько комнат;
- большие здания;
- городские улицы.
3. Хорошая научная база
Очень много исследований используют ORB-SLAM3 как эталон.
Недостатки
Для дрона:
- достаточно тяжелый вычислительно;
- требует хорошей настройки;
- чувствителен к плохой камере.
На слабом процессоре может появиться задержка.
4. VINS-Fusion
Репозиторий:
VINS-Fusion GitHub
Основная идея
VINS создавался именно для летательных аппаратов.
Главный акцент:
Visual-Inertial Odometry.
Архитектура
Camera
↓
Feature Tracking
↓
IMU Preintegration
↓
Estimator
↓
Pose Output
Преимущества
1. Очень хорошая скорость
Подходит для:
- квадрокоптеров;
- роботов;
- мобильных платформ.
2. Отличная работа с IMU
Это главное преимущество.
Для дрона это критично.
3. Поддержка GPS
Можно плавно переходить:
GPS есть:
↓
используем GPS
GPS пропал:
↓
переходим на VIO
Недостатки
Loop Closure менее развит,
чем в ORB-SLAM3.
То есть:
для коротких полетов —
отлично.
Для огромных карт —
хуже.
5. OpenVINS
Репозиторий:
OpenVINS GitHub
Философия OpenVINS
Это не просто готовый продукт.
Это исследовательская платформа.
Главный алгоритм:
MSCKF
(Multi-State Constraint Kalman Filter)
Как работает MSCKF?
Вместо хранения всей карты система хранит:
- текущие состояния камеры;
- ограничения между ними.
Это сильно уменьшает вычисления.
Преимущества
Очень высокая скорость
OpenVINS может работать:
- на ARM;
- встроенных компьютерах;
- маломощных системах.
Хорошая стабильность
Особенно:
- внутри помещений;
- на небольших БПЛА.
Недостатки
Нет полноценного SLAM в классическом понимании.
То есть:
- карта ограничена;
- Loop Closure отсутствует или ограничен.
Это скорее:
очень хороший VIO.
6. FAST-LIO2
Репозиторий:
FAST-LIO2 GitHub
Теперь переходим к лидарным системам.
Что делает FAST-LIO2 особенным?
Он объединяет:
- LiDAR;
- IMU.
То есть:
LIO
=
LiDAR-Inertial Odometry.
Главная идея
Вместо тяжелого сопоставления облаков точек используется:
ikd-tree
динамическое дерево ближайших соседей.
Это позволяет:
- быстро добавлять точки;
- быстро искать соответствия.
Преимущества
Очень высокая скорость.
Может работать:
- на дронах;
- роботах;
- автономных машинах.
Где он лучше Visual SLAM?
Например:
Ночь.
Камера:
████████
LiDAR:
- • • • •
- • • • •
Недостатки
Нужен хороший LiDAR.
А это:
- масса;
- цена;
- энергопотребление.
7. LIO-SAM
Репозиторий:
LIO-SAM GitHub
Архитектура
Использует:
- LiDAR;
- IMU;
- факторный граф;
- GTSAM.
Схема:
LiDAR
↓
Feature Extraction
↓
Scan Matching
↓
Factor Graph
↓
Optimization
↓
Map
Преимущества
Очень высокая точность.
Особенно:
- большие территории;
- картография;
- наземные роботы.
Недостатки
Для маленького дрона:
может быть слишком тяжелым.
8. Сравнительная таблица
| Система | Сенсоры | Скорость | Карта | Для БПЛА |
|---|---|---|---|---|
| ORB-SLAM3 | Камера/IMU | Средняя | Отличная | Хорошо |
| VINS-Fusion | Камера/IMU/GPS | Высокая | Средняя | Отлично |
| OpenVINS | Камера/IMU | Очень высокая | Ограниченная | Отлично |
| FAST-LIO2 | LiDAR/IMU | Очень высокая | Хорошая | Отлично |
| LIO-SAM | LiDAR/IMU | Средняя | Отличная | Хорошо |
9. Что выбрать для зависания на 200 метрах?
Теперь отвечаем на исходную задачу.
Вариант 1
Бюджетный БПЛА.
Цель:
удержание точки.
Оптимально:
Камера Global Shutter
+
IMU
+
OpenVINS
+
PX4
Вариант 2
Исследовательская платформа.
Stereo Camera
+
IMU
+
ORB-SLAM3
+
Jetson Orin
Вариант 3
Промышленный аппарат.
Stereo Camera
+
LiDAR
+
IMU
+
FAST-LIO2
+
VIO Fusion
10. Почему нельзя просто поставить ORB-SLAM3?
Потому что зависание — это не только координаты.
Нужно знать:
- положение;
- скорость;
- ускорение;
- углы;
- угловые скорости.
Для управления важнее не просто:
"где я?"
а:
"куда я движусь?"
Поэтому полноценная система выглядит так:
SLAM
↓
Position
Velocity
Orientation
↓
EKF
↓
PX4
↓
Control
11. Архитектура уровня современных систем
Самый надежный вариант сегодня:
Stereo Camera
│
▼
Visual SLAM
│
IMU ────────────────┤
▼
State Estimator
▲
│
LiDAR SLAM
│
▼
PX4 Autopilot
Это называется:
Multi-Modal Localization
12. Главный инженерный вывод
Если задача:
"держать дрон в воздухе без GPS на высоте 200 метров"
то лучший подход сегодня:
не чистый SLAM.
А:
Visual-Inertial Navigation + надежный State Estimation + автопилот.
SLAM нужен для:
- исправления дрейфа;
- построения карты;
- долгих автономных миссий.
Но мгновенная стабилизация выполняется связкой:
IMU → EKF → PX4 → Motors
Часть 15. Навигация без GPS: как беспилотники определяют положение при отсутствии спутниковой навигации
«GPS — это не навигация. GPS — это внешний источник координат. Настоящая автономная навигация начинается тогда, когда аппарат способен понимать своё положение самостоятельно.»
1. Почему GPS нельзя считать надежной системой
Спутниковая навигация кажется идеальной:
- точность несколько метров;
- глобальное покрытие;
- низкая стоимость.
Но у неё есть фундаментальная слабость.
Сигнал от спутника чрезвычайно слабый.
На поверхности Земли его мощность примерно сопоставима с уровнем фонового радиошума.
Это означает:
- его легко заглушить;
- его легко исказить;
- его сложно восстановить внутри помещений.
2. Что происходит при потере GPS?
Обычный аппарат делает следующее:
GPS
↓
Координаты
↓
Автопилот
↓
Коррекция положения
После потери:
GPS
X
↓
Автопилот
?
↓
Дрейф
Аппарат начинает зависеть только от:
- IMU;
- барометра;
- магнитометра.
Через некоторое время появляется ошибка.
3. Основные способы навигации без GPS
Современные автономные системы используют комбинацию методов.
Основные направления:
- Инерциальная навигация.
- Visual Navigation.
- LiDAR Navigation.
- Radar Navigation.
- Terrain Relative Navigation.
- Magnetic Navigation.
- Radio Navigation.
- AI-based Navigation.
4. Инерциальная навигация (INS)
Это самый старый метод.
Он появился задолго до дронов.
Используется:
- самолетами;
- ракетами;
- кораблями;
- подводными аппаратами.
Принцип работы
IMU измеряет:
- ускорение;
- угловую скорость.
Дальше математика интегрирует движение.
Например:
ускорение:
1 м/с²
через секунду:
скорость:
1 м/с
еще через секунду:
положение:
1 метр
Главная проблема — ошибка накапливается
Это называется:
Dead Reckoning
(счисление пути).
Пример:
идеальная траектория:
──────────────
реальная:
──────────╱
Через минуту ошибка может составлять:
- метры;
- десятки метров;
- сотни метров.
Почему военная техника использует INS?
Потому что у неё стоят не обычные MEMS-датчики.
Используются:
FOG
Fiber Optic Gyroscope.
или
RLG
Ring Laser Gyroscope.
Преимущество:
очень маленький дрейф.
Но стоимость:
от тысяч до десятков тысяч евро.
Для маленького дрона это слишком дорого.
5. Visual Navigation
Теперь переходим к главному направлению.
Дрон использует камеру как навигационный прибор.
Человек делает то же самое.
Если вас высадить в незнакомом городе без карты,
вы ориентируетесь:
- по зданиям;
- дорогам;
- знакам;
- ориентирам.
Дрон делает похожую работу.
Visual Odometry
Самый простой вариант.
Камера сравнивает:
кадр 1:
Дом
Дерево
Столб
кадр 2:
Дом
Дерево
Столб
И определяет:
как изменилось положение.
Visual Place Recognition
Более сложная задача.
Вопрос:
"Я когда-нибудь уже был здесь?"
Используется:
- ORB;
- SIFT;
- SuperPoint;
- DINO;
- NetVLAD.
Современная тенденция — нейросетевое зрение
Классический SLAM:
Признаки
↓
Математика
↓
Положение
Новый подход:
Изображение
↓
Нейросеть
↓
Описание сцены
↓
Положение
Примеры современных подходов
SuperPoint
Нейросеть для поиска ключевых точек.
Репозиторий:
SuperPoint GitHub
SuperGlue
Нейросеть для сопоставления признаков.
Используется:
- роботами;
- автономными системами;
- исследованиями SLAM.
DINO / Vision Transformers
Новое направление.
Модель понимает:
не отдельные пиксели,
а смысл сцены.
Например:
"это дорога возле здания".
6. Terrain Relative Navigation (TRN)
Очень интересная технология.
Она используется там,
где GPS недоступен.
Идея
Аппарат сравнивает:
реальную поверхность
с заранее подготовленной картой.
Например:
есть карта высот:
100м 105м 110м
90м 95м 102м
Датчики получают:
95м 96м 101м
Система ищет совпадение.
Где применяется?
- космические аппараты;
- военная авиация;
- автономные платформы.
Пример
Посадка аппарата на Марс.
Спутников GPS нет.
Используется:
- карта поверхности;
- камеры;
- сопоставление рельефа.
7. DSMAC — сравнение изображений местности
Еще один старый, но эффективный метод.
DSMAC:
Digital Scene Matching Area Correlation
Принцип:
Есть эталонное изображение:
─────дорога─────
███ лес ███
дом
Камера получает:
─────дорога─────
███ лес ███
дом
Алгоритм определяет:
где находится аппарат.
8. LiDAR Navigation
Если есть лидар:
дрон может строить локальную карту.
Например:
Стена
│
│
│
Дерево
▲
И сравнивать:
где он находится относительно объектов.
9. Radar Navigation
Очень интересное направление.
Радар имеет преимущества:
- работает ночью;
- работает в тумане;
- меньше зависит от освещения.
Используются:
- миллиметровые радары;
- FMCW Radar.
Они позволяют видеть:
- препятствия;
- поверхность;
- скорость относительно земли.
10. Магнитная навигация
Очень необычный метод.
Земля имеет магнитное поле.
Но оно не идеально однородно.
Есть:
- локальные аномалии;
- изменения структуры пород;
- искусственные объекты.
Можно создать карту магнитного поля.
Затем:
измерить поле
↓
сравнить с картой
↓
определить положение.
11. UWB-навигация
Если есть возможность установить маяки.
Используется:
Ultra Wide Band.
Схема:
Маяк
\
\
Дрон
/
Маяк
Точность:
примерно:
10–30 сантиметров.
Используется:
- складами;
- роботами;
- промышленностью.
12. Самый перспективный вариант — Sensor Fusion
Будущее не за одним датчиком.
А за объединением.
Например:
Камера
│
▼
Visual SLAM
IMU ───────────────┐
LiDAR ────────────┤
Radar ────────────┤
Barometer ────────┤
▼
EKF / Factor Graph
▼
Положение аппарата
13. Как выглядит реальный алгоритм автономного дрона
Каждые несколько миллисекунд:
Шаг 1
IMU сообщает:
"Я повернулся вправо."
Шаг 2
Камера сообщает:
"Я вижу те же объекты, но немного смещенные."
Шаг 3
LiDAR сообщает:
"Расстояние до поверхности изменилось."
Шаг 4
EKF объединяет данные.
Получает:
X
Y
Z
Roll
Pitch
Yaw
Velocity
14. Почему современные системы становятся автономными
Раньше логика была:
GPS
↓
Навигация
↓
Управление
Сегодня:
Сенсоры
↓
Восприятие мира
↓
Понимание ситуации
↓
Навигация
↓
Планирование
↓
Управление
Это уже не просто автопилот.
Это робот.
15. Главный вывод для задачи "зависание на 200 метрах без GPS"
Для такой задачи наиболее реалистичная архитектура:
Минимальная:
- Global Shutter камера;
- IMU;
- Visual-Inertial Odometry;
- PX4 EKF.
Надежная:
- стереокамера;
- IMU высокого качества;
- барометр;
- LiDAR вниз;
- AI Vision.
Промышленная:
- несколько камер;
- LiDAR;
- radar;
- высокоточная IMU;
- несколько независимых алгоритмов локализации.
Итог
GPS — это только один источник координат.
Настоящая автономность начинается там, где аппарат способен:
- видеть окружающий мир;
- строить карту;
- узнавать места;
- оценивать собственное движение;
- прогнозировать ошибку;
- принимать решения.
Именно SLAM является фундаментом этой автономности.
Часть 16. Искусственный интеллект в SLAM: как нейросети меняют автономную навигацию
«Классический SLAM отвечает на вопрос: "Где я нахожусь?" Новый SLAM с искусственным интеллектом начинает отвечать на более сложный вопрос: "Что находится вокруг меня и что это означает?"»
1. Почему классического SLAM уже недостаточно
Классический SLAM построен вокруг геометрии.
Он видит:
- точки;
- линии;
- плоскости;
- расстояния;
- движение камеры.
Например:
Точка 1
X=12.5
Y=4.2
Z=18.7
Для алгоритма это просто координата.
Он не знает:
- это дерево;
- это человек;
- это здание;
- это автомобиль.
Новый этап развития
Современный автономный аппарат должен понимать не только геометрию, но и содержание сцены.
Например:
Старый SLAM:
"Передо мной объект размером 2×3 метра."
AI-SLAM:
"Передо мной припаркованный автомобиль. Он неподвижен. Его можно использовать как ориентир."
2. Что такое Semantic SLAM
Это направление называется:
Semantic SLAM
или
Семантический SLAM.
Идея:
к карте добавляется не только геометрия,
но и смысл.
Обычная карта:
●────────●
●
●────────●
Семантическая карта:
┌────────────┐
│ ЗДАНИЕ │
│ │
│ ДВЕРЬ │
│ │
│ ОКНО │
└────────────┘
ДЕРЕВО
▲
3. Как нейросеть добавляется в SLAM
Классическая схема:
Камера
↓
Feature Extraction
↓
SLAM
↓
Координаты
AI-версия:
Камера
↓
Neural Network
↓
Объекты + признаки
↓
SLAM
↓
Семантическая карта
↓
Координаты
4. Object Detection в SLAM
Самое простое применение AI —
распознавание объектов.
Например:
камера видит:
┌─────────────┐
│ │
│ машина │
│ │
└─────────────┘
Нейросеть сообщает:
Class:
car
Confidence:
96%
Популярные модели:
YOLO
Один из самых известных алгоритмов компьютерного зрения.
Используется для:
- обнаружения объектов;
- робототехники;
- автономных систем.
Проект:
Ultralytics YOLO
5. Почему распознавание объектов помогает SLAM
Представим улицу.
Классический SLAM видит:
- пиксели;
- углы;
- текстуры.
Но машины двигаются.
Это проблема.
Например:
Кадр 1
🚗
Кадр 2
🚗
SLAM может решить:
"Камера движется."
Хотя на самом деле:
машина уехала.
Semantic SLAM говорит:
"Этот объект — автомобиль. Он динамический. Не использовать его как ориентир."
6. Dynamic SLAM
Обычный SLAM предполагает:
мир неподвижен.
Но реальный мир:
- люди ходят;
- машины ездят;
- деревья качаются;
- животные двигаются.
Dynamic SLAM пытается разделить:
Статические объекты
Использовать.
Дом
Стена
Дорога
Динамические объекты
Игнорировать.
Человек
Автомобиль
Животное
7. Deep Visual Odometry
Следующий шаг —
замена классических методов оценки движения камеры.
Классика:
ORB
↓
Matching
↓
Geometry
↓
Pose
Нейросеть:
Image 1
+
Image 2
↓
Neural Network
↓
Motion
Модель учится:
по тысячам примеров:
"какое движение камеры соответствует такому изменению изображения".
Примеры исследований
DeepVO
Одна из первых известных работ.
Идея:
использовать рекуррентные нейросети для оценки движения.
DROID-SLAM
Одна из наиболее современных систем.
Использует:
- глубокие сети;
- корреляционные поля;
- оптимизацию карты.
Репозиторий:
DROID-SLAM GitHub
8. SuperPoint и SuperGlue — мост между классикой и AI
Очень интересный гибридный подход.
Вместо ORB:
используется нейросеть.
SuperPoint
Находит:
- ключевые точки;
- дескрипторы.
SuperGlue
Соединяет точки между кадрами.
Схема:
Кадр А
↓
SuperPoint
↓
Признаки
Кадр Б
↓
SuperPoint
↓
SuperGlue
↓
Совпадения
Преимущество:
- лучше работает при изменении освещения;
- устойчивее к сложным сценам.
9. NeRF — новая революция в картах
Теперь переходим к очень интересному направлению.
Neural Radiance Fields
(нейронные радиансные поля).
Обычная SLAM-карта:
это точки.
•
•
•
•
NeRF-карта:
это модель сцены.
Она может восстановить:
- внешний вид;
- освещение;
- объекты;
- ракурсы.
Идея NeRF
Нейросеть получает:
координату точки
и направление взгляда.
Возвращает:
- цвет;
- плотность.
То есть:
(X,Y,Z)
+
направление камеры
↓
Нейросеть
↓
Цвет сцены
Почему это интересно для дронов?
Представим:
дрон обследовал здание.
Обычный SLAM:
дает облако точек.
NeRF:
может создать почти виртуальную копию объекта.
Можно:
- осматривать объект с другого ракурса;
- измерять повреждения;
- сравнивать изменения.
10. Gaussian Splatting — практический прорыв
Последние годы активно развивается:
3D Gaussian Splatting.
В отличие от NeRF:
он работает значительно быстрее.
Идея:
сцена представляется не точками,
а миллионами маленьких 3D-гауссианов.
Каждый имеет:
- координаты;
- размер;
- цвет;
- прозрачность.
Схема:
Gaussian
◌
◌ ◌
◌ ◌ ◌
Преимущества:
- быстрое построение;
- реалистичный рендеринг;
- подходит для робототехники.
11. AI Planner — следующий уровень
SLAM дает карту.
Но что делать дальше?
Здесь появляется AI-планировщик.
Обычная логика:
Препятствие
↓
Объехать справа
AI:
Обстановка
↓
Анализ ситуации
↓
Выбор поведения
Например:
- человек впереди;
- дверь открыта;
- путь перекрыт.
Система меняет маршрут.
12. Vision-Language Models в роботах
Самое новое направление.
Большие мультимодальные модели начинают использоваться как "мозг" робота.
Например:
Команда:
"Найди красную дверь возле лестницы."
Система:
- понимает запрос;
- ищет объект;
- строит маршрут.
Используются:
- Vision Transformers;
- CLIP-подобные модели;
- большие мультимодальные модели.
13. Но почему AI не заменил классический SLAM?
Потому что есть проблема.
Нейросети:
- мощные;
- гибкие;
- понимают смысл.
Но:
они могут ошибаться.
Например:
AI говорит:
"Это дверь."
Но для управления полетом ошибка координат в 20 сантиметров может быть критичной.
Поэтому сегодня используется гибрид:
Математический SLAM
+
AI восприятие
+
Оптимизация
14. Архитектура будущего автономного дрона
Вероятная архитектура ближайших лет:
Камеры
│
▼
Neural Perception
│
┌───────────┴───────────┐
│ │
Semantic SLAM Classical VIO
│ │
└───────────┬───────────┘
▼
World Model
│
▼
AI Mission Planner
│
▼
PX4
│
Motors
15. Что это означает для беспилотников
Через несколько лет автономный аппарат будет обладать не просто навигацией.
Он будет иметь:
Пространственную память
"Я был здесь вчера."
Понимание объектов
"Это человек, это машина, это здание."
Контекст
"Этот путь безопасен."
Планирование
"Лучше облететь препятствие."
Главный вывод
SLAM эволюционирует от простой геометрии к пониманию мира.
Первое поколение:
Где я?
Второе:
Что вокруг меня?
Третье:
Что происходит вокруг меня и какое действие лучше выполнить?
Именно переход от SLAM к Spatial AI станет фундаментом следующего поколения автономных роботов и беспилотных систем.
Часть 17. Практический проект: создание GPS-denied дрона с Visual-Inertial SLAM
«Автономный дрон без GPS — это не камера, прикрученная к квадрокоптеру. Это распределённая вычислительная система, где сенсоры, алгоритмы и автопилот должны работать как единый организм.»
1. Цель проекта
Создадим архитектуру экспериментального БПЛА, способного:
- удерживать позицию без GPS;
- выполнять автономный полет по заданным точкам;
- оценивать свое положение в пространстве;
- работать при подавлении спутниковой навигации.
Целевая задача:
квадрокоптер массой 2–5 кг, высота работы до нескольких сотен метров, автономная стабилизация и навигация.
2. Общая архитектура системы
Итоговая структура:
Камера
│
▼
Visual-Inertial SLAM
│
▼
Оценка положения
│
▼
EKF
│
▼
PX4
│
▼
Контроллеры PID
│
▼
ESC
│
▼
Двигатели
Но это только часть системы.
Полная архитектура:
┌───────────────┐
│ Stereo Camera │
└───────┬───────┘
│
▼
┌───────────────┐
│ Jetson Orin │
│ ROS 2 + SLAM │
└───────┬───────┘
│ MAVLink
▼
┌───────────────┐
│ Pixhawk/PX4 │
└───────┬───────┘
│
▼
┌───────────────┐
│ Flight Stack │
└───────┬───────┘
│
▼
Motors
3. Выбор рамы
Для SLAM лучше подходят не самые маленькие аппараты.
Причины:
- меньше вибраций;
- больше места для электроники;
- выше время полета;
- проще балансировка.
Малый экспериментальный класс
Размер:
250–450 мм.
Плюсы:
- дешевый;
- безопаснее для тестов.
Минусы:
- мало места;
- сильное влияние вибраций.
Оптимальный класс
Размер:
500–650 мм.
Это наиболее удобная платформа для R&D.
Можно разместить:
- Jetson;
- камеры;
- LiDAR;
- аккумулятор большой емкости.
4. Выбор вычислителя
Вариант 1. Бюджетный
Raspberry Pi 5.
Подходит:
- обучение;
- простые VIO алгоритмы.
Но:
для полноценного SLAM на летящем дроне запас небольшой.
Вариант 2. Оптимальный
NVIDIA Jetson Orin Nano Developer Kit
Почему он популярен:
- GPU CUDA;
- TensorRT;
- низкое энергопотребление;
- поддержка ROS 2.
На нем можно запускать:
- ORB-SLAM3;
- OpenVINS;
- нейросети обнаружения объектов.
Вариант 3. Промышленный
NVIDIA Jetson AGX Orin Developer Kit
Используется, когда одновременно нужны:
- SLAM;
- AI Vision;
- планирование;
- обработка нескольких камер.
5. Выбор камеры
Для автономного полета камера — главный сенсор.
Минимальные требования
Разрешение
Не обязательно 4K.
Чаще важнее:
- стабильность;
- скорость;
- качество матрицы.
Частота кадров
Минимум:
30 FPS.
Лучше:
60 FPS.
Global Shutter
Желательно обязательно.
Примеры камер
Intel RealSense
Intel RealSense SDK
Плюсы:
- готовая экосистема;
- глубина;
- ROS-драйверы.
Минусы:
- не все модели подходят для быстрого движения.
Luxonis OAK-D
Luxonis OAK-D
Особенность:
встроенный нейропроцессор.
Может выполнять:
- распознавание;
- глубину;
- обработку изображения.
FLIR Blackfly S
FLIR Blackfly S
Профессиональный вариант:
- Global Shutter;
- промышленная синхронизация;
- высокая надежность.
6. IMU и размещение датчиков
Критическая ошибка:
ставить IMU где удобно.
Правильно:
IMU должна быть:
- максимально близко к центру масс;
- изолирована от вибраций;
- жестко закреплена.
Типичные датчики:
Bosch BMI088
Bosch BMI088
Популярен благодаря:
- низкому шуму;
- хорошей виброустойчивости.
InvenSense ICM-42688
ICM-42688-P
7. Автопилот
Основная задача:
не SLAM.
А управление полетом.
Популярные варианты:
Pixhawk + PX4
PX4 Autopilot
ArduPilot
ArduPilot
Почему нужен отдельный автопилот?
Представим:
Jetson завис.
Linux обновился.
SLAM остановился.
Но:
PX4 продолжает:
- удерживать крен;
- держать высоту;
- выполнять аварийный режим.
8. Программный стек
Теперь собираем программную часть.
Операционная система
Обычно:
Ubuntu 22.04.
Middleware
ROS 2 Humble.
Он отвечает за:
- обмен сообщениями;
- координаты;
- трансформации;
- управление узлами.
SLAM
Выбор:
Для начала:
OpenVINS.
Почему:
- легче;
- быстрее;
- хорошо подходит для VIO.
Для полноценной карты:
ORB-SLAM3.
9. Калибровка системы
Это один из самых важных этапов.
Камера
Нужно определить:
fx
fy
cx
cy
k1
k2
p1
p2
То есть:
- фокус;
- центр;
- искажения.
Камера + IMU
Нужно определить:
где находится IMU относительно камеры.
Например:
Camera
X + 50 мм
↓
IMU
Инструмент:
Kalibr GitHub
10. Интеграция с PX4
SLAM выдает:
position
orientation
velocity
Например:
X = 15.2 м
Y = 8.7 м
Z = 35.4 м
Yaw = 120°
Эти данные отправляются через:
- MAVLink;
- MAVROS;
- Micro XRCE-DDS.
Схема:
SLAM
↓
Odometry
↓
MAVROS
↓
PX4 EKF2
↓
Position Controller
↓
Motors
11. Испытания
Правильная последовательность:
Этап 1
Статика.
Дрон стоит на столе.
Проверяем:
- камера;
- IMU;
- координаты.
Этап 2
Ручное перемещение.
Носим аппарат руками.
SLAM должен:
- строить карту;
- отслеживать движение.
Этап 3
Первое зависание.
Высота:
1–2 метра.
Не 200 метров.
Этап 4
Открытая площадка.
Постепенно:
- 10 м;
- 50 м;
- 100 м.
12. Почему 200 метров — сложная задача
На большой высоте возникают проблемы.
Проблема 1. Мало деталей
На земле:
камень:
100 пикселей.
На высоте:
5 пикселей.
Проблема 2. Однообразная поверхность
Плохо:
- поле;
- вода;
- снег;
- пустыня.
Хорошо:
- здания;
- дороги;
- лес;
- инфраструктура.
Проблема 3. Освещение
Солнце меняет:
- экспозицию;
- контраст;
- тени.
13. Практическая архитектура для высоты 200 метров
Более надежный вариант:
Stereo Camera
│
▼
Visual-Inertial SLAM
│
IMU ────────────┤
│
Downward LiDAR ─┤
│
Barometer ──────┤
│
▼
EKF
│
▼
PX4
14. Оценка бюджета прототипа
Экспериментальный уровень
Примерно:
1000–2000 €
Включает:
- раму;
- электронику;
- камеру;
- вычислитель;
- автопилот.
R&D уровень
Примерно:
3000–8000 €
Добавляются:
- качественная камера;
- Jetson;
- LiDAR;
- промышленная IMU.
Промышленный уровень
Может превышать:
10000–50000 €
за счет:
- сенсорного комплекса;
- сертификации;
- надежности;
- резервирования.
Главный инженерный вывод
Создание GPS-denied БПЛА — это задача не одного алгоритма.
Рабочая система строится вокруг принципа:
"много независимых источников информации → объединение → оценка состояния → управление"
Именно поэтому лучшие автономные аппараты используют не один SLAM, а целую навигационную архитектуру.
Часть 18. EKF и State Estimation — настоящий «мозг» автономного дрона
«SLAM дает аппарату зрение. IMU дает ощущение движения. Но именно State Estimator превращает разрозненные данные в единую картину: где находится дрон, куда он движется и насколько можно доверять этой информации.»
1. Почему одного SLAM недостаточно
Вернемся к исходной задаче:
дрон должен зависнуть на высоте 200 метров без GPS.
Кажется логичным:
Камера → SLAM → координаты → управление.
Но это не работает.
Причина:
SLAM дает положение с задержкой.
Например:
Камера:
30 кадров/сек.
SLAM:
20–50 расчетов/сек.
А двигатель меняет тягу:
сотни раз в секунду.
Получается:
Двигатели
1000 Гц
PX4
250 Гц
IMU
1000 Гц
SLAM
30 Гц
Если напрямую управлять по SLAM, аппарат будет запаздывать.
2. Что такое State Estimation
State Estimation — это оценка состояния системы.
Состояние дрона можно представить как набор переменных:
[ X = [x,y,z, v_x,v_y,v_z, roll,pitch,yaw, bias] ]
Где:
Положение
x
y
z
Где находится аппарат.
Скорость
vx
vy
vz
Куда он движется.
Ориентация
Roll
Pitch
Yaw
Как он наклонен.
Ошибки датчиков
Например:
смещение IMU.
3. Главная идея EKF
EKF:
Extended Kalman Filter
Расширенный фильтр Калмана.
Это математический механизм объединения нескольких источников информации.
Он постоянно отвечает:
"Какое положение наиболее вероятно с учетом всех измерений?"
4. Почему просто усреднять нельзя
Допустим:
Камера говорит:
X = 10.0 м
IMU говорит:
X = 10.8 м
Барометр:
X = 9.7 м
Кто прав?
Ответ:
зависит от качества каждого датчика.
EKF учитывает:
- точность;
- шум;
- задержку;
- предыдущие данные.
5. Два этапа EKF
Фильтр работает циклически.
Каждый цикл состоит из:
1. Prediction
Предсказание.
Используем модель движения.
2. Update
Коррекция.
Используем реальные измерения.
Схема:
IMU
│
▼
Prediction
│
▼
Предположение
│
▼
Sensor Update
│
▼
Новое состояние
6. Prediction — что делает IMU
IMU говорит:
"Я ускорился вперед."
EKF считает:
Через время Δt:
[ v = v_0 + a \cdot t ]
[ x = x_0 + v \cdot t ]
Но проблема:
IMU шумит.
Поэтому ошибка растет.
Через 10 секунд:
идеальная траектория:
──────────
оценка:
────────╱
7. Update — как датчики исправляют ошибку
Теперь приходит SLAM:
Текущее положение:
X=12.3
EKF сравнивает:
с прогнозом:
X=12.8
Разница:
0.5 м
Называется:
innovation
(невязка).
Фильтр решает:
насколько доверять:
- IMU;
- SLAM.
8. Ковариация — самая важная часть
Каждый источник данных имеет неопределенность.
Например:
Камера
Ошибка:
±10 см
GPS
Ошибка:
±2 м
IMU
Ошибка:
растет со временем.
EKF хранит это как:
матрицу ковариации.
Упрощенно:
маленькая ошибка
↓
большое доверие
большая ошибка
↓
малое доверие
9. Почему плохая камера ломает всю систему
Представим:
SLAM потерялся.
Но продолжает выдавать координаты.
Например:
Реальность:
X=100
SLAM:
X=140
Если EKF слепо поверит ему,
дрон получит неправильную коррекцию.
Поэтому важны:
- качество оценки;
- контроль ошибок;
- отказоустойчивость.
10. PX4 EKF2
В популярных автопилотах используется собственный State Estimator.
В PX4:
EKF2
Он объединяет:
- IMU;
- GPS;
- барометр;
- магнитометр;
- воздушную скорость;
- внешнюю одометрию;
- визуальную навигацию.
Документация:
PX4 EKF2 Estimator
11. Внешняя навигация через SLAM
Когда GPS отсутствует:
SLAM становится источником:
External Vision
Поток:
Camera
↓
VIO / SLAM
↓
Odometry
↓
PX4 EKF2
↓
Position Controller
PX4 получает:
- позицию;
- ориентацию;
- скорость.
12. Почему скорость важнее позиции
Это очень важный момент.
Для зависания:
ошибка позиции:
20 см
не всегда критична.
Но если скорость:
2 м/с
то аппарат уже движется.
Поэтому EKF особенно ценит:
- velocity estimate;
- angular rate.
13. Дрейф Yaw — самая сложная ошибка
У дрона есть три угла:
Roll
Pitch
Yaw
Roll и Pitch легко корректируются:
гравитацией.
IMU знает:
где низ.
Yaw сложнее.
Почему?
Земное притяжение не дает направления.
Нужен:
- магнитометр;
- GPS course;
- визуальные ориентиры;
- SLAM loop closure.
Именно ошибка курса часто разрушает автономную навигацию.
14. Почему на 200 метрах сложнее
Представим:
дрон смотрит вниз.
Камера видит:
- поле;
- снег;
- лес.
SLAM начинает терять признаки.
Тогда:
SLAM ↓
а
IMU ↑
начинает накапливать ошибку.
Хорошая система должна:
- определить ухудшение SLAM;
- увеличить доверие другим датчикам;
- не допустить потери управления.
15. Factor Graph — альтернатива EKF
В современных SLAM-системах часто используется другой подход.
Factor Graph
Вместо:
"текущее состояние"
хранится:
вся история.
Например:
Позиция 1
↓
Позиция 2
↓
Позиция 3
↓
Позиция 4
И система оптимизирует всю траекторию.
Используется:
- ORB-SLAM3;
- LIO-SAM;
- GTSAM.
16. EKF против Factor Graph
| EKF | Factor Graph | |
|---|---|---|
| Скорость | Очень высокая | Ниже |
| Память | Мало | Больше |
| Реальное время | Отлично | Хорошо |
| Большие карты | Ограниченно | Отлично |
| Автопилот | Да | Обычно нет |
На практике:
SLAM использует Factor Graph.
Автопилот использует EKF.
Они работают вместе.
17. Полная архитектура автономного БПЛА
Камера
│
▼
VIO / SLAM
│
▼
Pose + Velocity
│
▼
EKF2
▲
│
IMU ─────┤
Baro ────┤
GPS ─────┤
Mag ─────┘
│
▼
PX4 Controller
│
▼
Motors
18. Практический вывод для зависания без GPS
Если задача:
"удержание точки на высоте 200 метров"
то минимальная надежная архитектура:
Сенсоры:
- Global Shutter камера;
- IMU;
- барометр.
Алгоритмы:
- Visual-Inertial Odometry;
- EKF;
- контроль качества данных.
Автопилот:
- PX4;
- ArduPilot.
Но для реальной надежности:
добавляют:
- LiDAR;
- радар;
- вторую камеру;
- резервную навигацию.
Главный вывод главы
SLAM — это глаза.
IMU — это чувство движения.
EKF — это мозг, который решает, кому верить.
Автопилот — это мышцы.
Только их совместная работа позволяет беспилотнику удерживаться в пространстве без GPS.
Часть 19. Удержание позиции на высоте 200 метров без GPS: практическая инженерия
«Зависнуть на высоте 2 метров без GPS — это задача компьютерного зрения. Зависнуть на 200 метрах — это уже задача полноценной навигационной системы.»
1. Почему зависание на 200 метрах — особый случай
На первый взгляд задача простая:
Нужно, чтобы дрон стоял на месте.
Но в реальности аппарат постоянно испытывает воздействия:
- ветер;
- турбулентность;
- изменение нагрузки;
- вибрации;
- дрейф датчиков;
- ошибки оценки положения.
Без GPS дрон должен самостоятельно определить:
- Где он находится?
- С какой скоростью движется?
- На какой высоте находится?
- Как компенсировать внешние воздействия?
2. Что означает "стоять на месте"
Для человека:
"стоять на месте" означает:
координаты почти не меняются.
Для автоматики:
нужно удерживать шесть степеней свободы.
Положение:
X
Y
Z
Ориентация:
Roll
Pitch
Yaw
Полная модель:
6 DOF
=
3 координаты
+
3 угла
3. Почему обычный GPS хорошо решает эту задачу
GPS дает:
X
Y
Z
каждые несколько секунд.
Автопилот сравнивает:
цель:
X=0
Y=0
текущее:
X=1.5
Y=-0.8
и корректирует движение.
Без GPS эти координаты нужно получить самостоятельно.
4. Optical Flow — самый простой способ удержания позиции
Один из первых методов.
Используется:
- в бытовых дронах;
- небольших роботах;
- бюджетных автопилотах.
Принцип
Камера смотрит вниз.
Например:
первый кадр:
┌───────────┐
│ камень │
│ дерево│
└───────────┘
Через секунду:
┌───────────┐
│ камень │
│ дерево │
└───────────┘
Алгоритм видит:
изображение сместилось.
Если картинка ушла вправо:
значит аппарат движется влево.
5. Ограничения Optical Flow
Для высоты 200 метров это становится проблемой.
Почему?
Разрешение земли уменьшается.
На высоте 3 метра:
камень:
████████
На высоте 200 метров:
камень:
.
Камера перестает видеть движение.
Optical Flow хорошо работает:
| Высота | Работа |
|---|---|
| 0.5–10 м | Отлично |
| 10–50 м | Хорошо |
| 50–100 м | Зависит от камеры |
| 200 м | Требуется другая система |
6. Downward Vision — взгляд вниз
Более серьезный вариант.
Используется отдельная камера:
Дрон
↓
Камера
↓
Земля
Она может работать совместно с:
- VIO;
- SLAM;
- AI Vision.
Но проблема остается:
земля должна иметь признаки.
Хорошо:
- здания;
- дороги;
- лес;
- поля с текстурой.
Плохо:
- снег;
- вода;
- однотонный грунт.
7. LiDAR Altimeter — измерение высоты лазером
Очень распространенный датчик.
Он отвечает не за координаты X/Y,
а за высоту Z.
Принцип:
Дрон
↓ лазер
Земля
↑ отражение
Измеряется время прохождения сигнала.
Преимущества:
- высокая точность;
- независимость от GPS;
- работает ночью.
Недостатки:
дальность ограничена.
Типичные диапазоны:
Малые LiDAR:
0–40 метров.
Промышленные:
сотни метров.
8. Radar Altimeter — высотомер для серьезных систем
Радар имеет преимущество:
он работает там, где камера плохо видит.
Например:
- туман;
- дым;
- ночь;
- пыль.
Используется:
- авиацией;
- военными системами;
- промышленными БПЛА.
Принцип:
излучение радиоволны:
Дрон
↓
~~~~~~~
Земля
↑
отражение
Измеряется:
- высота;
- скорость сближения;
- структура поверхности.
9. Как удерживать X/Y без GPS на 200 метрах?
Вот главный вопрос.
Высоту определить относительно легко.
Сложность:
горизонтальное положение.
Есть несколько подходов.
Метод 1. Visual-Inertial Odometry
Камера + IMU.
Система оценивает:
"Я сместился на 20 сантиметров."
Схема:
Камера
↓
Признаки
↓
Изменение положения
↓
Коррекция
Это основной современный метод.
Метод 2. LiDAR SLAM
Дрон строит карту:
Здание
│
│
Дерево
▲
И понимает:
где находится относительно нее.
Минусы:
- вес;
- цена;
- энергопотребление.
Метод 3. UWB
Устанавливаются маяки.
Например:
Маяк A
Дрон
Маяк B
Дальность измеряется радиосигналом.
Плюсы:
точность:
10–30 см.
Минус:
нужна инфраструктура.
Метод 4. Карта местности
Terrain Relative Navigation.
Дрон сравнивает:
то, что видит,
с заранее известной картой.
Например:
Спутниковая карта:
дорога
лес
река
Камера:
дорога
лес
река
Алгоритм ищет совпадение.
10. Самая надежная схема для 200 метров
Промышленная архитектура:
Камеры
│
▼
Visual SLAM
│
IMU ─────────────┤
│
LiDAR ───────────┤
│
Radar ───────────┤
│
Barometer ───────┤
│
▼
EKF
│
▼
PX4
11. Что происходит при ветре
Представим:
ветер толкает дрон.
Без коррекции:
→
Дрон
IMU чувствует:
ускорение.
Но не знает:
это ветер или маневр.
Камера видит:
смещение объектов.
SLAM говорит:
"Я переместился."
EKF объединяет:
IMU + камера + высота
и дает команду:
наклониться против ветра
12. Почему важен контроль качества SLAM
Нельзя всегда доверять камере.
Например:
дрон летит над водой.
SLAM:
ошибка растет
Система должна понять:
"визуальная навигация ненадежна."
Используются признаки:
- количество ключевых точек;
- скорость потери трекинга;
- величина ошибки оптимизации;
- согласованность с IMU.
13. Практическая конфигурация для зависания 200 метров
Вариант R&D
Stereo Global Shutter Camera
+
IMU BMI088
+
Jetson Orin Nano
+
OpenVINS
+
PX4 EKF2
+
Барометр
Более надежный вариант
Добавить:
↓
Downward LiDAR
+
Radar Altimeter
+
вторую камеру
14. Почему военные и промышленные системы используют много датчиков
Потому что нет идеального сенсора.
Камера:
- видит мир
− зависит от света
LiDAR:
- точная геометрия
− плохо работает в некоторых условиях
Radar:
- работает почти всегда
− меньше деталей
IMU:
- очень быстрый
− дрейфует
Поэтому используется принцип:
сенсорная избыточность.
15. Главный вывод
Удержание дрона на высоте 200 метров без GPS — это не задача одного SLAM.
Это комбинация:
Visual Navigation
+
IMU
+
EKF
+
Altitude Sensors
+
Flight Controller
SLAM дает понимание положения.
Но стабильный полет появляется только тогда, когда вся система умеет оценивать свои ошибки и переключаться между источниками информации.
Часть 20. Полная архитектура автономного БПЛА уровня Enterprise
«Промышленный автономный дрон отличается от любительского не только количеством датчиков. Главное отличие — способность продолжать работу при отказе одного из элементов системы.»
1. Что такое Enterprise-уровень автономности
Когда говорят о промышленном автономном БПЛА, речь идет не просто о полете без GPS.
Система должна обеспечивать:
- автономный взлет;
- навигацию без спутников;
- обход препятствий;
- работу в сложной погоде;
- возврат при отказах;
- контроль состояния оборудования;
- безопасную посадку.
Простой дрон:
Пилот
↓
Пульт
↓
Автопилот
↓
Двигатели
Enterprise-дрон:
Миссия
│
▼
AI Mission Planner
│
▼
World Model / SLAM
│
▼
Navigation Stack
│
▼
Flight Controller
│
▼
Actuators
2. Главный принцип: разделение функций
В профессиональных системах никогда не смешивают всё в одном компьютере.
Обычно есть минимум три уровня.
Уровень 1. Flight Controller
Это «нервная система».
Например:
- PX4;
- ArduPilot;
- промышленный автопилот.
Задачи:
- стабилизация;
- управление моторами;
- аварийные режимы.
Частота работы:
сотни герц.
Уровень 2. Companion Computer
Это вычислительный мозг.
Например:
- NVIDIA Jetson;
- Qualcomm RB5;
- Intel NUC.
Задачи:
- SLAM;
- AI;
- распознавание;
- планирование маршрута.
Уровень 3. Cloud / Ground Station
Внешняя система:
- аналитика;
- управление парком;
- хранение карт;
- обновления.
3. Архитектура современного автономного БПЛА
Полная схема:
Cloud
│
│
Mission Control
│
▼
Companion Computer
┌───────────┬───────────┬───────────┐
│ │ │ │
SLAM AI Vision Planning Mapping
│ │ │ │
└───────────┴───────────┴───────────┘
│
MAVLink / DDS
│
Flight Controller
│
Motor Control
4. Сенсорный комплекс Enterprise-дрона
Профессиональный аппарат обычно имеет не один датчик, а набор.
Камеры
Используются:
- фронтальные;
- нижние;
- боковые;
- панорамные.
Задачи:
Навигация
VIO / SLAM.
Обнаружение препятствий
AI Vision.
Посадка
Определение:
- площадки;
- препятствий;
- ориентира.
5. Стереозрение
Один из основных элементов.
Две камеры:
Левая камера Правая камера
\ /
объект
Разница между изображениями называется:
disparity
(параллакс).
По ней вычисляется глубина.
Плюсы:
- пассивный сенсор;
- нет лазера;
- высокая скорость.
Минусы:
нужна хорошая текстура.
6. LiDAR в Enterprise-системах
LiDAR дает трехмерное пространство.
Пример:
дерево
▲
- • • • • • •
дрон
Используется для:
- построения карты;
- обхода препятствий;
- посадки.
Типы:
Solid State LiDAR
Компактные.
Используются:
- дроны;
- роботы.
Mechanical LiDAR
Вращающаяся система.
Плюсы:
- большая дальность.
Минусы:
- масса;
- механика.
7. Radar — сенсор плохой погоды
Камеры имеют ограничения.
Туман:
камера ↓
Лидар:
частично ↓
Радар:
работает
Используются:
- миллиметровые радары;
- FMCW.
Радар может оценивать:
- расстояние;
- скорость;
- направление движения.
8. AI Vision — переход от обнаружения к пониманию
Старые системы:
«Объект есть.»
Новые:
«Что это за объект и как с ним взаимодействовать?»
Например:
Камера видит:
████████
AI:
Тип: человек
Расстояние: 15 м
Скорость: 1.2 м/с
Направление: навстречу
9. Модели, используемые в робототехнике
YOLO
Обнаружение объектов.
Ultralytics YOLO
Segment Anything Model
Сегментация объектов.
Segment Anything Model (SAM) GitHub
Vision Transformers
Используются для:
- понимания сцены;
- классификации;
- навигации.
10. World Model — новое направление
Следующий уровень после SLAM.
Обычный SLAM:
«Вот координаты стены.»
World Model:
«Это здание. В нем есть вход. Перед ним свободная площадка. Здесь безопасно лететь.»
Система начинает создавать внутреннюю модель окружающего мира.
11. Автономное планирование маршрута
Раньше:
оператор задавал точки:
A → B → C
Теперь:
дрон получает задачу:
"Осмотри линию электропередачи."
Сам:
- строит маршрут;
- избегает препятствий;
- меняет план.
Используются алгоритмы:
A*
Поиск пути.
RRT / RRT*
Rapidly-exploring Random Tree.
Хорошо для трехмерного пространства.
MPC
Model Predictive Control.
Предсказывает:
как будет двигаться аппарат.
12. Пример промышленной архитектуры
Допустим:
дрон инспектирует завод.
До полета
Создается:
- карта объекта;
- зона работы;
- ограничения.
Во время полета
Дрон:
- Взлетает.
- Строит локальную карту.
- Находит объект.
- Выполняет съемку.
- Обнаруживает препятствие.
- Меняет маршрут.
Система:
Задача
↓
Понимание сцены
↓
Планирование
↓
Действие
↓
Проверка результата
13. Отказоустойчивость
Это главное отличие Enterprise.
Обычный аппарат:
сломалась камера → проблема.
Промышленный:
камера 1 отказала.
Система:
- использует камеру 2;
- снижает скорость;
- меняет режим;
- возвращается.
14. Резервирование навигации
Например:
Основной канал:
Visual SLAM
Резерв:
LiDAR SLAM
Резерв 2:
INS
Резерв 3:
Radar / UWB
15. Пример: Skydio-подход
Skydio построила концепцию вокруг автономного компьютерного зрения.
Главная идея:
не оператор управляет каждым движением,
а аппарат сам понимает:
- препятствия;
- траекторию;
- безопасный путь.
16. Пример: DJI Enterprise-подход
DJI использует комбинацию:
- камер;
- датчиков расстояния;
- AI обработки;
- собственного автопилота.
Главная идея:
максимальная автоматизация пилотирования.
17. Будущая архитектура автономного роя
Следующий шаг:
не один дрон,
а группа.
Схема:
Drone 1
\
\
Drone 2 ---- Network ---- Drone 3
|
Shared Map
Каждый аппарат:
- видит часть пространства;
- передает данные;
- объединяет карту.
18. Что потребуется для полностью автономного БПЛА
Минимальный промышленный набор:
Вычисление
- Jetson AGX Orin.
Сенсоры
- Stereo Global Shutter Camera.
- IMU высокого класса.
- LiDAR.
- Radar.
- Barometer.
ПО
- ROS 2.
- PX4.
- SLAM.
- AI Detection.
- Planner.
19. Главная инженерная формула автономности
Можно выразить так:
Автономность =
Восприятие
+
Локализация
+
Планирование
+
Управление
+
Отказоустойчивость




