Skip to content

feat(sdk): dynamic VI-init accuracy within gate on low-excitation starts #254

Description

@Ravenwater

Follow-up to the #211 dynamic-VI-init epic (closed functional). Dynamic init now fires on real EuRoC data, recovers gravity (correct sign)/scale/velocity/yaw, and stays bounded — but on a low-excitation moving start (MH_05, ~0.1 m/s) the metric scale and gravity direction are both excitation-starved, so forced-dynamic MH_05 lands ~19 m ATE (post-init), short of the 1.5 m gate. Static on the same data is 0.79 m.

This is an observability floor, not a defect: best_metric_motion is only ~6 cm and scale = 0.0607; a ~20% scale error over the ~100 m trajectory alone explains the ~19 m, and the residual gravity direction is ~2.3°. The accelerometer is not a usable roll/pitch fallback on a moving start (contaminated by motion acceleration — see #247).

Directions (lower priority, estimator-quality):

  • A scale-vs-groundtruth diagnostic to apportion the 19 m between scale error and gravity-direction drift.
  • Tighter scale observability: defer firing to a higher-excitation window, or a second scale-refinement pass once more motion is integrated.
  • Online intrinsics/extrinsics + a stronger initializer.
  • Validate on a faster moving-start sequence where excitation is sufficient.

Acceptance: forced-dynamic lands within gate on at least one moving-start sequence; then tighten tests/sdk/vio_euroc.cpp forced-dynamic MH_05 to expect_converged=true.

Background: #211 (epic), #247 (root-cause gravity-sign fix), #245 (extrinsics).

Metadata

Metadata

Assignees

Labels

enhancementNew feature or requestphase-3-vioVisual-Inertial Odometry

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions