Принцип работы EKF3 в ArduPilot

Все статьи

Введение

EKF3 (Extended Kalman Filter 3) — это алгоритм оценки состояния по умолчанию в ArduPilot. Он обеспечивает точную навигацию за счёт расширенной математической модели, сенсорной фузии и архитектуры с множественными независимыми «полосами» (lanes).


Математические основы

Что делает EKF3?

EKF3 решает две задачи в каждом цикле:

ШагЧто происходитЧастота
ПредсказаниеНа основе данных IMU прогнозирует новое положение400-1000 Гц
КоррекцияКорректирует прогноз данными GPS, барометра, компаса5-50 Гц

Цикл работы EKF3

Работа фильтра представляет собой непрерывный циклический процесс, который делится на два основных этапа: предсказание и коррекция. Частота выполнения этих этапов различается.

Шаг 1: Предсказание (Prediction Step)

Этот этап выполняется с высокой частотой, синхронно с поступлением данных от IMU (обычно 400–1000 Гц).

  1. Чтение IMU: Фильтр считывает данные с гироскопов и акселерометров.
  2. Прогноз движения: На основе угловых скоростей и ускорений математическая модель рассчитывает, где должен оказаться дрон через следующий промежуток времени.
  3. Обновление ковариации: Увеличивается неопределённость (ошибка) оценки, так как модель не идеальна, а сенсоры имеют шум.
  4. Результат: Получается «априорная» оценка состояния (до учёта внешних датчиков).

Шаг 2: Коррекция (Update Step)

Этот этап выполняется асинхронно, только когда поступают новые данные от внешних сенсоров (GPS, барометр, компас, дальномер). Частота ниже (5–50 Гц).

  1. Проверка данных: Фильтр проверяет, пришли ли новые данные от какого-либо вспомогательного сенсора.
  2. Расчёт инновации: Вычисляется разница между предсказанным значением (из Шага 1) и реальным измерением сенсора. Например, фильтр предсказал высоту 50 м, а барометр прислал 51 м. Инновация = 1 м.
  3. Тест инновации (Innovation Test): Рассчитывается отношение инновации к допустимому порогу (gate).
    • Если отношение меньше 1.0: Измерение считается достоверным.
    • Если отношение больше 1.0: Измерение считается ошибочным (спуфинг, помеха, сбой) и отклоняется.
  4. Обновление состояния: Если измерение принято, вектор состояний корректируется в сторону измерения, а неопределённость (ковариация) уменьшается.
  5. Обучение смещений: На основе остаточной ошибки фильтр корректирует оценки смещений гироскопов и акселерометров, чтобы уменьшить ошибку предсказания в будущем.

Шаг 3: Мониторинг здоровья (Health Monitoring)

Выполняется постоянно в фоне каждого цикла.

  • Фильтр отслеживает рост дисперсии ошибок. Если ошибка позиции или скорости растёт beyond допустимых пределов, полосе присваивается флаг неисправности.
  • Проверяется согласованность данных между разными полосами.

Шаг 4: Вывод данных (Output)

Выполняется синхронно с основным циклом полётного контроллера.

  • Менеджер EKF3 выбирает данные от самой здоровой полосы.
  • Эти данные (позиция, скорость, кватернион) передаются в навигационный контроллер и систему стабилизации.
  • Данные телеметрии отправляются на наземную станцию.

24 состояния EKF3

EKF3 оценивает ключевые параметры полёта:

ГруппаСостоянияНазначение
Позиция3 оси (NED)Где находится дрон
Скорость3 оси (NED)Куда и как быстро летит
ОриентацияКватернион (4)Углы наклона и курс
Смещения IMU6 осей (gyro + accel)Компенсация дрейфа сенсоров
Магнитное поле6 осей (earth + body)Коррекция магнитных помех
Ветер2 оси (N, E)Оценка ветра для фиксированного крыла

Ключевое улучшение vs EKF2: EKF3 оценивает смещения акселерометра по всем трём осям, а не только по вертикали. Это критично для вертолётов, VTOL и аппаратов, выполняющих полёты в нестандартных ориентациях.


Архитектура множественных полос

EKF3 запускает 3-4 независимых экземпляра фильтра параллельно:

