FPV Club · ArduPilot

EKF3 — оцениватель состояния в ArduPilot. Он объединяет высокочастотные данные IMU с измерениями GPS, барометра, компаса, дальномера, Optical Flow, внешней навигации и других источников, чтобы оценивать ориентацию, скорость и положение аппарата.

Тема: EKF3Уровень: среднийМетод: параметры → лог → проверка
Главная мысль

EKF3 не «чинит» плохой датчик и не превращает один удачный параметр в готовую настройку. Сначала нужно понять, какой источник должен использоваться, затем проверить его качество и только после этого разбирать инновации, lane switching и failsafe.

Что оценивает EKF3

EKF использует IMU для прогноза состояния, а затем корректирует прогноз измерениями внешних датчиков. Внутренний набор оцениваемых величин зависит от типа аппарата и включённых функций: в него входят ориентация, скорость, положение, смещения датчиков, магнитное поле и, для подходящих конфигураций, ветер или другие состояния. Поэтому фиксированное число «состояний EKF3» нельзя считать универсальным описанием всех версий и типов техники.

Инновация — это разница между прогнозом и измерением до коррекции. Большая инновация не говорит сама по себе, какой датчик неисправен: причиной может быть задержка, неверная ориентация, вибрации, плохая привязка, неподходящий источник или реальный отказ датчика.

Разделяй три слоя

Сенсорное значение показывает, что пришло от датчика. Инновация показывает расхождение с прогнозом. Состояние EKF показывает, принял ли фильтр измерение и может ли использовать оценку для режима полёта.

EKF2 и EKF3: что действительно отличается

В актуальной документации ArduPilot EKF3 является основным источником оценки ориентации и положения. EKF2 может оставаться доступным для совместимости, но нельзя описывать его как фильтр, который оценивает только одну ось. Оба семейства фильтра оценивают навигационное состояние; у EKF3 есть более новые источники и механизмы, включая внешнюю навигацию, маяки, энкодеры колёс и sensor affinity, если они поддержаны конкретной машиной и прошивкой.

Включение EKF3 параметром EK3_ENABLE=1 запускает расчёт, но ещё не означает, что его выход используется контроллером. Для выбора EKF3 в AHRS применяется AHRS_EKF_TYPE=3; на Copter часть связанных параметров управляется самой прошивкой. Перед изменением проверь документацию именно своей ветки ArduPilot.

Ядра, lanes и EK3_IMU_MASK

Для каждого выбранного IMU может быть запущено отдельное EKF3-ядро, которое в диагностике называют lane. В каждый момент контроллер использует выход одного primary-ядра, а остальные могут продолжать работать и сравниваться с ним.

EK3_IMU_MASK Смысл
1 первый IMU
2 второй IMU
3 первый и второй IMU

Дополнительные ядра потребляют память и CPU; допустимое количество определяется платой и конфигурацией, а не универсальным правилом «не больше двух» или «до трёх». EK3_PRIMARY выбирает primary-ядро по индексу среди включённых IMU. Это не оценка качества сенсора и не ручной способ исправить плохой монтаж.

Источники EK3_SRC

Параметры EK3_SRC1_*, EK3_SRC2_* и EK3_SRC3_* задают наборы источников. Номер источника — это не автоматический «резерв»: активный набор можно выбирать вспомогательным каналом через RCx_OPTION=90, а поведение дополнительных опций зависит от EK3_SRC_OPTIONS. Не называй SRC2 запасным источником, который обязательно включится при отказе SRC1.

Параметр Подтверждённые варианты
EK3_SRCx_POSXY 0 None; 3 GPS; 4 Beacon; 6 ExternalNav
EK3_SRCx_VELXY 0 None; 3 GPS; 4 Beacon; 5 Optical Flow; 6 ExternalNav; 7 Wheel Encoder
EK3_SRCx_POSZ 0 None; 1 Baro; 2 RangeFinder; 3 GPS; 4 Beacon; 6 ExternalNav
EK3_SRCx_VELZ 0 None; 3 GPS; 4 Beacon; 6 ExternalNav

