Augmenting Dead Reckoning State Estimation with GPS for Better Odometry
I have talked extensively in past posts about fusing internal sensor data, like wheel odometry and IMU data (dead reckoning), to generate a reliable pose estimate. You can check the links at the end of this article for more background context.
The fundamental issue with relying entirely on internal data is that integration errors and drift inevitably accumulate over time. To correct for this compounding drift, external sources of absolute position data are necessary. As I continue to build out the research infrastructure required to develop System 1 and System 2 robot autonomy, I am adding GPS data to our state estimation pipeline.
As a source of global positioning, GPS can bound the accumulated drift of dead reckoning. However, by far the best example of the power of incorporating external data for mobile robots occurs during structural anomalies—for instance, when a robot runs into a sidewalk lip. In this scenario, the wheels keep spinning and the IMU still registers linear acceleration, but the robot is not actually moving.
The video below shows a clear example of this exact phenomenon. In it, you can see my custom Python implementation of pure dead reckoning (orange line) compared against a version fused with GPS (blue line) using an Extended Kalman Filter (EKF). For reference, you can also see the raw wheel odometry in red, and the simulator’s ground truth trajectory in yellow.
The GPS extension is implemented using a two-stage filter architecture. The first stage ingests the raw, noisy GPS fixes and smooths them out to isolate the tracking track from fix-to-fix jumps. The second stage extends the standard dead reckoning pipeline (wheel odometry + IMU) to dynamically include these smoothed GPS position updates, producing the final combined state estimate.
The striking part occurs toward the end of the video: when the robot encounters the sidewalk and experiences massive wheel slippage, the raw wheel odometry and the pure dead reckoning filter blindly continue to estimate forward motion. Meanwhile, the version incorporating GPS successfully detects that the robot’s physical position is stationary, holding the global estimate perfectly in place.