┌─────────────────────────────────────────────────┐
│  Lane 0 (Primary) → Используется для управления │
├─────────────────────────────────────────────────┤
│  Lane 1 (Secondary) → Мониторинг здоровья       │
├─────────────────────────────────────────────────┤
│  Lane 2 (Tertiary) → Резерв при сбоях           │
└─────────────────────────────────────────────────┘

Преимущества:

  • При сбое одной полосы система автоматически переключается на здоровую
  • Каждая полоса может использовать разные комбинации датчиков
  • Повышенная отказоустойчивость без прерывания полёта

3. Сенсорная фузия в EKF3

Поддерживаемые сенсоры

СенсорЧастотаРоль в EKF3
IMU400-1000 ГцОсновная модель процесса
GPS/GNSS5-10 ГцПозиция и скорость
Магнитометр10-50 ГцОриентация (рыскание)
Барометр10-50 ГцВысота
Дальномер10-50 ГцВысота над поверхностью
Оптический поток10-50 ГцСкорость (без GPS)
Воздушная скорость10-50 ГцВетер, TAS

Sensor Affinity (Аффинность датчиков)

EKF3 может динамически переключаться между резервными датчиками. Если основной компас создаёт помехи, полоса переключается на резервный без прерывания полёта.


4. Подробный чек-лист настройки EKF3

ЭТАП 1: Базовая конфигурация (перед первым полётом)

ПараметрОписаниеРекомендуемое значениеКак проверить
EK3_ENABLEВключение EKF31 (включено)Mission Planner → Config → Extended Kalman Filter
EK3_GPS_TYPEТип GPS0 (авто) или 3 (3D fix)Проверьте, что GPS имеет 3D фикс перед взлётом
EK3_MAG_TYPEТип магнитометра0 (внутренний) или 1 (внешний)Если есть оба — используйте внешний (меньше помех)
EK3_ALT_SOURCEИсточник высоты0 (барометр) или 1 (дальномер)Для полётов над землёй — барометр, для посадки — дальномер
EK3_PRIMARYВыбор первичной полосы0 (автовыбор)Система сама выберет наиболее здоровую полосу
EK3_LANESКоличество полос3 (баланс) или 4 (макс. надёжность)Больше полос = больше RAM/CPU нагрузки

Проверка после настройки:

  • [ ] Подключите Mission Planner / QGroundControl
  • [ ] Перезагрузите контроллер
  • [ ] Убедитесь, что статус EKF показывает «Healthy»
  • [ ] Проверьте, что все полосы инициализированы (LED статус)

ЭТАП 2: Калибровка сенсоров (обязательно)

ПараметрОписаниеПроцедура
АкселерометрКалибровка нуляCAL_ACC → Положите дрон на 6 сторон, дождитесь завершения
ГироскопКалибровка дрейфаCAL_GYRO → Дрон должен быть неподвижен 10-20 сек
МагнитометрКалибровка компасаCAL_MAG → Вращайте дрон во всех направлениях 2-3 мин
БарометрПроверка стабильностиУбедитесь, что высота не «прыгает» более чем на 1-2 м

Дополнительные параметры калибровки:

ПараметрОписаниеЗначение
EK3_MAG_CALАвтокалибровка магнитометра3 (рекомендуется)
EK3_ACC_BCH_LRNОбучение смещений акселерометра1 (включено)
EK3_GYRO_BCH_LRNОбучение смещений гироскопа1 (включено)

Проверка после калибровки:

  • [ ] Значения смещений акселерометра < 0.5 м/с²
  • [ ] Значения смещений гироскопа < 0.01 рад/с
  • [ ] Магнитометр показывает сферу после калибровки (проверка в MP)
  • [ ] Барометр стабильный при включённых моторах

ЭТАП 3: Настройка порогов инноваций (для продвинутых)

Пороги инноваций определяют, насколько EKF3 «доверяет» каждому сенсору:

ПараметрОписаниеПо умолчаниюКогда менять
EK3_VEL_I_GATEПорог скорости5.0Увеличить при частых отклонениях GPS
EK3_POS_I_GATEПорог позиции5.0Увеличить при плохом GPS сигнале
EK3_HGT_I_GATEПорог высоты5.0Уменьшить для более точной высоты
EK3_MAG_I_GATEПорог магнитометра3.0Увеличить при магнитных помехах
EK3_YAW_I_GATEПорог рыскания0.5 радУвеличить при нестабильном курсе
EK3_GLITCH_RADФильтр скачков GPS5-10 мУвеличить в зонах с помехами GPS

