Summary
DACS PoC v1.2 — "Approach A" baseline correction pipeline + tooling. 85 commits.
- v1.2 Approach A (B_pure_coil + apply_baseline)
- 3-frame model (coil/sensor/px4) with signed-permutation R_sc, R_cp via setup.yaml
- ADC sensor cal (offset+gain) — resolves 2.4× scale mystery
- Mavlink dual stream (raw + calibrated)
- 11 cal-skeleton variants (sphere / random / yz_focus / sweep / cube / concentric)
- New tools: scripts/batch_calibrate.py (--repeat for repeatability), scripts/measure_step_response.py
- guard_seconds 0.3 → 0.1s (data-backed by step response measurement)
Findings (docs/project/status.md)
- Coverage hypothesis rejected (§10): all sweeps converge to ZODIAG ≈ -0.113 ± 0.005
- Hand-cal location-dependent (§11): same chip, different rooms → ZODIAG jumps 0.028
- DACS measurement σ_ZODIAG = 0.0001 — sensor-noise-floor
- Verify RMS gap (§11.5): DACS 3.96 µT vs hand-cal 8.15 µT on rig (overfit-vs-generalize tension)
Next
- Heading test on coil rig (§4.4) is decisive
- refactor/cal-estimator branch ready for sym3axis-driven refactor
Test plan
-
uv run ruff check (only pre-existing px4_mag_quick_cal_bf.py errors) -
uv run mypy . — 74 source files clean -
uv run pytest -q — 202 passed -
Coil-rig heading test post-merge