devkit_driver.course_over_ground

course_over_ground.py ───────────────────── Converts ublox_dgnss NAV-PVT → sensor_msgs/Imu for FusionCore.

Subscribes : /rover/ubx_nav_pvt (ublox_ubx_msgs/UBXNavPVT) Publishes : /gnss/heading (sensor_msgs/Imu)

Single-receiver fallback for relposned_heading_shim: when there is no second F9P and no dual-antenna baseline, this shim derives heading from the receiver’s course over ground (head_mot from NAV-PVT), gated by ground speed and the receiver’s reported heading accuracy.

Course over ground is only meaningful while the robot is moving — at low speeds the heading vector noise blows up. To keep /gnss/heading populated during dwells (e.g. topo node arrival pauses) the last accepted heading is re-published with inflated covariance until either a fresh fix passes the gates or STALE_TIMEOUT_S elapses.

NAV-PVT head_mot is True North referenced, NED, degrees × 1e-5. ROS convention: ENU yaw. NED → ENU: yaw_ENU = π/2 − heading_NED_rad

Running alongside relposned_heading_shim is safe in single-F9P mode (relposned publishes 0 messages with no baseline). Disable this shim when upgrading to dual-F9P + RTK so fusioncore receives only one heading source.

Functions

main([args])

Classes

CourseOverGround(*args, **kwargs)

class devkit_driver.course_over_ground.CourseOverGround(*args: Any, **kwargs: Any)[source]

Bases: Node

devkit_driver.course_over_ground.main(args=None)[source]