Skip to content

FusionCore v0.3.0

Latest

Choose a tag to compare

@manankharwar manankharwar released this 08 Jun 20:49
· 44 commits to main since this release

What's new in 0.3.0

Filter observability: see inside the filter in real time

Every GPS fix now publishes a structured message on /fusion/debug/gnss_status with the exact rejection reason, Mahalanobis distance, chi2 threshold, fix metadata, and coast mode state. Instead of a generic log line you can now see:

accepted: false
rejection_reason: CHI2_FAILED
mahalanobis_sq: 847.3
chi2_threshold: 16.27
hdop: 1.2
in_coast_mode: false
lever_arm_used: false
heading_sigma_deg: 28.1

A second topic, /fusion/debug/filter_health, publishes at 1 Hz with innovation norms per sensor, position and heading 1-sigma uncertainty (meters and degrees), and GPS coast mode state. All fields are plain float64 — plottable directly in Foxglove, PlotJuggler, or rqt without a custom panel.

Two new message types: fusioncore_ros/msg/GnssStatus and fusioncore_ros/msg/FilterHealth. No new dependencies.

Lever arm correction now gated on heading quality

Previously lever arm activated whenever heading_validated=true regardless of how uncertain heading was. During prolonged turns, heading sigma can grow to 25-30 degrees while heading_validated stays true. At 30 degrees with a 0.5m lever arm, the position correction adds 0.25m of error instead of removing it.

The new gnss.lever_arm_max_heading_sigma_deg parameter (default 20 degrees) disables lever arm when heading uncertainty exceeds the threshold and re-enables it when heading tightens. The current lever_arm_used and heading_sigma_deg values are published on every fix via /fusion/debug/gnss_status.

gnss.lever_arm_max_heading_sigma_deg: 20.0  # default

Configurable heading motion thresholds

The minimum speed and maximum yaw rate required for GPS displacement to count toward heading observability were previously hardcoded. Now configurable:

gnss.track_heading_min_speed: 0.2     # m/s (default)
gnss.track_heading_max_yaw_rate: 0.3  # rad/s (default)

Useful for high-vibration platforms (increase min_speed) or robots that navigate tight corridors at low speed (decrease max_yaw_rate).

Config audit

fusioncore.yaml rewritten to document all 87 parameters with inline explanations. Every hardware config updated with missing params. configuration.md fixed: removed a non-existent param and a duplicate section.


Full changelog: CHANGELOG.md