Skip to content

Feature: GPS velocity fusion via generic gnss.velocity_topic #30

@manankharwar

Description

@manankharwar

Background

This came out of a conversation with the ublox_dgnss maintainer (@hortovanyi): aussierobots/ublox_dgnss#63

The ublox UBX-NAV-COV message carries a full 3x3 velocity covariance in NED that NavSatFix does not have. Fusing GPS velocity as an independent measurement alongside wheel odometry would be useful for slip detection: if GPS velocity and wheel odometry disagree, the wheels are slipping.

Why not native UBX messages

@amock correctly pointed out that adding a direct dependency on ublox_ubx_msgs would force every FusionCore user to install ublox packages at compile time, even those running Septentrio, ZED, Piksi, or any other receiver. That breaks hardware-agnostic packaging for a single vendor benefit.

Revised design

FusionCore adds a generic gnss.velocity_topic that accepts geometry_msgs/TwistWithCovariance. Any receiver that outputs GPS velocity in that format plugs straight in.

fusioncore:
  ros__parameters:
    gnss.velocity_topic: "/gnss/velocity"   # leave empty to disable

For ublox users specifically, a small separate bridge node subscribes to UBX-NAV-PVT and UBX-NAV-COV and republishes as TwistWithCovariance. That bridge lives in its own package with no impact on non-ublox users.

What this enables

  • GPS velocity fusion as an independent measurement update (separate from wheel odometry)
  • Slip detection: innovation between GPS velocity and wheel odometry reveals wheel slip
  • Velocity stays valid during brief GPS position degradation, bridging dead-reckoning gaps
  • Works with any receiver that publishes velocity, not just ublox

What stays the same

FusionCore core has zero new vendor dependencies. The ublox bridge is a separate optional package.

cc @hortovanyi @amock

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions