Запрещённые комбинации¶
Комбинации параметров, которые приводят к молчаливому отказу EKF, опасному поведению или к тому что прошивка работает как сток (все кастомные патчи молчат).
1. EK3_SRC1_POSXY = 3 (GPS) + любая попытка использовать CMD 43003¶
Симптом: CMD 43003 проходит через setLatLng, но попадает в legacy hard-snap путь, защищённый AID_NONE guard'ом. Если EKF в AID_ABSOLUTE на GPS — коррекция отвергается. Если EKF в AID_NONE — коррекция вызовет жёсткий step, без soft-correction.
Эффект: Прошивка ведёт себя как обычная 4.6.3. Все кастомные патчи (Zholobov latch, init-bypass) молчат.
Решение: EK3_SRC1_POSXY = 6.
2. EK3_SRC1_POSXY = 6 + GPS подключён физически¶
Не запрещено, но бессмысленно. EKF не будет использовать GPS-данные для XY-позиции. Если GPS физически на борту — он будет тратить такты на чтение, но в фьюжен не пойдёт.
Что делать:
- Если GPS не нужен —
GPS_TYPE = 0(тогда и pre-arm не будет ругаться на отсутствие fix). - Если GPS на борту как fallback на будущее — оставить
GPS_TYPE = 1, EKF просто проигнорирует.
3. EK3_SRC1_VELXY = 6 (EXTNAV) при использовании CMD 43003¶
CMD 43003 шлёт только позицию, не скорость. Если поставить VELXY = 6, EKF ждёт velocity-данные от ExtNav, не получает, timeout'ит и идёт на VEL-fault.
Решение: EK3_SRC1_VELXY = 0 (None) — явно сообщить «скорость не приходит, вычисляй из IMU+airspeed».
4. AHRS_OPTIONS бит 0 = 0 (DCM fallback включён) + EK3_SRC1_POSXY = 6¶
Симптом: Если EKF в полёте станет «нездоровым» (healthy() = false), AHRS молча переключится на DCM. DCM не знает про ExtNav — он будет dead-reckoning'ить по airspeed + heading. ExtNav-коррекции не повлияют на DCM-позицию. Возможен «полёт куда-нибудь не туда».
Решение: AHRS_OPTIONS = 32 (бит 0 включён, DCM fallback запрещён). Лучше получить failsafe-сообщение, чем тихий переход в DCM.
5. EK3_EXTNAV_DRIFT = 0¶
Параметр имеет range 0.1 .. 5.0, но AP_Param set иногда позволяет записать 0. При нулевом значении:
То есть R_OBS будет полностью определяться pos_err от ExtNav (минимум _gpsHorizPosNoise). На длинном coast'е это даст слишком узкий R → большой Kalman gain → почти hard-snap. Эффект Zholobov latch практически нивелируется.
Решение: держать EK3_EXTNAV_DRIFT ∈ [0.3, 2.0]. Default 1.0 безопасен.
6. ARMING_CHECK бит 3 (GPS lock) = 1 при EK3_SRC1_POSXY = 6¶
Симптом: pre-arm не пройдёт — будет требовать GPS 3D-fix, который у нас нет.
Решение: убедиться что в ARMING_CHECK бит 3 выключен. В твоём 4.5-baseline 771810 = 0b10111100011000010 — бит 3 уже отключён. Проверить после миграции на 4.6.3.
7. EK3_PRIMARY ≠ 0 без понимания multi-core¶
Прошивка может запускать несколько cores EKF3 (EK3_IMU_MASK определяет какие IMU использует каждый core). Если EK3_PRIMARY = 1, выбран core 1 как основной. На нашей конфигурации EK3_IMU_MASK = 3 (cores 0 и 1), EK3_PRIMARY = 0 (core 0).
Менять EK3_PRIMARY имеет смысл только при отладке affinity / lane reset. В нормальной работе — оставить как есть.
8. SCR_ENABLE = 0 при наличии Lua-скриптов проекта¶
Если в ANDR_* / BOOST_* / S_* параметрах содержится логика для Lua-скриптов (мы видели в 4.5 baseline что они активны), и SCR_ENABLE = 0 — скрипты не загрузятся, параметры станут мёртвым кодом, поведение борта изменится. Проверить после миграции.
9. AHRS_EKF_TYPE ≠ 3¶
Только EKF3 поддерживает кастомные патчи прошивки. EKF2 не имеет ни init-bypass, ни Zholobov latch. DCM не имеет вообще никаких ExtNav-механизмов.
Решение: AHRS_EKF_TYPE = 3 обязательно. В нашем baseline стоит.