Как подобрать значения:

  1. Запишите лог полёта с LOG_BITMASK = +EKF3
  2. Откройте в MAVExplorer → графики EK3.VIE (innovation test ratio)
  3. Если значения часто > 1.0 — увеличьте соответствующий gate
  4. Если значения всегда < 0.3 — можно уменьшить gate для большей чувствительности

Проверка после настройки:

  • [ ] Innovation test ratios в полёте < 1.0 (в норме)
  • [ ] Нет частых отклонений измерений (логи EKF3)
  • [ ] Стабильное удержание позиции в Loiter

📋 ЭТАП 4: Настройка множественных IMU и компасов

Для максимальной отказоустойчивости используйте несколько IMU и компасов:

ПараметрОписаниеРекомендуемое значение
EK3_IMU_MASKКакие IMU использовать7 (IMU 0, 1, 2 — если доступны)
EK3_MAG_MASKКакие компасы использовать3 (компас 0 и 1)
EK3_BCN_MASKBeacon-системы0 (если не используются)
EK3_RNG_MASKДальномеры1 (если есть)

Требования к размещению:

  • Компасы должны быть разнесены минимум на 10-15 см
  • Избегайте размещения рядом с силовыми проводами и моторами
  • Используйте внешние компасы на штангах для снижения помех

Проверка после настройки:

  • [ ] Все IMU показывают схожие данные (проверка в MP → HUD → IMU)
  • [ ] Компасы показывают схожий курс (разница < 10°)
  • [ ] При отключении одного сенсора система переключается без сбоев

ЭТАП 5: Оптимизация производительности

EKF3 требует ресурсов контроллера. Настройте под ваше железо:

КонтроллерEK3_LANESEK3_IMU_MASKLOG_BITMASKПримечание
Cube Orange47 (3 IMU)ПолныйМакс. производительность
Pixhawk 4/533 (2 IMU)EKF3 + GPSБаланс
Pixhawk 2.4.821 (1 IMU)МинимальныйОграниченные ресурсы
Pixhawk 111 (1 IMU)Только ошибкиНе рекомендуется для EKF3

Параметры оптимизации:

ПараметрОписаниеДля слабых контроллеровДля мощных контроллеров
EK3_GPS_RATEЧастота GPS5 Гц10 Гц
EK3_BARO_RATEЧастота барометра10 Гц50 Гц
EK3_MAG_RATEЧастота магнитометра10 Гц50 Гц
EK3_FLOW_RATEЧастота оптического потока10 Гц25 Гц

Проверка после оптимизации:

  • [ ] CPU load < 60% (проверка в MP → Status)
  • [ ] Нет пропусков циклов EKF (логи EKF3)
  • [ ] Стабильная частота цикла контроллера

📋 ЭТАП 6: Настройка для полётов без GPS

Для полётов в помещении или при потере GPS:

ПараметрОписаниеЗначение
EK3_GPS_TYPEТип GPS1 (no GPS) для помещений
EK3_FLOW_USEИспользование оптического потока1 (включено)
EK3_RNG_USE_HGTДальномер для высоты1 (включено)
EK3_VELNE_SOURCEИсточник горизонтальной скорости2 (optical flow)

Требования для полётов без GPS:

  • Оптический поток с хорошей текстурой поверхности
  • Дальномер для точной высоты
  • Стабильное освещение (для optical flow)
  • Высота над поверхностью < 3-5 м (зависит от сенсора)

Проверка после настройки:

  • [ ] Дрон удерживает позицию в помещении (режим Loiter)
  • [ ] Нет дрейфа при отсутствии GPS
  • [ ] Innovation test ratios стабильны без GPS

ЭТАП 7: Защита от помех и спуфинга

ПараметрОписаниеРекомендуемое значение
EK3_GLITCH_RADРадиус фильтрации скачков GPS10 м (город), 5 м (открытая местность)
EK3_GPS_CHECKПроверки здоровья GPS1 (включено)
EK3_SOURCE_MASKМаска источников навигацииНастроить под доступные сенсоры
EK3_VELNE_SOURCEРезервный источник скорости1 (GPS), 2 (optical flow)

