Сводка изменений vs 4.5¶
Краткий обзор для тех, кто помнит старую прошивку. Подробности — в соответствующих разделах.
Терминология
GpsInject = MAVLink-сообщение GPS_INPUT (msg id 232) от наземной системы. Драйвер AP_GPS_MAV (GPS_TYPE=14) принимает его и публикует в EKF как обычный GPS-fix. Физического GPS-приёмника на борту никогда не было.
CMD 43003 = MAV_CMD_EXTERNAL_POSITION_ESTIMATE — стандартная upstream MAVLink-команда (в ArduPilot с 4.5.0-beta1), формат COMMAND_INT. В 4.5 уже была в прошивке, но мы её не использовали. Теперь — основной канал коррекций.
EKF origin — внутренняя точка отсчёта EKF. Фильтр хранит позицию борта в метрах North/East относительно этой точки, не в широте/долготе. До того как origin установлен, EKF в принципе не может выдать глобальные координаты. Подробнее: tech/architecture/origin.
За одну страницу¶
4.5 → 4.6.3 V1.2.0
EK3_SRC1_POSXY = 3 (GPS) → EK3_SRC1_POSXY = 6 (ExtNav)
EK3_SRC1_VELXY = 3 (GPS) → EK3_SRC1_VELXY = 0 (None)
EK3_SRC1_VELZ = 3 (GPS) → EK3_SRC1_VELZ = 0 (None)
AHRS_OPTIONS = 0 → AHRS_OPTIONS = 32 (DisableDCMFallbackFW)
EK3_WIND_P_NSE = 0.1 → EK3_WIND_P_NSE = 0.05
+ новый параметр EK3_EXTNAV_DRIFT = 1.0
AHRS_WND_ENBL/SPD/DIR — активны → деактивируем (DCM fallback off)
Канал коррекций позиции (что наземка реально шлёт):
было: GpsInject — MAVLink GPS_INPUT через GPS_TYPE=14 (MAV-driver)
стало: CMD 43003 — MAV_CMD_EXTERNAL_POSITION_ESTIMATE напрямую в setLatLng
Origin EKF (точка отсчёта координат внутри EKF):
было: прошивка сама записывает координату при первом GpsInject-fix
(через стандартную auto-set-origin логику GPS-драйвера)
стало: оператор присылает координату командой SET_GPS_GLOBAL_ORIGIN
один раз за сессию, до первой CMD 43003
Реакция EKF на коррекцию позиции:
было: жёсткий ResetPositionNE каждый раз при поступлении GpsInject
стало: первая коррекция — snap (на земле, безопасно);
следующие — soft-correction через Zholobov latch
EKF init без коррекций:
было: требует GPS 3D-fix (которым в нашем случае был GpsInject)
стало: пропускает GPS check при EK3_SRC1_POSXY=6
Почему перешли с GpsInject на CMD 43003¶
Кастомный soft-correction патч (Zholobov latch) живёт только в функции NavEKF3_core::setLatLng(). Если данные приходят через GPS_INPUT → AP_GPS_MAV → стандартная GPS-fusion ветка EKF, то наш латч не на этом пути кода. Каждая коррекция вызывала бы обычный snap (или отбрасывалась guard'ом при healthy aiding), и весь смысл «мягкой коррекции на высокой скорости» терялся.
Чтобы использовать soft-correction, нужно подавать коррекции в EKF через путь setLatLng(). Единственный стандартный способ это сделать — MAV_CMD_EXTERNAL_POSITION_ESTIMATE (CMD 43003). Поэтому переход на CMD 43003 не «обновление формата», а архитектурно вынужденное решение, без которого все остальные патчи бесполезны.
По разделам¶
Источники EKF¶
EKF теперь работает на ExternalNav вместо GPS. Это значит:
- Координаты приходят только через CMD 43003 (или через
VISION_POSITION_ESTIMATE— у нас не используется). - Скоростей от внешнего источника нет — раньше они приходили в
GPS_INPUTвместе с позицией; CMD 43003 несёт только координаты. EKF вычисляет скорость из IMU + airspeed. - Высота — от барометра (как и раньше).
- Pitot работал и в 4.5, и сейчас — но сейчас он критичен, потому что других velocity-обзёрваций у EKF нет.
Кастомные патчи¶
В прошивке семь load-bearing коммитов поверх стока 4.6.3:
| Коммит | Что делает |
|---|---|
8702e23 |
Параметры AHRS_WND_* (мёртвый код при нашей конфигурации) |
23351a4 |
EKF init не требует GPS 3D-fix при SRC1_POSXY ∈ {4, 6} |
5257387 |
Снят guard на setLatLng для CMD 43003 |
d04f9d1 |
Zholobov latch — soft-correction на повторных CMD 43003 |
5913765 |
V1.2.0 baseline: восстановлен AID_NONE guard для НЕ-ExtNav источников |
46c32e6 |
FAKE airspeed backend (bench-only, на полётной прошивке выключен) |
02ea64f |
extra-hwdef для bench-сборки |
Процедура взлёта¶
Главное операционное отличие. Раньше:
наземка стартует поток GpsInject → EKF получает первый «GPS-fix»
→ origin устанавливается автоматически → arm → взлёт
Теперь (Вариант B):
1. Boot
2. SET_GPS_GLOBAL_ORIGIN (один раз за сессию)
3. Первая CMD 43003 (snap на земле, безопасно)
4. arm
5. Взлёт
6. В полёте: следующие CMD 43003 — soft-correction
Ветер¶
Параметры AHRS_WND_ENBL/SPD/DIR больше не нужны: они пишут в DCM, а DCM fallback мы запрещаем через AHRS_OPTIONS=32. EKF учит ветер сам из airspeed.
DCM fallback¶
Раньше при «нездоровом» EKF AHRS молча переключался на DCM. Теперь это запрещено битом 0 AHRS_OPTIONS: если EKF упадёт, AHRS останется на EKF (с предупреждением). Это страховка от ситуации «полёт навигируется DCM dead-reckoning'ом без ExtNav».
Что не изменилось¶
- Барометр для высоты — как и был.
- Три компаса — те же.
- TECS / L1 — те же.
- ARMING_CHECK битмаска у тебя в 4.5 уже подготовлена (бит GPS lock выключен).
- IMU, RC, серво — без изменений.