Эволюция методов защиты от джамминга и спуфинга GPS в ArduPilot (до версии 4.7)
Ниже представлена хронология развития функций защиты от помех (jamming) и спуфинга (spoofing) GPS в прошивке ArduPilot, основанная на официальной документации и репозитории проекта.
Хронологическая таблица
| Версия | Год | Функция защиты | Описание |
|---|---|---|---|
| 3.1-rc3 | Октябрь 2013 | GPS Glitch Protection (базовая) | Первая реализация: сравнение новой позиции с экстраполированной из предыдущей; параметры GPSGLITCH_RADIUS (5 м) и GPSGLITCH_ACCEL (10 м/с²) |
| 3.2–3.3 | 2014–2015 | EKF1/EKF2 интеграция | Внедрение расширенного фильтра Калмана для оценки состояния; базовая проверка инноваций (innovation checks) для отклонения аномальных измерений GPS |
| 3.4 | Октябрь 2016 | EKF2 по умолчанию | Улучшенная статистическая проверка согласованности измерений через EKF_POS_GATE, EKF_VEL_GATE; защита от резких скачков позиции |
| 3.5 | Июль 2017 | Поддержка визуальной одометрии | Возможность использования не-GPS источников (Visual Odometry, Pozyx) для резервирования при потере/спуфинге GPS |
| 3.6 | Октябрь 2018 | ChibiOS + улучшенный драйвер GPS | Поддержка более надёжной обработки сообщений от u-blox; подготовка к приему флагов спуфинга/джамминга от приёмников |
| 4.0 | Декабрь 2019 | EKF3 по умолчанию + параметр EK3_OPTIONS | Добавлен бит 0 JammingExpected: при потере сигнала >2 сек требуется повторная проверка качества перед возобновлением использования GPS |
| 4.1 | Октябрь 2021 | Улучшенное переключение между двумя GPS | Параметр GPS_AUTO_SWITCH с режимом «Use best» и «Blend»; EKF3 affinity для переключения целых «полос» фильтра при ухудшении здоровья датчика |
| 4.2 | Май 2022 | Поддержка флагов u-blox M9N/F9P | Начата обработка сообщений UBX-NAV-SAT/UBX-NAV-PVT с флагами spoofDet и jammingState; отображение в логах и MAVLink |
| 4.3 | Октябрь 2022 | Улучшенная логика EKF_GLITCH_RAD | При длительном несовпадении (> EKF_GLITCH_RAD) применяется плавный оффсет к позиции (1 м/с), а не резкий скачок; снижает риск ухода при спуфинге |
| 4.4 | Август 2023 | Двойной резервный канал в EKF3 | Возможность назначения разных источников (GPS1/GPS2) разным EKF- lanes; автоматическое отключение «загрязнённого» канала |
| 4.5 | Апрель 2024 | Расширенная диагностика спуфинга | Добавлены сообщения лога GPS_SPOOF, GPS_JAM; интеграция с DroneCAN-совместимыми приёмниками (ARK, CUAV), передающими статус защиты |
| 4.6 | Май 2025 | Улучшения в GPS_DRV_OPTIONS | Бит 3: маршрутизация данных RTK через CAN между двумя приёмниками без участия автопилота — снижает поверхность атаки; бит 4: выбор типа высоты (AMSL/ellipsoid) для согласованности при спуфинге высоты |
| 4.7 | (в разработке, ~2025–2026) | Предварительная детекция спуфинга на предполётной проверке | Экспериментальная функция: анализ расхождений между барометром, компасом и «подозрительным» положением до взлёта; обсуждается в сообществе |
Ключевые параметры защиты (актуальные на 4.6)
Базовая защита (Glitch Protection)
GPSGLITCH_RADIUS = 5.0 # Макс. отклонение позиции (м)
GPSGLITCH_ACCEL = 10.0 # Макс. ускорение для проверки (м/с²)
Продвинутая защита через EKF3
EKF_POS_GATE = 5.0 # Порог инноваций позиции (σ)
EKF_VEL_GATE = 5.0 # Порог инноваций скорости (σ)
EKF_GLITCH_ACCEL = 1.5 # Ускорение для роста «круга неопределённости» (м/с²)
EKF_GLITCH_RAD = 50.0 # Порог для активации плавного оффсета (м)
EK3_OPTIONS bit 0 = 1 # JammingExpected: строгая проверка после потери сигнала
Переключение и резервирование
GPS_AUTO_SWITCH = 1 # 0=Primary, 1=Best, 2=Blend, 4=Primary-if-3D
GPS_PRIMARY = 0 # Выбор основного приёмника
EKF3_SRC1_GPS / SRC2_GPS # Назначение источников для разных EKF-полос
Ограничения и рекомендации
- Аппаратная зависимость: ArduPilot полагается на флаги спуфинга/джамминга от приёмника (u-blox M9N/F9P, Septentrio, Unicore). Без поддержки на уровне железа программная защита ограничена детекцией аномалий [[60]][[65]].
- RTK и спуфинг: При использовании RTK важно, чтобы базовая станция была защищена. ArduPilot не проверяет подлинность корректирующих данных — уязвимость для атак на инфраструктуру.
- EKF3 не панацея: Фильтр отклоняет статистически несогласованные измерения, но изощрённый спуфинг с плавным «перетягиванием» позиции может пройти проверку. Рекомендуется комбинация:
- Два независимых GPS с разными антеннами
- Визуальная одометрия или оптический поток (для низколетящих аппаратов)
- Мониторинг расхождений между барометром и высотой GPS
- Логирование для пост-анализа: Включите
LOG_BITMASKс флагами EKF3, GPS и NAV для последующего выявления атак:
LOG_BITMASK += EKF3 + GPS + NAV + MSG
Где искать актуальную информацию
- Официальная документация: ardupilot.org → разделы GPS Failsafe, EKF Navigation, Positioning
- Release Notes в репозитории: github.com/ArduPilot/ardupilot →
ArduCopter/ReleaseNotes.txt - Параметры: ArduPilot Parameter List — поиск по
GPS,EKF,EK3 - Обсуждения: discuss.ardupilot.org — теги
gps,spoofing,ekf3
💡 Совет: Если вы используете ArduPilot без RTK (как в вашем случае), настройте
EK3_OPTIONS = 1(JammingExpected) иGPS_AUTO_SWITCH = 1для автоматического выбора более надёжного приёмника при наличии двух модулей. Это повысит устойчивость к кратковременным помехам без усложнения системы.
Для получения самых свежих данных по версии 4.7 рекомендую отслеживать официальный блог ArduPilot и репозиторий на GitHub, так как функционал продолжает активно развиваться.

