Skip to content

NavMap AMCL: per-particle heading noise; IMU turns, not its absolute yaw - #132

Merged
fmrico merged 1 commit into
rollingfrom
navmap_localizer_imu_yaw
Oct 16, 2026
Merged

fmrico merged 1 commit into
rollingfrom
navmap_localizer_imu_yaw

Conversation

@fmrico

@fmrico fmrico commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

Closes #131

  • Noise. Each particle gets its own heading noise in the prediction.
  • IMU. With an IMU, the particles take its roll and pitch and turn by the change of its yaw (a gyro turns far better than skid-steer odometry). They keep their own heading; the IMU's absolute yaw is never used.
  • Without an IMU, the orientation follows the NavMap surface and the odometry's turns, as before.

In the Summit excavation, on a 50 m route with an IMU and slopes of up to 22°, the route completes in all runs. The mean error is 0.41–0.49 m and the maximum 0.87 m, against 0.9–1.23 m before, and the result no longer depends on Gazebo's exact IMU yaw. The wheel odometry drifts 30 m over the same route.

Three new tests cover:

  • each particle spreads in heading while turning;
  • the IMU's roll and pitch are used, its yaw changes are followed, and its absolute yaw offset and the ±π wrap are ignored;
  • moving on a tilted robot stays on the surface.

The first two fail on the previous code.

The prediction drew one heading noise for all the particles, so they
never spread in yaw and the correction could not fix the heading:
without an IMU, the odometry's turning error (large on a skid-steer
robot) was never corrected. Each particle now gets its own.

With an IMU, every particle took its whole orientation, yaw included.
Without a magnetometer an IMU's absolute yaw is arbitrary and drifts,
so this only worked in simulation. The particles now take its roll and
pitch, and turn by the change of its yaw (a gyro turns far better than
skid-steer odometry), keeping their own heading.

Signed-off-by: Francisco Martín Rico <fmrico@gmail.com>
@fmrico
fmrico merged commit 4eefc20 into rolling Oct 16, 2026
1 check passed
@fmrico
fmrico deleted the navmap_localizer_imu_yaw branch October 16, 2026 18:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

NavMap AMCL: particles share their heading noise, and the IMU's absolute yaw overrides theirs

1 participant