ArduPilot: EKF Failsafe и защита от потери GPS

Все статьи

⚠️ Важно: В ArduPilot 4.6/4.7 старый параметр FS_GPS_ENABLE устарел. Современная защита использует EKF Failsafe и Dead Reckoning Failsafe.


Что такое EKF Failsafe?

EKF Failsafe — это система мониторинга здоровья расширенного фильтра Калмана (EKF3), которая обнаруживает проблемы с оценкой позиции (GPS-глитчи, ошибки компаса, высокие вибрации) и предотвращает «улёты» дрона.

Когда срабатывает?

EKF failsafe активируется, когда любые две из отслеживаемых дисперсий EKF превышают значение параметра FS_EKF_THRESH в течение 1 секунды.

Дисперсии EKF — это числа от 0 до 1, показывающие уверенность фильтра в своих оценках:

  • 0 = очень надёжно
  • 1.0 = очень ненадёжно

EKF вычисляет дисперсии путём сравнения данных от нескольких сенсоров. Например, если GPS-позиция внезапно прыгает, но акселерометры не показывают ускорения — дисперсия позиции возрастет.


🔧 Параметры EKF Failsafe

Основные параметры

ПараметрОписаниеЗначенияПо умолчанию
FS_EKF_THRESHПорог дисперсии для срабатывания0.0 — 1.00.8
FS_EKF_ACTIONДействие при срабатывании0-31
FS_EKF_POSКакие дисперсии отслеживать (битовая маска)0-77
FS_EKF_HOMEСрабатывание до взлёта0/10

FS_EKF_THRESH — чувствительность

ЗначениеОписаниеРекомендация
0EKF failsafe отключёнТолько для тестов
0.6Высокая чувствительностьМожет сработать при агрессивных манёврах
0.8Баланс (default)✅ Для большинства случаев
0.9-1.0Низкая чувствительностьПри частых ложных срабатываниях

⚠️ Внимание: Увеличение порога снижает чувствительность, но при реальном сбое дрон улетит дальше перед посадкой.

FS_EKF_ACTION — что делать при срабатывании

ЗначениеДействиеКогда использовать
0Только сообщение на GCSДля анализа, не рекомендуется
1Land (посадка с контролем пилота)✅ По умолчанию
2AltHold (зависание)Если можете вручную посадить
3Land даже в STABILIZEМаксимальная защита

Pilot-controlled Land (FS_EKF_ACTION=1): пилот сохраняет контроль по крену и тангажу, но дрон снижается со скоростью LAND_SPD_MS и автоматически разоружает моторы после касания земли.

FS_EKF_POS — какие дисперсии отслеживать

Битовая маска, определяющая, какие дисперсии EKF учитываются при проверке порога:

БитЗначениеДисперсияОписание
01CompassКурс (магнитометр)
12PositionГоризонтальная позиция
24VelocityГоризонтальная скорость

Комбинации:

ЗначениеОтслеживаемые дисперсии
0Нет (failsafe отключён)
1Только компас
2Только позиция
3Компас + позиция
4Только скорость
5Компас + скорость
6Позиция + скорость
7Все три (default) ✅

Важно: Failsafe требует превышения порога любых двух отслеживаемых дисперсий. Если в маске только одна — failsafe никогда не сработает.

FS_EKF_HOME — срабатывание до взлёта

ЗначениеОписание
0Failsafe игнорируется до взлёта (default) ✅
1Failsafe активен всегда, даже на земле

Рекомендация: Оставьте 0, иначе при плохом сигнале GPS на земле дрон не даст взлететь.


🎯 Защита от GPS-глитчей: EK3_GLITCH_RAD

EK3_GLITCH_RAD — параметр для фильтрации резких скачков GPS-позиции.

ПараметрОписаниеЗначенияПо умолчанию
EK3_GLITCH_RADМаксимальный скачок позиции между двумя GPS-измерениями0-100 м50 м

Как работает

Параметр задаёт максимальное допустимое радиальное расстояние между двумя последовательными GPS-измерениями:

  • Если разница превышает EK3_GLITCH_RAD → измерение считается глитчем и отклоняется
  • Если EK3_GLITCH_RAD = 0 → измерения не отклоняются, но velocity innovations обрезаются (clipped) до gate size с использованием EK3_VEL_I_GATE

Когда менять?

СитуацияРекомендация
Стандартные полётыОставить default (50 м)
Акробатические полётыУстановить EK3_GLITCH_RAD = 0
Частые GPS-глитчи (город, лес)Увеличить до 70-100 м
Точные миссии, съёмкаУменьшить до 30-40 м
RTK GPSУменьшить до 10-20 м

⚠️ RTK GPS: При использовании RTK с сантиметровой точностью большое значение EK3_GLITCH_RAD может привести к тому, что RTK-коррекции будут приняты как «нормальные», а вот резкие скачки (многолучевость) не будут отфильтрованы. Уменьшение порога повышает строгость фильтрации.


Dead Reckoning Failsafe (ArduPilot 4.3+)

Dead Reckoning Failsafe позволяет дрону вернуться домой при потере GPS, используя инерциальные датчики и оценку ветра.

