Перейти к содержанию

Поведение в полёте

Что происходит с 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'а на видео/наблюдении.

В этих случаях:

  1. Перевести в MANUAL (если в зоне видимости).
  2. Перевести в RTL (если есть надежда что origin/home корректны).
  3. В крайнем случае — 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