Odometry

Odometry and how it works in the NUbots codebase.
Mithun Sivanesan GitHub avatar
Updated 8 Nov 2026

The K1's odometry comes from the Booster Robotics SDK, which publishes it on rt/odometer_state.

  1. The Booster HardwareIO module subscribes to rt/odometer_state and emits each sample as a BoosterOdometry message containing x, y and theta in the odometry world frame.
  2. The Sensors module pairs each RawSensors message with the latest BoosterOdometry. It stores the first sample as a zero offset and subtracts it from every later sample, so odometry starts at the origin. Values below odometry_deadband are set to zero.
  3. Sensors builds Hwr, the robot's planar pose in the world frame, from the offset-corrected x, y and theta. Combined with the head pose from the Booster Robotics SDK, this gives the camera pose Hcw. Both are emitted in the Sensors message for localisation and vision to use.

The odometry is reset in two cases:

  • On a mode change: HardwareIO calls the SDK's ResetOdometry, and Sensors captures a new zero offset from the next sample.
  • On ResetFieldLocalisation: both modules do the same, so odometry restarts from the robot's new pose. This also happens after a get-up.

HardwareIO also resets the odometry on startup.

Subsystems
Localisation
Subsystems
Motion
NUbots acknowledges the traditional custodians of the lands within our footprint areas: Awabakal, Darkinjung, Biripai, Worimi, Wonnarua, and Eora Nations. We acknowledge that our laboratory is situated on unceded Pambalong land. We pay respect to the wisdom of our Elders past and present.
Copyright © 2026 NUbots - CC-BY-4.0
Deploys by Netlify