Главное условие

⚠️ DR работает ТОЛЬКО если ветер был оценён ДО потери GPS!

Если EKF не успел оценить ветер до потери сигнала → дрон не сможет корректно компенсировать снос и поведение будет непредсказуемым.

Параметры Dead Reckoning

ПараметрОписаниеЗначенияПо умолчанию
FS_DR_ENABLEРежим DR failsafe0=Off, 1=Land, 2=RTL0
FS_DR_TIMEOUTМаксимальное время полёта в режиме dead reckoning1-30 сек10 сек

Как это работает

  1. Потеря GPS → дрон летит нормально 7-10 секунд (используя инерциальные датчики)
  2. Если за это время GPS не восстановился → «Dead Reckoning started» на GCS
  3. Дрон переключается в RTL и летит домой, используя последнюю оценку ветра
  4. Если за FS_DR_TIMEOUT секунд дрон не достиг точки RTL → срабатывает EKF failsafeLand
  5. Даже если GPS восстановился во время RTL → дрон продолжает RTL (не возвращается в предыдущий режим)

Важно: FS_DR_TIMEOUT — это НЕ время на возврат домой, а максимальное время полёта в режиме dead reckoning до принудительной посадки. По умолчанию всего 10 секунд — за это время дрон физически не успеет долететь до точки RTL на большом расстоянии.

Предварительная настройка

Для работы Dead Reckoning необходимо настроить оценку ветра:

# Коэффициенты сопротивления (для вашего аппарата)
EK3_DRAG_BCOEF_X = 0.1    # Коэффициент сопротивления по X
EK3_DRAG_BCOEF_Y = 0.1    # Коэффициент сопротивления по Y  
EK3_DRAG_MCOEF = 0.05     # Коэффициент сопротивления моторов

⚠️ Важно: Без правильной настройки drag-коэффициентов оценка ветра будет неточной, и Dead Reckoning не даст полезного результата.


Что происходит при срабатывании failsafe?

Визуальная и звуковая индикация

  • LED мигает красно-жёлтым
  • Звуковой сигнал (tone alarm)
  • На HUD GCS появляется предупреждение «EKF variance» (при наличии телеметрии)
  • В логах записывается событие для последующего анализа

Поведение в разных режимах

Режим полётаЧто происходит
Stabilize, Acro, AltHoldНичего, но нельзя переключиться в GPS-режимы (Loiter, RTL, Auto)
Loiter, PosHold, RTL, Auto, GuidedПереключение в режим согласно FS_EKF_ACTION (по умолчанию Land)

После срабатывания EKF failsafe пилот может вернуть управление, переключившись в ручной режим (AltHold/Stabilize) для самостоятельного возврата и посадки.


Диагностика в реальном времени

Мониторинг в Mission Planner

  1. Кнопка «EKF» на HUD — показывает текущие дисперсии
  • Нажмите для просмотра графиков в реальном времени
  1. GPS статус — должен быть 3D Fix минимум
  2. Vibe — высокие вибрации ухудшают работу EKF

Параметры телеметрии для мониторинга

ПараметрОписаниеНорма
EKF.VelTestRatioОтношение инноваций скорости к gate< 1.0
EKF.PosTestRatioОтношение инноваций позиции к gate< 1.0
EKF.MagTestRatioОтношение инноваций компаса к gate< 1.0
EKF.HgtTestRatioОтношение инноваций высоты к gate< 1.0
EKF.SSVДисперсия скорости (0-1)< FS_EKF_THRESH
EKF.SSPДисперсия позиции (0-1)< FS_EKF_THRESH
EKF.SSHДисперсия курса (0-1)< FS_EKF_THRESH
wind_velОценка скорости ветраДля DR failsafe
wind_dirНаправление ветраДля DR failsafe

📈 Анализ логов

После полёта анализируйте данные flash-логов:

Графики EKF инноваций

В Mission Planner постройте графики:

  • NKF4.SP — инновации позиции (position innovation)
  • NKF4.SV — инновации скорости (velocity innovation)
  • NKF4.SM — инновации компаса (compass innovation)
  • NKF4.SSH, NKF4.SSP, NKF4.SSV — дисперсии EKF

Пример срабатывания: Если инновации позиции и скорости одновременно превышают FS_EKF_THRESH (0.8) → через 1 секунду срабатывает failsafe и дрон переходит в Land.


Рекомендуемые настройки

Для стандартного квадрокоптера (без RTK)

# EKF Failsafe
FS_EKF_THRESH = 0.8
FS_EKF_ACTION = 1            # Land с контролем пилота
FS_EKF_POS = 7               # Отслеживать все три дисперсии
FS_EKF_HOME = 0              # Не срабатывать на земле

# GPS-глитчи
EK3_GLITCH_RAD = 50          # Default

# Dead Reckoning (опционально)
FS_DR_ENABLE = 2             # RTL при потере GPS
FS_DR_TIMEOUT = 10           # 10 секунд max dead reckoning

# Оценка ветра (для DR)
EK3_DRAG_BCOEF_X = 0.1
EK3_DRAG_BCOEF_Y = 0.1
EK3_DRAG_MCOEF = 0.05

