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

Приложение E — Карта изменений в коде

Для разработчиков, которые будут поддерживать прошивку дальше.

Семь load-bearing коммитов

Все поверх стока ArduPlane 4.6.3 (commit 3fc7011).

8702e23 — AHRS_WND_ENBL/SPD/DIR

Автор: ozz, 2026-04-09 Версия: Valkiriya V1.1.0

Добавляет три параметра DCM-стороны: AHRS_WND_ENBL, AHRS_WND_SPD, AHRS_WND_DIR. При WND_ENBL=1 ветер из параметров перезаписывает DCM-оценку в drift_correction().

Файлы:

  • libraries/AP_AHRS/AP_AHRS.cpp — три новых AP_GROUPINFO
  • libraries/AP_AHRS/AP_AHRS.h — геттеры + private members
  • libraries/AP_AHRS/AP_AHRS_DCM.cpp — собственно patch в drift_correction

Известная регрессия: else { _wind.zero } block при WND_ENBL=0 — зануляет DCM-оценку если параметры обнулены. См. common/wind и [TASK_c515aa46_ekf_review.md].

Статус: dead code при AHRS_OPTIONS=32 (наш baseline).

23351a4 — EKF3 init bypass GPS check

Автор: ozz, 2026-04-12 Версия: Valkiriya V1.1.3

Позволяет EKF3 инициализироваться без GPS 3D-fix когда EK3_SRC1_POSXY ∈ {4, 6} (Beacon или ExtNav).

Файлы:

  • ArduPlane/version.h — bump
  • libraries/AP_NavEKF3/AP_NavEKF3_core.cpp:482-485 — проверка posxy_source

Diff core:

if (assume_zero_sideslip() && dal.gps().status(...) < GPS_OK_FIX_3D) {
    const auto posxy_source = frontend->sources.getPosXYSource();
    if (posxy_source != EXTNAV && posxy_source != BEACON) {
        // оригинальный return false
    }
}

5257387 — Снят setLatLng guard

Автор: ozz, 2026-04-12 Версия: Valkiriya V1.1.3

Удаляет PV_AidingMode и deadReckonDeclare_ms guards в setLatLng. Это позволяет CMD 43003 проходить вне AID_NONE.

Файлы: libraries/AP_NavEKF3/AP_NavEKF3_PosVelFusion.cpp (4 строки изменены, 3 удалены).

Статус (V1.2.0): guard восстановлен, но только для НЕ-ExtNav/BEACON источников. См. 5913765.

d04f9d1 — Zholobov latch

Автор: ozz, 2026-04-25 Версия: Valkyrie V1.1.5

Главный архитектурный патч прошивки. Добавляет first-call snap + soft-correction логику в NavEKF3_core::setLatLng().

Новые сущности:

  • bool _has_forced_position (private member)
  • uint32_t _last_forced_position_ms (private member)
  • NavEKF3_core::applyExtNavSoftCorrection() (метод)
  • EK3_EXTNAV_DRIFT (AP_Param, idx 12)

Файлы:

  • libraries/AP_NavEKF3/AP_NavEKF3_core.h — declaration
  • libraries/AP_NavEKF3/AP_NavEKF3_core.cpp — init в InitialiseVariables()
  • libraries/AP_NavEKF3/AP_NavEKF3_PosVelFusion.cpp — dispatch + applyExtNavSoftCorrection
  • libraries/AP_NavEKF3/AP_NavEKF3.cpp — новый параметр EK3_EXTNAV_DRIFT
  • libraries/AP_NavEKF3/AP_NavEKF3.h — AP_Float _extNavDriftNoise

Подробное объяснение: tech/architecture/zholobov, [DOC_zholobov_latch_explained.md].

5913765 — Flight-safe baseline V1.2.0

Автор: ozz, 2026-04-26 Версия: Valkyrie V1.2.0

  • Восстановлен setLatLng AID_NONE guard, narrowed к не-EXTNAV/BEACON источникам
  • FAKE airspeed pre-arm в mandatory_checks (защита от bench-фичей в полётной сборке)
  • Version bump

Файлы:

  • ArduPlane/AP_Arming.cpp — mandatory check для FAKE airspeed
  • ArduPlane/version.h
  • libraries/AP_NavEKF3/AP_NavEKF3_PosVelFusion.cpp — восстановление guard'а

46c32e6 — FAKE airspeed backend

Автор: ozz, 2026-04-26 Версия: Valkyrie V1.1.9

Bench-only backend AP_Airspeed_FAKE (TYPE=17): публикует константную TAS=10 m/s + healthy=true. Используется для тестов EKF3 на стенде без физического pitot.

Production-сборка: compile-out через AP_AIRSPEED_FAKE_ENABLED=0 (default). На полётной прошивке этот код физически отсутствует.

Bench-сборка: через extra-hwdef (см. ниже).

Файлы:

  • ArduPlane/ArduPlane.cpp — runtime warning в one_second_loop
  • libraries/AP_Airspeed/AP_Airspeed.cpp/his_fake_backend() accessor
  • libraries/AP_Airspeed/AP_Airspeed_FAKE.cpp/h — backend
  • libraries/AP_Airspeed/AP_Airspeed_Params.cpp — TYPE=17

02ea64f — Bench extra-hwdef

Автор: ozz, 2026-04-26 Версия: Valkyrie V1.2.0 (bench)

./waf configure --board CUAV-X7 --extra-hwdef=Tools/scripts/extra-hwdef-valkyrie-bench.dat

Включает AP_AIRSPEED_FAKE_ENABLED=1 + бамп THISFIRMWARE с суффиксом "BENCH" — оператор видит в GCS prearm string, физически невозможно перепутать bench-бинарник с flight-бинарником.

Файлы:

  • Tools/scripts/extra-hwdef-valkyrie-bench.dat
  • libraries/AP_Airspeed/AP_Airspeed_config.h

Reverted коммиты (что было и убрали)

В истории есть несколько reverted экспериментов:

  • b9923b7 (V1.1.6) → 7dd8545 revert: ARSPD_SIM virtual airspeed override
  • de203e5 (V1.1.7) → efb6532 revert: fix ARSPD_SIM visibility to EKF
  • e1a6fac (V1.1.8) → 4e027a3 revert: synthetic TAS injection в EKF readAirSpdData

Эти эксперименты заменены на чистый FAKE backend (46c32e6) — более изолированное решение.

Сборка

Production (flight)

cd /source/ardupilot
./waf configure --board CUAV-X7
./waf plane

Бинарник: build/CUAV-X7/bin/arduplane.apj

FAKE airspeed выключен на этапе компиляции через AP_AIRSPEED_FAKE_ENABLED=0.

Bench (для стендовых тестов)

./waf configure --board CUAV-X7 --extra-hwdef=Tools/scripts/extra-hwdef-valkyrie-bench.dat
./waf plane

Бинарник с суффиксом "BENCH" в THISFIRMWARE. На взлёт не загружать — pre-arm заблокирует через mandatory check.

Ссылки на дизайн / исследования

  • TASK_bb8deb41_ekf3_dual_scenario_design.md — drift budget, mode-hold strategy, soft-injection options
  • TASK_46d6e915_ekf3_aiding_modes.md — режимы aiding в EKF3
  • TASK_ekf3_longcoast_source.md — глубокий анализ исходников
  • TASK_ekf3_longcoast_web.md — внешние источники (Tridge, Zholobov)
  • TASK_c515aa46_ekf_review.md — review кастомных патчей
  • DOC_zholobov_latch_explained.md — пояснение к коду
  • TASK_v115_verify.md — верификация V1.1.5

Внешние источники