У вертикальной скорости нет значения «RangeFinder»: дальномер задаёт вертикальную позицию через EK3_SRCx_POSZ=2, а не вертикальную скорость. Значения и доступность отдельных источников зависят от типа машины и версии прошивки; перед копированием параметров открой текущую страницу параметров.

Пример: GPS

EK3_SRC1_POSXY = 3  # GPS
EK3_SRC1_VELXY = 3  # GPS
EK3_SRC1_POSZ  = 1  # Baro
EK3_SRC1_VELZ  = 3  # GPS
EK3_SRC1_YAW   = 1  # Compass

Пример: Optical Flow без глобальной позиции

EK3_SRC1_POSXY = 0  # None
EK3_SRC1_VELXY = 5  # Optical Flow
EK3_SRC1_POSZ  = 1  # Baro
EK3_SRC1_VELZ  = 0  # None
EK3_SRC1_YAW   = 1  # Compass

Для Optical Flow отдельно проверяются качество потока, дальномер, поверхность, ориентация и ограничение высоты. Наличие ненулевых полей opt_m_x и opt_m_y ещё не доказывает, что Loiter сможет удерживать позицию.

EK3_MAG_CAL — режим слияния, а не команда калибровки

EK3_MAG_CAL определяет режим использования магнитометра в EKF. Название параметра не означает запуск процедуры калибровки компаса. В документации Copter значение 3 описано как fusion на земле и переход к 3-осевому fusion после первого полевого условия и сброса yaw; это значение указано как default для Copter. Для Plane, Rover, старых веток и внешнего yaw правила могут отличаться.

Калибровка, ориентация, выбор основного компаса и магнитные помехи проверяются отдельными параметрами и измерениями. Не лечи неверный курс увеличением innovation gate: это может лишь сделать плохое измерение менее заметным.

Innovation gates и чтение лога

EK3_VEL_I_GATE, EK3_POS_I_GATE, EK3_HGT_I_GATE и EK3_MAG_I_GATE задаются как процент числа стандартных отклонений. Например, 500 соответствует 5σ, а 300 — 3σ в описании параметров. Это порог проверки конкретного измерения, а не показатель «точности EKF».

В сообщении XKF4 поля SV, SP, SH и SM описываются как squared innovation test ratios: значение ниже 1 обычно означает принятие измерения, выше 1 — его отбрасывание. В XKF3 находятся сами инновации IVN, IVE, IVD, IPN, IPE, IPD, IMX, IMY, IMZ и IYAW; поля RErr и ErSc помогают сравнивать и оценивать ядра. Состав логов может отличаться по типу машины и версии.

Не используй несуществующую универсальную шкалу «1–1,5 погранично, выше 1,5 датчик неисправен». Сначала смотри, какое измерение отвергнуто, в каком режиме, на каком ядре и что происходило с датчиком, вибрациями и источниками.

Безопасный порядок диагностики

  1. Зафиксируй исходное состояние. Сохрани прошивку, полный параметр-файл, тип платы, выбранные источники и режимы failsafe.
  2. Проверь механику и датчики. Ориентацию IMU и компаса, крепление, вибрации, питание, GPS-антенну, дальномер и поверхность для Optical Flow.
  3. Раздели симптом. Отдельно проверь плохой курс, дрейф позиции, ошибку высоты, GPS glitch, отсутствие origin и невозможность включить режим.
  4. Сними данные. В Mission Planner проверь EKF на HUD и скачай DataFlash-лог. Для EKF3 начни с XKF3, XKF4, XKF5 и XKFS, сопоставляя время и номер ядра.
  5. Измени одну причину за раз. Не повышай gates и не меняй noise-параметры, пока не доказано, что проблема именно в модели измерения, а не в монтаже или входных данных.
  6. Проверяй результат без пропеллеров. После наземной проверки короткий полёт выполняй только в безопасном месте и с ручным способом восстановления.
Границы применимости

Примеры параметров показывают структуру источников, а не готовый пресет. Названия полей, доступные источники, defaults и реакция failsafe зависят от vehicle type и версии ArduPilot. Для реального полёта приоритет имеют текущая документация, параметр-файл и лог конкретного аппарата.

Источники и связанные материалы

Прокрутить вверх
На связи