Потеря сигнала спутников — реальная проблема для автономных систем: полёты в помещениях, между высотными зданиями, под кронами деревьев или в условиях РЭБ. В таких сценариях на первый план выходят альтернативные методы позиционирования.
Два наиболее популярных подхода:
- VIO (Visual-Inertial Odometry) — визуальная инерциальная одометрия, объединяющая данные камер и IMU.
- Optical Flow + LiDAR — комбинация оптического потока (нижняя камера) и лазерного дальномера.
В этой статье сравним обе технологии, разберём их сильные и слабые стороны, и дадим практические рекомендации для интеграции с полётными контроллерами ArduPilot и PX4.
Краткий глоссарий
| Термин | Описание |
|---|---|
| VIO | Алгоритм, оценивающий 6-DoF позу дрона (позиция + ориентация) по последовательности изображений и данным инерциального блока |
| Optical Flow | Метод оценки скорости по смещению текстуры поверхности в кадре нижней камеры |
| LiDAR (1D) | Лазерный дальномер, измеряющий расстояние до поверхности по времени пролёта импульса |
| SLAM | Simultaneous Localization and Mapping — одновременное построение карты и локализация в ней |
Как это работает: физика и алгоритмы
VIO: камера + IMU = 6 степеней свободы
VIO-системы (например, Intel RealSense T265, Stereo Camera + VINS-Fusion) используют две или более камеры и высокочастотный IMU для оценки полного вектора состояния аппарата.
Принцип работы:
- Стереокамера строит карту визуальных особенностей (feature points) в 3D-пространстве.
- IMU компенсирует быстрые движения и дрожание, которые «размывают» визуальные данные.
- Алгоритм (OKVIS, VINS-Mono, ROVIO) выполняет нелинейную оптимизацию, минимизируя ошибку репроекции точек между кадрами.
Преимущества:
- ✅ Полная 6-DoF оценка: позиция (X, Y, Z) + ориентация (roll, pitch, yaw)
- ✅ Работает в любых направлениях: вперёд, назад, вверх, боком
- ✅ Не требует текстурированной поверхности под дроном
- ✅ Масштабируемость: точность не деградирует с высотой (в пределах видимости объектов)
Ограничения:
- ❌ Высокие вычислительные требования: нужен companion computer (Jetson, Raspberry Pi 4+)
- ❌ Чувствительность к вибрациям: T265 требует мягкого крепления с демпфированием
- ❌ Зависимость от освещения: в темноте или при быстром изменении освещённости трек может «потеряться»
- ❌ Дрейф: без внешней коррекции (UWB, маяки) ошибка накапливается ~1–3% от пройденного пути
Факт: В независимых тестах Intel RealSense T265 показала точность позиционирования ~0.5–1.5% от пройденного расстояния в помещении, что уступает только решениям на базе Google ARCore.
Optical Flow + LiDAR: простота и надёжность для низких высот
Эта комбинация — классика для стабилизации вблизи земли без GNSS. Optical Flow оценивает горизонтальную скорость по смещению текстуры, а LiDAR предоставляет точную высоту для масштабирования.
Принцип работы:
Горизонтальная скорость = (Смещение пикселей × Высота) / (Фокусное расстояние × Δt)
Типичная конфигурация:
- Камера: PMW3901, PAW3902, MT9V034 (разрешение 30–100 кпикс, частота 200–400 Гц)
- Дальномер: Benewake TF-Luna, Garmin LIDAR-Lite, Broadcom AFBR-S50LV85D (точность ±2 см)
- Модули: ARK Flow, Holybro H-Flow, Matek 3901-L0X
Преимущества:
- ✅ Низкая вычислительная нагрузка: работает напрямую с полётным контроллером (без companion computer)
- ✅ Компактность и вес: модуль 20–40 г, потребление <1 Вт
- ✅ Отличная точность на высотах 0.3–5 м: идеален для зависания, облёта препятствий, посадки
- ✅ Устойчивость к вибрациям при правильном демпфировании
Ограничения:
- ❌ Только горизонтальная скорость: не даёт абсолютной позиции (требует интеграции с другими сенсорами)
- ❌ Зависимость от текстуры: не работает над водой, снегом, однородным асфальтом
- ❌ Ограниченная высота: эффективен до 10–15 м (выше — падает разрешение текстуры)
- ❌ Только «вниз»: не обнаруживает препятствия спереди/сбоку без дополнительных датчиков
Сравнительная таблица
| Критерий | VIO | Optical Flow + LiDAR |
|---|---|---|
| Точность позиции | Высокая (0.5–2% дрейф) | Средняя (зависит от калибровки) |
| Рабочая высота | 0.5–30+ м | 0.3–15 м (оптимально 1–5 м) |
| Требования к освещению | Умеренные (нужен контраст) | Высокие (нужна текстура + свет) |
| Вычислительная нагрузка | Высокая (companion computer) | Низкая (работает на FC) |
| Вес и габариты | 100–300 г + компьютер | 20–50 г (всё в одном модуле) |
| Стоимость | $150–500+ | $30–150 |
| Интеграция с ArduPilot/PX4 | Через MAVROS / DroneCAN | Нативная поддержка (FLOW_TYPE, RNGFND) |
| Работа в темноте | Только с ИК-подсветкой | Только с активной ИК-подсветкой камеры |
| Обнаружение препятствий | 360° (со стерео/360-камерой) | Только вниз (нужны доп. датчики) |
Практические примеры
Пример 1: Инспекция помещений (VIO)
Задача: Автономный облёт склада для инвентаризации. Требуется точное удержание позиции между стеллажами, работа без GNSS.
Решение:
- Платформа: Holybro Kakute H7 + Jetson Nano
- Сенсор: Intel RealSense T265 (VIO)
- ПО: PX4 + ROS +
realsense-rosдрайвер - Настройка: публикация одометрии в MAVROS через тему
/mavros/visual_odometry
Результат: Дрон стабильно удерживает позицию с точностью ±5 см, строит карту помещения для планирования маршрута.
⚠️ Важно: Камера T265 снята с производства [[33]], но аналоги на базе OV9282 + VINS-Fusion доступны в open-source.
Пример 2: Сельскохозяйственный дрон (Optical Flow + LiDAR)
Задача: Точное зависание над культурой для точечного опрыскивания, работа на высоте 1.5–3 м.
Решение:
- Платформа: Pixhawk 6C (ArduPilot)
- Сенсор: ARK Flow (DroneCAN: оптический поток + LiDAR 30 м + IMU)
- Настройка:
FLOW_TYPE = 7 # ARK Flow
FLOW_ENABLE = 1
RNGFND1_TYPE = 30 # DroneCAN rangefinder
EK3_SRC1_VELXY = 5 # Optical Flow как источник скорости
EK3_SRC1_POSZ = 1 # Барометр для высоты
Результат: Стабильное зависание ±10 см даже над рядами культур, автоматическое следование рельефу (terrain following).
Пример 3: Гибридный подход (максимальная надёжность)
Задача: Дрон для поисково-спасательных операций в завалах: работа как в помещениях (без GNSS), так и на открытой местности.
Решение:
- Основной сенсор: VIO (стереокамера + companion computer) для 3D-навигации
- Резерв: Optical Flow + LiDAR для точного зависания при посадке и вблизи земли
- Алгоритм: EKF3 (ArduPilot) или EKF2 (PX4) с переключением источников в зависимости от доступности [[10]]
Преимущество: Отказоустойчивость — при потере визуального трека (дым, пыль) система переходит на оптический поток, и наоборот.
Настройка в ArduPilot и PX4
ArduPilot: Optical Flow
- Подключите модуль (I2C, UART или DroneCAN).
- Установите параметры:
FLOW_TYPE = <тип сенсора>
FLOW_ORIENT_YAW = <ориентация, градусы>
FLOW_ENABLE = 1
RNGFND1_TYPE = <тип дальномера>
EK3_SRC1_VELXY = 5 # Optical Flow для скорости
- Откалибруйте в полёте: поднимитесь на 1–2 м, включите LOITER, активируйте калибровку переключателем (RCx_OPTION = 158).
🔗 Официальная документация ArduPilot по Optical Flow
PX4: VIO с T265 (пример)
- Установите
realsense-rosдрайвер на companion computer. - Настройте статический трансформ между
base_linkи камерой:
<node pkg="tf" type="static_transform_publisher" name="tf_baseLink_cameraPose"
args="0.1 0 0.04 0 1.5708 0 base_link camera_pose_frame 1000"/>
- В PX4 включите:
EKF2_OF_CTRL = 1
SENS_FLOW_SCALE = 1.0 # при необходимости корректировать
🔗 PX4 Guide: Intel RealSense T265 (VIO)
Общие рекомендации по монтажу
- Демпфирование: И VIO-камеры, и оптические сенсоры критичны к вибрациям. Используйте мягкие крепления с частотой среза 20–40 Гц.
- Ориентация: Optical Flow должен смотреть строго вниз; отклонение >5° вносит ошибку в оценку скорости.
- Калибровка: Обязательно проводите in-flight калибровку масштаба (FLOW_FXSCALER / FLOW_FYSCALER) для вашего конкретного модуля.
Что выбрать? Чек-лист
✅ Выбирайте VIO, если:
- Нужна полная 3D-навигация в помещении или сложной среде
- Есть место и весовой бюджет для companion computer
- Требуется работа на высотах >10 м без потери точности
- Бюджет позволяет ($150+ за сенсор + вычислитель)
✅ Выбирайте Optical Flow + LiDAR, если:
- Основная задача — стабильное зависание и полёт вблизи земли (до 5–10 м)
- Критичны вес, энергопотребление и простота интеграции
- Бюджет ограничен (<$100 за сенсорный модуль)
- Работаете на текстурированных поверхностях (трава, асфальт, грунт)
✅ Рассмотрите гибрид, если:
- Миссия включает как низкие, так и высокие высоты
- Требуется максимальная отказоустойчивость
- Есть возможность обработки данных на борту (companion computer)
Полезные ссылки
- ArduPilot: Optical Flow Sensors — настройка, калибровка, параметры
🔗 ardupilot.org/copter/docs/common-optical-flow-sensors-landingpage.html - PX4 Guide: Optical Flow — интеграция с оценщиком EKF2
🔗 docs.px4.io/main/en/sensor/optical_flow - PX4 Guide: VIO with RealSense T265 — пошаговая настройка
🔗 docs.px4.io/main/en/camera/camera_intel_realsense_t265_vio - ARK Flow (DroneCAN) — модуль «всё-в-одном» от CubePilot
🔗 ardupilot.org/copter/docs/common-arkflow.html - LOFF: LiDAR and Optical Flow Fusion — исследование по слиянию данных (MDPI, 2024)
🔗 mdpi.com/2504-446X/8/8/411 - DroneCAN Specification — протокол для подключения умных сенсоров
🔗 dronecan.org
Заключение
Нет «универсального» решения: VIO даёт полную 3D-навигацию ценой сложности и ресурсов, Optical Flow + LiDAR — простая и надёжная работа «у земли».
Для большинства прикладных задач БПЛА (инспекция, сельское хозяйство, доставка) комбинация обоих подходов с интеллектуальным переключением в EKF даёт наилучший баланс точности, надёжности и стоимости.
Ключ к успеху — не выбор «лучшей» технологии, а понимание её ограничений и грамотная интеграция в общую архитектуру навигации вашего аппарата.
Статья подготовлена для разработчиков автономных систем. При использовании материалов ссылка на источник обязательна.