Дополнительные меры:

  • [ ] Используйте множественные GPS-приёмники с разнесёнными антеннами
  • [ ] Включите SBAS/EGNOS для улучшения точности GPS
  • [ ] Рассмотрите RTK GPS для сантиметровой точности
  • [ ] Для критических применений — внешние CRPA-антенны

Проверка после настройки:

  • [ ] При временной потере GPS дрон не «улетает»
  • [ ] Резкие скачки координат фильтруются
  • [ ] Система переключается на резервные источники без сбоев

ЭТАП 8: Финальная проверка перед полётом

ПроверкаКак выполнитьКритерий успеха
EKF HealthMission Planner → Status → EKFВсе полосы «Healthy»
VarianceMAVExplorer → графики EKF3.VARЗначения стабильны, не растут
InnovationMAVExplorer → графики EKF3.VIETest ratio < 1.0 в большинстве случаев
Lane SwitchingЛоги полёта → EKF3Нет частых переключений полос
GPS QualityMP → HUD → GPSHDOP < 1.5, спутников > 10
Compass ConsistencyMP → HUD → CompassРазница между компасами < 10°
Barometer StabilityЛоги → BAROВысота не «прыгает» при включённых моторах

5. Типовые проблемы и решения

ПроблемаСимптомыДиагностикаРешение
EKF не инициализируетсяДрон не武装, статус «EKF Unhealthy»Проверьте логи EKF3 на ошибки инициализацииОткалибруйте акселерометр и компас, проверьте барометр
Частые переключения полосНестабильный полёт, рывкиЛоги EKF3Lane Switch событияНайдите проблемный сенсор, разнесите компасы, проверьте экранирование
Дрейф позиции в LoiterДрон медленно смещаетсяInnovation test ratio для GPS > 1.0Увеличьте EK3_POS_I_GATE, проверьте GPS антенну
Ошибки магнитометраНестабильный курс, вращениеCompass inconsistency > 15°Перекалибруйте компас, уберите источники помех
Высокая нагрузка CPUКонтроллер греется, лагиStatus → CPU Load > 70%Уменьшите EK3_LANES, отключите лишние сенсоры
Потеря высотыДрон набирает/теряет высотуБарометр нестабилен при включённых моторахИспользуйте EK3_ALT_SOURCE = 1 (дальномер), проверьте вентиляцию барометра

6. Мониторинг в реальном времени

Через Mission Planner:

  1. Подключитесь к дрону
  2. Перейдите в StatusEKF3
  3. Следите за:
  • Variance (должно быть стабильно)
  • Innovation Test Ratio (должно быть < 1.0)
  • Health Flags (должно быть «Healthy»)

Через логи (после полёта):

  1. Скачайте логи с контроллера
  2. Откройте в MAVExplorer или Mission Planner Log Analyser
  3. Графики для анализа:
  • EKF3.VAR — ковариация состояний
  • EKF3.VIE — innovation test ratios
  • GPS — качество GPS сигнала
  • IMU — вибрации и смещения

Итоговый чек-лист перед первым полётом с EKF3

  • [ ] EK3_ENABLE = 1
  • [ ] Акселерометр откалиброван (6 сторон)
  • [ ] Гироскоп откалиброван (неподвижен)
  • [ ] Магнитометр откалиброван (вращение во всех направлениях)
  • [ ] Барометр стабилен (проверка при включённых моторах)
  • [ ] GPS имеет 3D фикс, HDOP < 1.5
  • [ ] Все полосы EKF3 показывают «Healthy»
  • [ ] Innovation test ratios < 1.0 в тестах на земле
  • [ ] CPU load < 60%
  • [ ] Логи включены (LOG_BITMASK включает EKF3)
  • [ ] Проведён тестовый полёт в режиме Stabilize
  • [ ] Проведён тестовый полёт в режиме Loiter (удержание позиции)

Выводы

EKF3 — мощный инструмент, но требует правильной настройки:

Базовая настройка — достаточно для большинства применений
Калибровка сенсоров — критична для точной работы
Множественные сенсоры — повышают отказоустойчивость
Мониторинг логов — помогает выявить проблемы до критических сбоев

Для стабильной работы следуйте чек-листу и регулярно проверяйте здоровье EKF3 через телеметрию и логи.


Источники:

Прокрутить вверх