Приложение 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_GROUPINFOlibraries/AP_AHRS/AP_AHRS.h— геттеры + private memberslibraries/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— bumplibraries/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— declarationlibraries/AP_NavEKF3/AP_NavEKF3_core.cpp— init вInitialiseVariables()libraries/AP_NavEKF3/AP_NavEKF3_PosVelFusion.cpp— dispatch + applyExtNavSoftCorrectionlibraries/AP_NavEKF3/AP_NavEKF3.cpp— новый параметр EK3_EXTNAV_DRIFTlibraries/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 airspeedArduPlane/version.hlibraries/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_looplibraries/AP_Airspeed/AP_Airspeed.cpp/h—is_fake_backend()accessorlibraries/AP_Airspeed/AP_Airspeed_FAKE.cpp/h— backendlibraries/AP_Airspeed/AP_Airspeed_Params.cpp— TYPE=17
02ea64f — Bench extra-hwdef¶
Автор: ozz, 2026-04-26 Версия: Valkyrie V1.2.0 (bench)
Включает AP_AIRSPEED_FAKE_ENABLED=1 + бамп THISFIRMWARE с суффиксом "BENCH" — оператор видит в GCS prearm string, физически невозможно перепутать bench-бинарник с flight-бинарником.
Файлы:
Tools/scripts/extra-hwdef-valkyrie-bench.datlibraries/AP_Airspeed/AP_Airspeed_config.h
Reverted коммиты (что было и убрали)¶
В истории есть несколько reverted экспериментов:
b9923b7(V1.1.6) →7dd8545revert: ARSPD_SIM virtual airspeed overridede203e5(V1.1.7) →efb6532revert: fix ARSPD_SIM visibility to EKFe1a6fac(V1.1.8) →4e027a3revert: synthetic TAS injection в EKF readAirSpdData
Эти эксперименты заменены на чистый FAKE backend (46c32e6) — более изолированное решение.
Сборка¶
Production (flight)¶
Бинарник: 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 optionsTASK_46d6e915_ekf3_aiding_modes.md— режимы aiding в EKF3TASK_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
Внешние источники¶
- Zholobov ArduPlane 4.4.3 thread — оригинальный pattern для soft-correction
- Tridge airspeed calibration — drift rate analysis
- AHRS_OPTIONS::DisableDCMFallbackFW — параметр DCM-fallback