Что такое EKF3?
Extended Kalman Filter 3 (EKF3) — это расширенный фильтр Калмана, используемый в ArduPilot для оценки состояния БПЛА. Он объединяет данные от множества сенсоров (IMU, GPS, барометр, магнитометр, дальномер, optical flow) для точного определения позиции, скорости и ориентации аппарата.
Ключевое отличие EKF3 от EKF2 — поддержка множественных экземпляров (lanes), что обеспечивает отказоустойчивость при сбоях сенсоров.
Архитектура EKF3
Количество состояний
EKF3 отслеживает 24 состояния в базовой конфигурации:
| Группа состояний | Количество | Описание |
|---|---|---|
| Quaternion | 4 | Ориентация в пространстве |
| Velocity NED | 3 | Скорость (North, East, Down) |
| Position NED | 3 | Позиция (North, East, Down) |
| Gyro bias | 3 | Смещение гироскопов |
| Delta velocity bias | 3 | Смещение акселерометров |
| Earth magnetic field | 3 | Вектор магнитного поля Земли |
| Body magnetic field | 3 | Вектор магнитного поля корпуса |
| Wind velocity | 2 | Скорость ветра (North, East) |
| Итого | 24 |
Множественные lanes
EKF3 может запускать несколько независимых экземпляров фильтра, каждый на своём IMU. Это обеспечивает:
- Резервирование при отказе IMU
- Возможность сравнения результатов
- Автоматическое переключение на лучшую lane
Количество lanes определяется параметром EK3_IMU_MASK:
| Значение | Двоичный код | Активные IMU |
|---|---|---|
| 1 | 001 | IMU 0 |
| 2 | 010 | IMU 1 |
| 3 | 011 | IMU 0 + IMU 1 |
| 4 | 100 | IMU 2 |
| 5 | 101 | IMU 0 + IMU 2 |
| 6 | 110 | IMU 1 + IMU 2 |
| 7 | 111 | IMU 0 + IMU 1 + IMU 2 |
⚠️ Важно: Каждая lane потребляет CPU. Для Pixhawk (STM32F4) рекомендуется не более 2 lanes, для Cube Orange/Pixhawk 6 — до 3 lanes.
Выбор источников навигации
Современная система EK3_SRC1_*
Начиная с ArduPilot 4.2, выбор источников навигации осуществляется через параметры EK3_SRC1_*. Это заменило устаревшие EK3_GPS_TYPE, EK3_ALT_SOURCE, EK3_FLOW_USE и маски.
Основные параметры источников
| Параметр | Описание | Варианты значений |
|---|---|---|
EK3_SRC1_POSXY | Источник горизонтальной позиции | 0=None, 1=Baro, 2=GPS, 3=Rangefinder, 4=Beacon, 5=OptFlow, 6=ExtNav |
EK3_SRC1_VELXY | Источник горизонтальной скорости | Те же варианты |
EK3_SRC1_POSZ | Источник вертикальной позиции | Те же варианты |
EK3_SRC1_VELZ | Источник вертикальной скорости | Те же варианты |
EK3_SRC1_YAW | Источник курса | 1=Compass, 2=GPS, 3=GPS+Compass fallback, 6=ExtNav, 8=GSF |
Дополнительные источники (SRC2)
Для резервных сенсоров используются параметры EK3_SRC2_*:
| Параметр | Описание |
|---|---|
EK3_SRC2_POSXY | Резервный источник горизонтальной позиции |
EK3_SRC2_VELXY | Резервный источник горизонтальной скорости |
EK3_SRC2_POSZ | Резервный источник вертикальной позиции |
EK3_SRC2_VELZ | Резервный источник вертикальной скорости |
EK3_SRC2_YAW | Резервный источник курса |
Опции слияния источников
Параметр EK3_SRC_OPTIONS управляет слиянием данных из SRC1 и SRC2:
| Бит | Значение | Описание |
|---|---|---|
| 0 | 1 | Fuse all velocity sources (слияние всех источников скорости) |
| 1 | 2 | Fuse all position sources (слияние всех источников позиции) |
⚠️ По умолчанию EK3_SRC_OPTIONS = 0 — используется только основной источник (SRC1), резервный (SRC2) применяется только при отказе основного.
Калибровка магнитометра
Параметр EK3_MAG_CAL определяет, когда и как выполняется калибровка магнитометра:
| Значение | Описание | Рекомендация |
|---|---|---|
| 0 | Heading fusion на земле, 3-axis fusion в полёте | Default для Plane |
| 1 | 3-axis fusion только при маневрировании | Для приложений с магнитными помехами |
| 2 | Heading fusion всегда | Только при идеальной калибровке |
| 3 | Heading fusion на земле, 3-axis после первого сброса yaw в воздухе | Default для Copter ✅ |
| 4 | Никогда не калибровать | Только для внутренних тестов |
| 5 | External Yaw sensor (GPS heading) | Для RTK GPS с dual antenna |
| 6 | External Yaw with Compass fallback | GPS heading + компас как резерв |
Выбор компаса
Выбор основного компаса осуществляется через параметры:
| Параметр | Описание |
|---|---|
COMPASS_USE | Использовать первый компас (0/1) |
COMPASS_USE2 | Использовать второй компас (0/1) |
COMPASS_USE3 | Использовать третий компас (0/1) |
COMPASS_PRIO1_ID, COMPASS_PRIO2_ID, COMPASS_PRIO3_ID | Приоритет компасов |
Affinity и переключение lanes
Sensor Affinity
Параметр EK3_AFFINITY определяет, какие сенсоры могут переключаться между lanes:
| Бит | Значение | Описание |
|---|---|---|
| 0 | 1 | Airspeed affinity (переключение между датчиками скорости) |
| 1 | 2 | Barometer affinity (переключение между барометрами) |
| 2 | 4 | GPS affinity (переключение между GPS) |
| 3 | 8 | Magnetometer affinity (переключение между компасами) |
Пример: EK3_AFFINITY = 15 (все биты установлены) — все сенсоры могут переключаться между lanes.
Порог переключения lanes
Параметр EK3_ERR_THRESH определяет порог относительной ошибки для переключения на другую lane:
| Значение | Описание |
|---|---|
| 0.0 | Отключено (нет автоматического переключения) |
| 0.5 | Переключение при превышении ошибки в 50% (рекомендуется) |
| 1.0 | Переключение при превышении ошибки в 100% |
⚠️ Важно: Переключение происходит только если другая lane имеет меньшую ошибку. Если все lanes имеют одинаковую ошибку, переключения не будет.
Ручной выбор основной lane
Параметр EK3_PRIMARY задаёт номер lane, которая будет основной:
| Значение | Описание |
|---|---|
| 0 | Первая lane из EK3_IMU_MASK |
| 1 | Вторая lane из EK3_IMU_MASK |
| 2 | Третья lane из EK3_IMU_MASK |
Пороги инноваций (Innovation Gates)
Пороги инноваций определяют, насколько сильно измерение может отличаться от предсказания, чтобы быть принятым. Значения указываются в процентах стандартного отклонения (σ).
Основные пороги
| Параметр | Описание | По умолчанию | Значение в σ |
|---|---|---|---|
EK3_VEL_I_GATE | Порог скорости GPS | 500 | 5.0σ |
EK3_POS_I_GATE | Порог позиции GPS | 500 | 5.0σ |
EK3_HGT_I_GATE | Порог высоты | 500 | 5.0σ |
EK3_MAG_I_GATE | Порог магнитометра | 300 | 3.0σ |
EK3_TAS_I_GATE | Порог воздушной скорости | 500 | 5.0σ |
Как работают пороги
Если измерение выходит за пределы порога:
- Измерение отвергается (не используется для обновления)
- Счётчик отказов увеличивается
- Если отказы продолжаются, источник может быть временно отключён
Пример: EK3_MAG_I_GATE = 300 означает, что измерение магнитометра принимается только если оно находится в пределах 3.0σ от предсказания.
Практические конфигурации
Конфигурация 1: Стандартный полёт с GPS
# Базовая конфигурация
EK3_ENABLE = 1
AHRS_EKF_TYPE = 3
EK3_IMU_MASK = 7 (3 IMU)
EK3_PRIMARY = 0
# Источники навигации
EK3_SRC1_POSXY = 2 (GPS)
EK3_SRC1_VELXY = 2 (GPS)
EK3_SRC1_POSZ = 1 (Baro)
EK3_SRC1_VELZ = 2 (GPS)
EK3_SRC1_YAW = 1 (Compass)
# Калибровка магнитометра
EK3_MAG_CAL = 3 (default для Copter)
# Affinity и переключение
EK3_AFFINITY = 15 (все сенсоры)
EK3_ERR_THRESH = 0.5
Конфигурация 2: Полёт без GPS (optical flow + дальномер)
# Базовая конфигурация
EK3_ENABLE = 1
AHRS_EKF_TYPE = 3
EK3_IMU_MASK = 3 (2 IMU)
EK3_PRIMARY = 0
# Источники навигации
EK3_SRC1_POSXY = 0 (None - нет абсолютной позиции)
EK3_SRC1_VELXY = 5 (OpticalFlow)
EK3_SRC1_POSZ = 2 (RangeFinder)
EK3_SRC1_VELZ = 2 (RangeFinder)
EK3_SRC1_YAW = 1 (Compass)
# Калибровка магнитометра
EK3_MAG_CAL = 3
# Affinity
EK3_AFFINITY = 8 (только магнитометр)
EK3_ERR_THRESH = 0.5
Конфигурация 3: Indoor полёт с Beacon системой
# Базовая конфигурация
EK3_ENABLE = 1
AHRS_EKF_TYPE = 3
EK3_IMU_MASK = 1 (1 IMU)
EK3_PRIMARY = 0
# Источники навигации
EK3_SRC1_POSXY = 4 (Beacon)
EK3_SRC1_VELXY = 0 (None - нет данных скорости)
EK3_SRC1_POSZ = 4 (Beacon)
EK3_SRC1_VELZ = 0 (None)
EK3_SRC1_YAW = 1 (Compass)
# Калибровка магнитометра
EK3_MAG_CAL = 3
Конфигурация 4: RTK GPS с dual antenna (GPS heading)
# Базовая конфигурация
EK3_ENABLE = 1
AHRS_EKF_TYPE = 3
EK3_IMU_MASK = 7 (3 IMU)
EK3_PRIMARY = 0
# Источники навигации
EK3_SRC1_POSXY = 2 (GPS)
EK3_SRC1_VELXY = 2 (GPS)
EK3_SRC1_POSZ = 1 (Baro)
EK3_SRC1_VELZ = 2 (GPS)
EK3_SRC1_YAW = 2 (GPS heading)
# Калибровка магнитометра
EK3_MAG_CAL = 5 (External Yaw sensor)
# Affinity
EK3_AFFINITY = 15
EK3_ERR_THRESH = 0.5
Диагностика и troubleshooting
Проверка состояния EKF
Для диагностики используйте параметры:
| Параметр | Описание |
|---|---|
EK3_VELinnov | Инновации скорости |
EK3_POSinnov | Инновации позиции |
EK3_HGTinnov | Инновации высоты |
EK3_MAGinnov | Инновации магнитометра |
EK3_VEL_test_ratio | Отношение инноваций скорости к порогу |
EK3_POS_test_ratio | Отношение инноваций позиции к порогу |
EK3_HGT_test_ratio | Отношение инноваций высоты к порогу |
EK3_MAG_test_ratio | Отношение инноваций магнитометра к порогу |
Интерпретация test_ratio
| Значение | Описание |
|---|---|
| < 1.0 | ✅ Нормально, измерения принимаются |
| 1.0 — 1.5 | ⚠️ Пограничное состояние, возможны отказы |
| > 1.5 | ❌ Измерения отвергаются, проблема с сенсором |
Типичные проблемы
Проблема 1: Высокие инновации магнитометра
Симптомы: EK3_MAG_test_ratio > 1.5
Возможные причины:
- Магнитные помехи от моторов/проводов
- Неправильная калибровка компаса
- Неверный
COMPASS_ORIENT
Решения:
- Проверить калибровку компаса
- Увеличить расстояние между компасом и источниками помех
- Использовать внешний компас
- Временно увеличить
EK3_MAG_I_GATEдо 400-500
Проблема 2: Высокие инновации высоты
Симптомы: EK3_HGT_test_ratio > 1.5
Возможные причины:
- Неисправный барометр
- Помехи от винтов на барометр
- Неверный
EK3_SRC1_POSZ
Решения:
- Проверить барометр (закрыть от ветра)
- Убедиться, что
EK3_SRC1_POSZ = 1(Baro) - Проверить
BARO_GND_PRESS
Проблема 3: Частое переключение lanes
Симптомы: EK3_PRIMARY постоянно меняется
Возможные причины:
- Слишком низкий
EK3_ERR_THRESH - Неисправный IMU
- Вибрации
Решения:
- Увеличить
EK3_ERR_THRESHдо 0.7-1.0 - Проверить вибрации (
VIBEв логах) - Исключить неисправный IMU из
EK3_IMU_MASK
Дополнительные параметры
Параметры задержек сенсоров
| Параметр | Описание | По умолчанию |
|---|---|---|
EK3_GPS_DELAY | Задержка GPS (мс) | 100 |
EK3_BARO_DELAY | Задержка барометра (мс) | 0 |
EK3_MAG_DELAY | Задержка магнитометра (мс) | 0 |
EK3_FLOW_DELAY | Задержка optical flow (мс) | 0 |
Параметры шумов
| Параметр | Описание | По умолчанию |
|---|---|---|
EK3_GPS_NOISE | Шум GPS (м/с) | 0.5 |
EK3_BARO_NOISE | Шум барометра (м) | 0.5 |
EK3_MAG_NOISE | Шум магнитометра | 0.05 |
EK3_GYRO_NOISE | Шум гироскопа (рад/с) | 0.01 |
EK3_ACC_NOISE | Шум акселерометра (м/с²) | 0.5 |
⚠️ Важно: Не меняйте параметры шумов без понимания их влияния. Значения по умолчанию оптимизированы для большинства случаев.
✅ Чек-лист настройки EKF3
Этап 1: Базовая конфигурация
- [ ]
EK3_ENABLE = 1 - [ ]
AHRS_EKF_TYPE = 3 - [ ]
EK3_IMU_MASKустановлен правильно (1, 3 или 7) - [ ]
EK3_PRIMARY = 0
Этап 2: Выбор источников
- [ ]
EK3_SRC1_POSXYустановлен правильно - [ ]
EK3_SRC1_VELXYустановлен правильно - [ ]
EK3_SRC1_POSZустановлен правильно - [ ]
EK3_SRC1_VELZустановлен правильно - [ ]
EK3_SRC1_YAWустановлен правильно
Этап 3: Калибровка
- [ ] Компас откалиброван
- [ ]
EK3_MAG_CALустановлен правильно (3 для Copter, 0 для Plane) - [ ]
COMPASS_USE,COMPASS_USE2,COMPASS_USE3настроены
Этап 4: Affinity и переключение
- [ ]
EK3_AFFINITYустановлен (рекомендуется 15) - [ ]
EK3_ERR_THRESHустановлен (рекомендуется 0.5)
Этап 5: Проверка
- [ ] Проверить
EK3_*_test_ratioв полёте - [ ] Убедиться, что все значения < 1.0
- [ ] Проверить логи на наличие отказов
📖 Источники
- EKF Source Selection and Switching
- Extended Kalman Filter (EKF) Overview
- EKF3 Affinity and Lane Switching
- ArduPilot Parameter Documentation
- EKF3 Tuning Guide
🎯 Заключение
EKF3 — мощный инструмент для навигации БПЛА, но требует правильного понимания архитектуры и параметров. Ключевые моменты:
- Используйте современные параметры
EK3_SRC1_*вместо устаревших масок - Настраивайте
EK3_AFFINITYдля отказоустойчивости - Мониторьте
EK3_*_test_ratioдля диагностики проблем - Не меняйте параметры шумов без необходимости
- Выбирайте количество lanes с учётом производительности CPU
