Поведение в полёте¶
Что происходит с EKF во время полёта в трёх типичных сценариях.
Сценарий 1 — Регулярные коррекции (нормальный режим)¶
CMD 43003 приходят раз в 5–30 секунд.
┌──────────────────────────────────────────────────────────────┐
│ EKF state: AID_ABSOLUTE │
│ Wind: активно обучается из airspeed-fusion │
│ Pos variance: остаётся низкой (< 1 m²) │
│ Каждая CMD 43003 → soft-correction (плавный pull позиции) │
│ Pilot видит: иконка борта плавно двигается, без скачков │
└──────────────────────────────────────────────────────────────┘
Pilot: ничего особенного делать не нужно. Стандартный полёт.
Сценарий 2 — Coast (gap между коррекциями)¶
Коррекции пропали на 30 секунд или больше — например, потеря связи, переключение канала, оператор работает с другим бортом.
t=0 (последняя CMD 43003)
│
│ EKF в AID_ABSOLUTE, dead_reckoning=false
│
t=7-10s posTimeout=true (внутри EKF)
│
│ dead_reckoning=true → treatWindStatesAsTruth=true
│ Ветер "замораживается" на последней оценке
│ Airspeed превращается в pure NE-velocity-сенсор
│
t=30s
│ Pos variance растёт: ~2-5 m² (расходится с дрейфом)
│ Иконка борта продолжает двигаться, но менее точно
│
t=60-120s
│ Pos variance: ~20-50 m² (значительный drift)
│ Borh всё ещё навигирует, но cumulative error растёт
│
t=120s (Tridge limit, см. design)
│ Cumulative drift ~60-120 m
│
t=∞ если коррекций нет: EKF продолжает coast'ить пока airspeed работает
Что pilot увидит в GCS:
pos_horiz_varianceрастёт постепенно (не скачком).- Флаги остаются:
ATTITUDE | POS_HORIZ_REL | POS_HORIZ_ABS. EKF Mag Var,EKF Vel Varостаются низкими.
Что делать pilot'у:
- Если плановый gap — ничего, продолжать миссию.
- Если ожидался поток коррекций, а он пропал > 60 секунд — проверить связь с наземной системой коррекций.
- Если pos_variance > 100 (drift > 10 m) — рассмотреть RTL/abort.
Сценарий 3 — Возврат коррекций (soft-correction)¶
После gap'а пришла очередная CMD 43003.
CMD 43003
│
↓
┌──────────────────────────────────────────────────────────────┐
│ Внутри EKF: │
│ - _has_forced_position уже = true (snap был на земле) │
│ - applyExtNavSoftCorrection путь │
│ - R_OBS = MAX(pos_err, drift_floor)² где │
│ drift_floor = (gap_seconds) × EK3_EXTNAV_DRIFT │
│ - Большой R → малый Kalman gain → мягкий pull │
│ - Не вызывается ResetPositionNE │
│ - Не вызывается ResetVelocity │
│ - Wind state НЕ сбрасывается (остаётся frozen) │
│ │
│ Pos variance: падает обратно (значит коррекция принята) │
│ treatWindStatesAsTruth: false → P[22][22] = max → wind │
│ быстро переучивается из накопленных TAS-наблюдений │
└──────────────────────────────────────────────────────────────┘
Что pilot увидит:
- Иконка борта плавно подтянется к новой позиции (без скачка).
pos_horiz_varianceупадёт после CMD 43003.- Контроллер НЕ увидит step-input — самолёт не дёрнется.
В отличие от 4.5 / стока 4.6.3:
- Там было: жёсткий
ResetPositionNE→ step на ~drift метров → крен/тангаж от контроллера → потенциальная нестабильность на высокой скорости. - Здесь: плавное вытягивание, без перерасчёта скорости.
Variances — что значат численно¶
| Что | Значение | Что значит |
|---|---|---|
pos_horiz_variance < 1 |
м² | Оценка точна до 1 метра |
pos_horiz_variance ≈ 25 |
м² | Оценка точна до 5 м (граница EK3_GLITCH_RAD) |
pos_horiz_variance > 100 |
м² | Оценка ушла на 10+ метров, drift серьёзный |
velocity_variance < 0.5 |
(m/s)² | Скорость точна до 0.7 m/s |
velocity_variance > 5 |
(m/s)² | Скорость ушла на 2.2+ m/s — проблема с airspeed или dead_reckoning слишком долгий |
Когда инициировать RTL / Abort¶
Стоп-сигналы
pos_horiz_variance > 500(drift > 22 м) и не падает при следующей CMD 43003 → коррекции не действуют, что-то сломано.velocity_variance > 10→ airspeed нездоровый или EKF потерял track скорости.- Флаг
POS_HORIZ_ABSпропал → EKF вAID_NONE. Критично. RTL может уже не сработать. - STATUSTEXT
EKF3 unhealthy→ потенциальный fallback (но мы его запретили черезAHRS_OPTIONS=32). Failsafe должен сработать. - Длительный gap коррекций > 120 секунд + признаки drift'а на видео/наблюдении.
В этих случаях:
- Перевести в
MANUAL(если в зоне видимости). - Перевести в
RTL(если есть надежда что origin/home корректны). - В крайнем случае —
FBWAи ручное возвращение с разворотом против ветра.
RTL работает только пока EKF в POS_HORIZ_ABS. Если EKF упал — RTL не вернёт борт.
Telemetry, на которую смотреть¶
EKF_STATUS_REPORT:
flags # должно быть ≥ 0x19 (ATT|RPOS|APOS)
velocity_variance # < 0.5 норма
pos_horiz_variance # < 1.0 норма, < 25 терпимо
pos_vert_variance # < 0.5 норма
compass_variance # < 0.3 норма
VFR_HUD:
airspeed # должна быть жива, иначе coast не работает
groundspeed
alt # высота от баро
GLOBAL_POSITION_INT:
lat, lon # текущая EKF-оценка в LLH