Skip to content

v0.60.0

Choose a tag to compare

@github-actions github-actions released this 17 Jun 14:52
218a7b7

0.60.0 (2026-06-17)

Features

  • 3D drone path/pose viewer (Phase 0 + Phase 1 prototype) (#302) (b4da4a4)
  • add the S4 forward-backward and S5 parallax outlier gates (#323) (73bcd81)
  • bench: graphs energy-model integration (cpu/gpu/kpu-t64) (#204) (0fc9249)
  • bench: on-device energy backends — tegrastats + external meter (#207) (e257a25)
  • bench: vio_bench — euroc accuracy + latency + rapl energy report (#201) (ba13dec)
  • bench: vio_bench progress output + usage docs (#208) (077751a)
  • ci: add a Windows MSVC build + test target (#216) (5f439b4)
  • complete the structural stage pages (S3, S4, S7-S9) (#319) (d3ec53b)
  • core: add cxx bridge, build.rs, and lifecycle state machine (#133) (3ee12fb)
  • core: add KPU MemoryProvider stub (#131) (a2445c8)
  • core: add SITL MemoryProvider with shm + heap backends (3d99738)
  • core: define MemoryProvider trait + BufferHandle + MemErr (#127) (5c1d67a)
  • core: SITL MemoryProvider — Linux shm + heap backends (#129) (3d99738)
  • cv: FAST-9 corner detector with non-maximum suppression (#174) (53c8850)
  • cv: gaussian image pyramid with configurable scale (#170) (afefa22)
  • cv: image container + grayscale PGM/PNG I/O (#169) (087a432)
  • cv: sub-pixel pyramidal KLT feature tracker (#176) (9a54aec)
  • eval: add IMU Allan-variance noise characterization (#268) (#276) (4eafd31)
  • eval: add NEES-against-ground-truth consistency (closes #264) (#273) (a93cc17)
  • eval: add NEES/NIS filter-consistency statistics (9dc9a1b)
  • eval: NEES/NIS filter-consistency statistics (#264) (#271) (9dc9a1b)
  • landmark cloud + camera frustum in the 3D viewer (#303) (7f4f532)
  • math: add SE2(3) extended-pose Lie group — the R-IEKF state manifold (#347) (#353) (1a7da91)
  • math: arithmetic-type plumbing for MTL5 over Universal types (#143) (4163b22), closes #25
  • math: camera models — pinhole+radtan, fisheye, unified omni (#172) (8ce771b)
  • math: direct sparse Cholesky/LDLT for SPD normal equations (#151) (818ef32), closes #28
  • math: header-only Lie groups SO3, SE3, Sim3 (#147) (3dd410f), closes #29
  • math: Krylov solvers (CG, GMRES, BiCGSTAB) over MTL5 ITL (#149) (f27b47c)
  • math: non-linear least squares solvers (GN, LM, Dogleg) (d85444d), closes #30
  • math: non-linear least squares solvers (gn, lm, dogleg) (#153) (d85444d)
  • math: sparse storage views (CSR, CSC, COO) over caller buffers (#145) (d556f14), closes #26
  • math: tensor views over std::span with stride/shape metadata (bb868d5), closes #24
  • math: TensorView<T,Rank> over std::span with stride/shape metadata (#141) (bb868d5)
  • math: thin Krylov solver wrappers (cg, gmres, bicgstab) over MTL5 ITL (f27b47c), closes #27
  • S5 feature-triangulation probe + stage page (parallax gate, quantified) (#313) (8fbf1cd)
  • sdk: add 6-DoF rigid camera extrinsics to MsckfInvariantBackend (105852f)
  • sdk: add 6-DoF rigid camera extrinsics to MsckfInvariantBackend (#396) (8ed59cc)
  • sdk: add S10 calibration-uncertainty R-term; measure it end-to-end on V2_03 (#328) (bce345f)
  • sdk: add the R-IEKF invariant camera measurement update (#347) (#356) (c136991)
  • sdk: add the R-IEKF invariant IMU propagation on SE2(3) (#347) (#354) (98683ab)
  • sdk: camera updaters with MSCKF null-space projection (#185) (191c4e7)
  • sdk: feature representations + MSCKF null-space projection (#180) (58bc198)
  • sdk: force-dynamic VI-init validation on MH_05 (real-data #211) (#246) (f80fa63)
  • sdk: implement Phase C 6-DoF online extrinsic calibration for MsckfInvariantBackend (f9007da)
  • sdk: IMU initialization (static + dynamic) (#184) (b638566)
  • sdk: imu preintegration (closed-form, clean-room) (#178) (355661b)
  • sdk: MSCKF backend implementation (#186) (02f3948)
  • sdk: observability null-space probe — localizes the #212 NEES leak to yaw (#337) (#338) (2720ec7)
  • sdk: online extrinsic calibration (S10-as-state), mechanism + synthetic proof (#332) (#333) (e5fc23f)
  • sdk: perspective-n-point resectioning via DLT + RANSAC (#236) (fb3370a)
  • sdk: Phase C - 6-DoF online extrinsic calibration for MsckfInvariantBackend (#400) (f9007da)
  • sdk: prove the right-invariant propagation Φ is state-independent (R-IEKF Phase A, #348) (#351) (a0c35aa)
  • sdk: Q/R consistency-sweep knobs + #212 root-cause diagnosis (#279) (b718e5e)
  • sdk: R-IEKF Phase-A gate — invariant parameterization flattens the yaw leak (#348) (#349) (427134e)
  • sdk: R-IEKF VIO backend adapter + continuous-update divergence localization (#365) (#367) (f7c2671)
  • sdk: resolve metric scale in ImuInitializer::try_dynamic (#233) (0df58a0)
  • sdk: S6 update probe; lock S3/S5/S6/S9 contracts by measurement (#325) (df6cafe)
  • sdk: sliding-window optimization backend skeleton (#189) (456a373)
  • sdk: square-root covariance MSCKF backend (#218) (fe8014b)
  • sdk: state vector + propagator + state-helper (MSCKF core) (#182) (0e78154)
  • sdk: surface per-update NIS for filter-consistency monitoring (149c127)
  • sdk: surface per-update NIS for filter-consistency monitoring (#264) (#272) (149c127)
  • sdk: top-level vio estimator API (#188) (c068bd9)
  • sdk: two-view SfM bootstrap (essential matrix + RANSAC) (#231) (1900a16)
  • sdk: vio backend interface separating front-end from estimator (377dfaa), closes #34
  • sdk: VioBackend interface separating front-end from estimator (#167) (377dfaa)
  • sdk: wire dynamic VI init into MsckfBackend (InitMethod::Dynamic) (#238) (108cf02)
  • sdk: wire the MsckfInvariantBackend (R-IEKF filter) (#347) (#357) (a52f6f8)
  • test: EuRoC verdict — online extrinsic calibration cleared as #212 driver (#332) (#343) (98488f6)
  • tools: --trace tap for EuRoC asl_replay — real per-stage trace dumps (#387) (b9cc112)
  • tools: add EuRoC source + scene-video metric overlay to vio_pipeline (#292) (f4b8e9e)
  • tools: add VIO stage-probe utilities — S0 sensor-model + S2 propagation (#283) (785e875)
  • tools: depth-colored scene overlay + vio_pipeline how-to guide (#300) (96df842)
  • tools: end-to-end VIO noise->robustness demo (synthetic source) (#290) (047defa)
  • tools: inter-stage VIO trace bus — typed, human-readable per-stage I/O records (#385) (e5b8caf)
  • tools: s0 sensor-model inspector — real EuRoC frame/IMU → camera & noise contract (#394) (f1599e6)
  • tools: s1 initialization inspector — real EuRoC bootstrap → initial state & covariance (#407) (60872dd)
  • tools: S4 frontend inspector — real EuRoC FAST+KLT tracks, visualized (#390) (4ecb210)
  • tools: s5 triangulation inspector — real EuRoC tracks+poses → 3D landmarks (#398) (7a5ffb0)
  • tools: s6 msckf-update inspector — real EuRoC updates → state/covariance (#403) (a707fbd)
  • tools: wire S1 (initialization) stage-probe (#286) (22c8b71)
  • tools: wire S10 (calibration) stage-probe to quantify the #212 Rx4 (#295) (9a01499)
  • wire the S4 visual-frontend probe + data-backed page (#321) (67ac45c)

Bug Fixes

  • build: link the Rust core in MSVC Debug by pinning the release CRT (#226) (59075af)
  • docs: make topology + VIO stage-flow SVGs readable in dark theme (#334) (c6d494c)
  • docs: point the benchmark generator at the moved euroc test (#223) (41bd61b)
  • docs: re-anchor EuRoC gate extraction (unbreak Deploy Documentation) (#256) (7021cd6)
  • docs: re-anchor the EuRoC gate extraction to the run_euroc_replay call (7021cd6)
  • math: correctness fixes from post-merge review of Phase 2 (#159) (fbb35e0)
  • math: guard degenerate inputs in the Lie-group helpers (#214) (d8034bf), closes #161
  • sdk: bootstrap dynamic-init SfM on the widest baseline (445f1bb)
  • sdk: bootstrap dynamic-init SfM on the widest baseline (#247) (#251) (445f1bb)
  • sdk: correct dynamic-init gravity sign — real-data divergence → bounded (#247) (#252) (84cc8ba)
  • sdk: correct dynamic-init gravity sign + widest-parallax bootstrap (84cc8ba)
  • sdk: resolve R-IEKF continuous divergence (#366) (4f4ee1d)
  • sdk: resolve R-IEKF continuous divergence (#366) (#388) (4f4ee1d)
  • sdk: set EuRoC extrinsics + gravity-align init; surface VIO divergence (#209) (f14a450)
  • test: make the vio_latency budget informational on CI (#240) (#259) (9edb5ed)
  • test: split euroc-moving-start local decls (set -u unbound var) (#243) (4737ebf)
  • tools: create the --out directory so artifacts are not silently dropped (#298) (029727d)

Reverts

  • docs: restore original working vio_run.jsonl (397a2d2)

Code Refactoring

  • test: drop redundant layer/_test segments from test filenames (#225) (2ff7cd3)

Build System

  • cmake: add CMakePresets.json with sitl/kpu-cross/wsl2 presets (89440ff)
  • cmake: add CMakePresets.json with sitl/kpu-cross/wsl2 presets (8d37aa8)
  • cmake: add cross-toolchain.cmake for KPU aarch64 cross-compile (d6b1471)
  • cmake: add cross-toolchain.cmake for KPU aarch64 cross-compile (89e0e1c)
  • cmake: wire FetchContent for foundational dependencies (8eb02f8)
  • cmake: wire FetchContent for foundational dependencies (0e6dc7c)
  • test: generate test targets from a compile_all glob macro (#220) (33c6126)

Continuous Integration

  • add lint job (clippy + cargo fmt + clang-format) (2622eb7)
  • add lint job (clippy + cargo fmt + clang-format) (75d3c91)
  • gate Rust coverage at >= 85% line coverage (#135) (739c12c)
  • install sccache in lint job too (RUSTC_WRAPPER consistency) (dd341a0)
  • integrate sccache for Rust + C++ object caching (69851c6)
  • integrate sccache for Rust + C++ object caching (0865db2)
  • windows: build the MSVC job via Ninja + sccache (#222) (2d59380)

Documentation

  • add CLAUDE.md and bootstrap plan (c2dc4f1)
  • add CLAUDE.md and bootstrap plan; gitignore .claude/ (4509cca)
  • add Phase 0 Foundation retrospective (589a74e)
  • add Phase 0 Foundation retrospective (6e2bd0e)
  • add Phase 1 design — Rust RM + cxx bridge (#125) (bec0037)
  • add PR template with the per-PR docs-update rule (#196) (d2a669c)
  • add Starlight + Doxygen documentation site for Phases 0-3 (#192) (9ccfac2)
  • add VIO S0–S10 stage-flow SVG and replace the pipeline ASCII dataflow (2b93b51)
  • add VIO S0–S10 stage-flow SVG; replace pipeline ASCII dataflow (#330) (2b93b51)
  • assessment: a plain-language tutorial on NEES/NIS filter consistency (98c1f58)
  • assessment: plain-language NEES/NIS filter-consistency tutorial (#274) (98c1f58)
  • assessment: VIO diagnostic methodology + instrumentation build list (#269) (b2bf23e)
  • fix doubled base path on the API reference sidebar link (#194) (857354a)
  • improve overview phrasing and trigger documentation rebuild (56f6811)
  • math: Doxygen API docs + concepts reference page (#157) (f54a245)
  • math: doxygen API docs and a concepts reference page (f54a245), closes #32
  • migrate diagnostic-methodology as the section's method primer (#316) (fd4b7bb)
  • pin benchmark gate numbers to their source (#197) (01d43da)
  • process documentation (441810a)
  • record the #212 observability investigation — yaw leak localized, FEJ refuted, R-IEKF next (#345) (714bc9f)
  • render architecture topology as SVG; wire in orphaned S0 fisheye figures (#327) (af801c6)
  • render LaTeX math on the site (KaTeX) + camera-calibration walkthrough (#362) (5b0e426)
  • S1 initialization stage page (algorithm sound, seed suspect) (#315) (54d8f33)
  • S10 online-calibration stage page (the #212 centerpiece) (#307) (91ead13)
  • S2 IMU-propagation stage page (a cleared #212 candidate) (#311) (8623a9a)
  • S6 MSCKF-update stage + consistency-analysis page (#309) (08a9864)
  • session log + changelog for the R-IEKF/FEJ/verdict arc (#369) (24c21ff)
  • session: wrap up 2026-06-05 — VIO pipeline docs + 3D viz (#318) (7ec2091)
  • session: wrap up 2026-06-05 — VIO pipeline docs section + 3D viz (7ec2091)
  • site: add S2 IMU-propagation stage page (a cleared #212 candidate) (8623a9a)
  • site: add the S1 initialization stage page (54d8f33)
  • site: add the S10 online-calibration stage page (#212 centerpiece) (91ead13)
  • site: improve VIO pipeline overview, S0, and S1 stages (d701c99)
  • site: improve VIO pipeline overview, S0, and S1 stages (d701c99)
  • site: migrate the diagnostic-methodology doc as a section page (fd4b7bb)
  • site: widen the triangulation baseline so the 3D view reads (#364) (31d584f)
  • test: explain pyramidal KLT + add the numerical failure-mode taxonomy (49f77d2)
  • test: pyramidal KLT explainer + EuRoC numerical failure-mode taxonomy (#255) (49f77d2)
  • test: vio_euroc goal & architecture (#249) (b0b75d2)
  • VIO pipeline section (overview, metrics, S0, status) + issue-ref policy (#305) (af69f04)

Tests

  • bridge: add C++/Rust cxx::bridge integration test (#137) (50e3e3c)
  • math: golden-data NLS suite + Jacobian FD checks + type matrix (#155) (2348e87), closes #31
  • sdk: dataset-gated MH_05/V2_03 moving-start dynamic-init validation (#241) (b5a0df3)
  • sdk: drive the observability gauge check through the production CameraUpdater (#358) (637990e)
  • sdk: dynamic-init diagnostics to localize the real-data divergence (#247) (#248) (48be50e)
  • sdk: euroc replay harness + ATE/RPE benchmark (#190) (577e201)
  • sdk: instrument dynamic-init attempts (#247 localization) (#250) (972015d)
  • sdk: instrument dynamic-init attempts to localize why it won't fire (972015d)
  • sdk: latency budget enforcement (per-frame upper bound) (#191) (8dadc96)
  • sdk: real EuRoC extrinsics — MH_05 moving-start ATE validated (~0.79 m) (#245) (7f35ebb)
  • sdk: score EuRoC ATE from initialization onward (#253) (8304d67)
  • sdk: score EuRoC ATE only from initialization onward (8304d67)

Maintenance