Для гоночного дрона (агрессивные полёты)

# EKF Failsafe
FS_EKF_THRESH = 0.9          # Меньше ложных срабатываний
FS_EKF_ACTION = 1
FS_EKF_POS = 7
FS_EKF_HOME = 0

# GPS-глитчи
EK3_GLITCH_RAD = 0           # Обрезка вместо отклонения

# Dead Reckoning — отключён (не нужен для FPV)
FS_DR_ENABLE = 0

Для миссий на большие расстояния

# EKF Failsafe
FS_EKF_THRESH = 0.8
FS_EKF_ACTION = 2            # AltHold (дать пилоту время)
FS_EKF_POS = 7
FS_EKF_HOME = 0

# GPS-глитчи
EK3_GLITCH_RAD = 30          # Более строгая фильтрация

# Dead Reckoning
FS_DR_ENABLE = 2             # RTL
FS_DR_TIMEOUT = 15           # Чуть больше времени

Для RTK GPS

# EKF Failsafe
FS_EKF_THRESH = 0.8
FS_EKF_ACTION = 1

# GPS-глитчи — строже для RTK
EK3_GLITCH_RAD = 15          # Для сантиметровой точности

# Dead Reckoning
FS_DR_ENABLE = 2
FS_DR_TIMEOUT = 10

Тестирование Dead Reckoning

В симуляторе (SITL)

  1. Запустите симулятор с GPS
  2. Взлетите в режиме Loiter, дайте EKF оценить ветер (подождите 30-60 секунд)
  3. Отключите GPS через MAVLink команду или переключатель
  4. Через 7-10 секунд должно появиться «Dead Reckoning started»
  5. Дрон переключится в RTL и полетит домой
  6. Через FS_DR_TIMEOUT секунд сработает EKF failsafeLand

На реальном дроне (ОСТОРОЖНО!)

⚠️ Тестирование только на открытой площадке, вдали от людей и препятствий!

  1. Подготовьтесь к перехвату управления в режиме Stabilize/AltHold
  2. Настройте вспомогательный переключатель:
   RC9_OPTION = 65    # Отключение GPS (любой канал RC)
  1. Взлетите в режиме Loiter на безопасной высоте (5-10 м)
  2. Дайте EKF оценить ветер — подождите 30-60 секунд, проверьте wind_vel в GCS (должен быть ненулевой)
  3. Активируйте переключатель для отключения GPS
  4. Через 7-10 секунд → «Dead Reckoning started»RTL
  5. Если дрон начинает дрейфовать → немедленно переключитесь в AltHold
  6. Выключите переключатель для восстановления GPS
  7. После теста скорректируйте FS_DR_TIMEOUT и drag-коэффициенты по результатам

⚠️ Важные моменты

  1. Без GPS инерциальные датчики держат позицию ~10-30 секунд, потом дрейф становится критическим
  2. При срабатывании failsafe рекомендуется взять управление в режиме Stabilize/AltHold
  3. Не отключайте EKF failsafe (FS_EKF_THRESH=0) — это основная защита от «улётов» дрона
  4. Dead Reckoning требует правильной настройки drag-коэффициентов и предварительной оценки ветра
  5. Вибрации могут вызывать ложные срабатывания EKF failsafe — следите за уровнем вибраций в логах
  6. EKF failsafe записывается в dataflash логи для последующего анализа
  7. EK3_GLITCH_RAD — важный параметр для фильтрации GPS-глитчей, особенно для акробатических полётов и RTK
  8. RTK GPS требует уменьшения EK3_GLITCH_RAD до 10-20 м для корректной работы

🔄 Что изменилось с устаревшими параметрами?

Устаревший параметрСовременная замена
FS_GPS_ENABLEFS_EKF_ACTION + FS_DR_ENABLE
GPSGLITCH_RADIUSEK3_GLITCH_RAD
GPSGLITCH_ACCELВстроено в EKF (не настраивается отдельно)

Почему удалили? EKF3 анализирует все сенсоры комплексно, поэтому отдельные параметры защиты от GPS-глитчей больше не нужны — фильтр сам определяет ненадёжные данные и управляет их влиянием.


Источники и документация


Версия статьи: для ArduPilot 4.6 и 4.7
Последнее обновление: Июнь 2026


Что исправлено в этой версии:

✅ Убраны цифровые ссылки в тексте

✅ Удалены фейковые видео-ссылки

✅ Добавлен параметр FS_EKF_POS с таблицей битовой маски

✅ Добавлен параметр FS_EKF_HOME

✅ Уточнено условие работы Dead Reckoning (ветер ДО потери GPS)

✅ Уточнено поведение EK3_GLITCH_RAD = 0

✅ Добавлен раздел про RTK GPS

✅ Уточнено описание FS_DR_TIMEOUT (НЕ время на возврат)

✅ Добавлены дисперсии EKF (EKF.SSH/SSP/SSV) в раздел диагностики

✅ Расширены рекомендуемые настройки (добавлен профиль для RTK)

Прокрутить вверх