Симптом: компас в ArduPilot калибровку проходит, но курс на HUD не совпадает с реальным направлением, меняется после подключения аккумулятора или начинает «уплывать» при повышении газа. Такой случай нельзя лечить повторной калибровкой вслепую: нужно разделить ориентацию датчика, магнитные помехи, выбор компаса и ошибки оценки EKF.
Калибровка прошла — что это на самом деле доказало
Успешная калибровка говорит, что ArduPilot получил пригодные измерения и рассчитал параметры коррекции для текущего положения датчика. Она не доказывает, что внешний модуль установлен правильной стороной, что выбран нужный компас или что силовая часть не искажает магнитное поле под током.
ArduPilot использует компас как основной источник курса. Неверный heading особенно заметен в режимах, где автопилот должен двигаться по направлению или удерживать позицию. При этом GPS может показывать спутники, а акселерометры и гироскопы могут быть исправны: это не исключает ошибку магнитометра.
Сначала определите характер ошибки
| Наблюдение | Наиболее вероятная ветка | Первая проверка |
|---|---|---|
| Курс постоянно смещён примерно на один и тот же угол | Ориентация корпуса, ориентация внешнего модуля, выбранный primary compass или старые offsets. | Проверить AHRS_ORIENTATION, физическую установку модуля и список компасов в Setup | Mandatory Hardware | Compass. |
| Ошибка меняется после поворота аппарата вокруг разных осей | Неправильная ориентация, искажённое магнитное поле рядом с металлом или неудачная калибровка. | Убрать металл и силовые провода, проверить крепление и повторить обычную Compass Calibration. |
| На USB курс приемлем, после подключения батареи начинает уходить | Помеха от силовых проводов, ESC, моторов или другого потребителя. | Сравнить показания на неподвижном аппарате до и после подачи силового питания, не переходя в автономный режим. |
| Внутренний и внешний компасы показывают по-разному | Проблема приоритета, ориентации, размещения или одного из датчиков. | Сравнить устройства и их приоритеты; не менять вручную DEV ID. |
| Появляется Compass Variance или EKF variance | EKF не согласен с показаниями компаса и другими источниками оценки. | Открыть EKF на HUD, записать сообщение и проверить DataFlash-лог. |
| Есть Compass Offsets High | Один из offset превышает нормальный диапазон; возможна магнитная интерференция. | Переместить датчик от источника поля и повторить калибровку, а не маскировать сообщение параметром. |
Сноска 1. Это диагностические ветки, а не автоматическая постановка диагноза. Один симптом может иметь несколько причин, особенно на платах с несколькими магнитометрами.
Пошаговая проверка ориентации и выбора компаса
- Зафиксируйте состояние. Запишите версию ArduPilot, точную модель платы и GPS/compass-модуля, режимы, параметры
AHRS_ORIENTATION,COMPASS_USEи приоритеты компасов. Сохраните параметры до любых изменений. - Проверьте механическую ориентацию. Стрелка или маркировка внешнего модуля должна соответствовать документации производителя. Сам факт успешной калибровки не заменяет проверку, куда направлен корпус датчика.
- Сверьте направление корпуса. На неподвижном аппарате сравните переднюю часть корпуса с направлением, которое отображается в HUD. Не делайте вывод по одному значению на столе: поверните аппарат в несколько известных направлений, находясь вдали от крупного металла.
- Проверьте экран Compass. ArduPilot автоматически обнаруживает магнитометры, назначает им приоритеты и использует до трёх первых устройств. В Mission Planner проверьте список, primary compass и предупреждения о пропавшем датчике.
- Не редактируйте COMPASS_DEV_IDx вручную. Официальная документация отдельно предупреждает: менять нужно приоритет
COMPASS_PRIOx_IDчерез интерфейс, а не переписывать идентификатор обнаруженного устройства. - Повторите обычную калибровку. Сначала завершите accelerometer calibration, затем калибруйте компас на установленном модуле, вдали от батареи, стальных инструментов и силовых кабелей. После калибровки перезапустите автопилот, если Mission Planner этого требует.
Для внешнего компаса ArduPilot обычно определяет ориентацию во время обычной Compass Calibration. Но автоматическое определение может не сработать при сильном искажении поля, особенно при установке под углом 45 градусов. Параметр COMPASS_AUTO_ROT и ручные изменения ориентации нельзя применять как универсальный рецепт: сначала исключите механику и помехи.
Как отличить магнитную помеху от неверной ориентации
Ориентация обычно даёт устойчивую геометрическую ошибку: курс смещён уже на неподвижном аппарате и характер смещения повторяется при одинаковых положениях. Помеха от силовой части часто зависит от тока: на столе без аккумулятора курс выглядит приемлемо, а после включения ESC или при увеличении газа начинает меняться.
Сначала решают механическую проблему: выносят внешний компас от ESC, моторов, силовых проводов и металлических деталей, меняют трассировку кабелей и проверяют крепление. CompassMot — компенсация остаточной, в основном токозависимой помехи, а не исправление перепутанной оси или неверной ориентации. Если датчик находится внутри шумной силовой части, внешний GPS/compass или DroneCAN-модуль часто является более правильным решением, чем набор параметров.
CompassMot: когда процедура уместна
Официальная документация рекомендует CompassMot прежде всего при заметной интерференции от моторов, ESC и силовых проводов и при наличии корректного battery current monitor. Порядок включает фиксацию аппарата, снятие и переворот пропеллеров, подключение батареи, запуск Compass/Motor Calib и краткий подъём газа примерно до 50–75 процентов. Это стендовая процедура, во время которой пропеллеры вращаются, поэтому её нельзя превращать в обычный «проверим моторы».
ArduPilot указывает ориентиры по проценту интерференции: менее 30 процентов обычно считается приемлемым, 31–60 процентов находится в серой зоне, а при значении выше 60 процентов рекомендуется менять размещение автопилота или использовать внешний компас. Эти границы не отменяют проверку в реальном аппарате: результат зависит от механики, монитора тока и версии прошивки.
Где в этой цепочке появляется EKF
EKF не является «ещё одним компасом». Он сопоставляет данные компаса, GPS, IMU и других источников и оценивает, насколько им можно доверять. В документации ArduPilot variance лежит от 0 до 1: ближе к нулю оценка надёжнее, а значение около 1 означает низкую уверенность.
Сообщение Compass Variance означает, что heading компаса расходится с оценкой от других инерциальных источников. В Mission Planner можно нажать индикатор EKF на HUD и увидеть величину ошибки. Если две из вариаций compass, position или velocity превышают порог FS_EKF_THRESH в течение секунды, может сработать EKF failsafe. Это защитная реакция на проблему оценки, а не доказательство, что виноват именно магнитометр.
Не начинайте с изменения FS_EKF_THRESH. Повышение порога может отложить failsafe при плохом компасе или GPS, а отключение защиты убирает полезный барьер. Сначала сохраните сообщение, положение, режим, питание и DataFlash-лог; затем сравните EKF variance и инновации. Названия полей в логах зависят от версии и используемого EKF, поэтому не переносите таблицу из чужого лога без проверки.
Что искать в логе и HUD
- Снимок HUD с текущим heading, GPS status, режимом и сообщением Compass/EKF.
- Состояние каждого найденного компаса и его приоритет в Mission Planner.
- Момент, когда курс начал меняться: после калибровки, подключения батареи, запуска моторов или перехода в Loiter.
- DataFlash-лог с выбранным участком до и после события. В старой официальной статье EKF для примера упоминаются NKF4.SP, NKF4.SV и NKF4.SM; в новых версиях названия сообщений и набор полей могут отличаться.
- Результат повторного теста после одного изменения. Если одновременно менять компас, GPS, фильтры и failsafe, лог перестаёт объяснять причину.
Наблюдения сообщества и их границы
В экспортированном чате FPV Club встречается точный симптом: «компас калибровку проходит, но показывает совсем не те направления». В ответ участники связывали это с ESC, но такой совет нельзя считать подтверждённым диагнозом без теста зависимости от тока и проверки ориентации.
Другой кейс связан с RTK Here 4, SpeedyBee F405 и ситуацией, когда обычный GPS работает, а спутники не находятся. Обсуждение быстро ушло к скорости обмена и проверке SDA/SCL. Это хороший пример того, что проблемы GPS/компаса могут быть интерфейсными или протокольными, а не магнитными. Отдельная свежая ветка про инерциальную навигацию и полёт без GPS также не заменяет диагностику компаса: сначала нужно доказать, что heading и источники EKF исправны.
Эти наблюдения использованы как примеры пользовательского спроса. Они не заменяют официальную документацию и не являются рекомендацией отключать GPS, компас или failsafe.
Короткий вывод
- Калибровка прошла — проверьте не только offsets, но и ориентацию, приоритет и механическое размещение.
- Ошибка зависит от тока — ищите магнитную интерференцию в силовой части.
- Появилась Compass Variance или EKF variance — смотрите согласованность источников и лог, а не меняйте порог вслепую.
- Не используйте автономные режимы, пока курс не подтверждён на неподвижном аппарате и в безопасном ручном тесте.
Источники и связанные материалы
- ArduPilot: Advanced Compass Setup — приоритеты компасов, ориентация, CompassMot, сообщения ошибок и Magfit.
- ArduPilot: Compass Calibration — обычная калибровка в Mission Planner.
- ArduPilot: EKF Failsafe — variance, индикатор EKF, условия failsafe и работа с логом.
- FPV Club: Выбор компаса для ArduPilot — обзор типов и модулей; эта статья посвящена диагностике уже возникшего симптома.
- FPV Club: Принцип работы EKF3 — обзор архитектуры; здесь EKF рассматривается только как часть диагностики курса.
- ArduPilot Discuss — неофициальные практические обсуждения, которые нужно сверять с версией и железом.
- Наблюдения из экспортированного чата FPV Club. Анонимизированные кейсы
messages3.html#message217396,messages2.html#message193689иmessages3.html#message298004использованы для выбора симптомов, а не как доказательство универсальных настроек.
Сноска 2. Названия параметров, состав полей логов и поведение EKF меняются между версиями ArduPilot и типами аппаратов. Перед применением проверяйте официальную документацию для своей версии, платы и конфигурации. Проверено: 31 июля 2026 года.
