Real-World GPS Accuracy Testing: How Sensor Fusion Improves Robot Localization

Testing a $100 GPS with sensor fusion on a robot shows honest meter-level accuracy without RTK.
A developer tested a u-blox NEO-M9N GPS module with IMU and wheel odometry on a skid-steer robot, fusing data through an Unscented Kalman Filter (UKF). Without RTK ground truth, the system reported ~2.5m uncertainty with 1.69m median deviation between fused and raw fixes. The experiment stands out for its transparency about limitations and planned next steps including loop closure and RTK validation.
A Real-World Robot Localization Experiment
In autonomous driving and robot navigation, high-precision localization often relies on expensive RTK (Real-Time Kinematic) equipment. RTK is a technique that uses carrier-phase observations for real-time differential positioning — traditional GPS calculates position by measuring the time it takes for satellite signals to reach the receiver, typically achieving 2-10 meter accuracy. An RTK system requires a base station with precisely known coordinates to simultaneously receive satellite signals, transmitting correction data to the rover via radio or network in real time, enabling it to resolve carrier-phase integer ambiguities and achieve centimeter-level positioning accuracy. A complete RTK system typically costs thousands to tens of thousands of dollars.
But one developer used a low-cost hardware setup to demonstrate what ordinary GPS can actually deliver without RTK, without a base station, and without differential corrections — and how much additional performance can be squeezed out through sensor fusion.
The experiment's hardware configuration is quite down-to-earth:
- Controller: Raspberry Pi 4B, mounted on a small skid-steer chassis
- GPS Module: u-blox NEO-M9N, priced around $100. The NEO-M9N is a multi-band GNSS receiver module supporting concurrent reception from GPS, GLONASS, Galileo, and BeiDou satellite systems, with a nominal horizontal positioning accuracy of 1.5m CEP (Circular Error Probable, meaning 50% of position fixes fall within this radius), supporting up to 25Hz update rate, consuming approximately 75mW — making it ideal for embedded and battery-powered robotic platforms.
- IMU: BNO085 Inertial Measurement Unit. The BNO085 integrates a 9-DOF sensor suite consisting of a three-axis accelerometer, three-axis gyroscope, and three-axis magnetometer, along with a built-in ARM Cortex-M0+ processor running sensor fusion algorithms that directly outputs calibrated and fused quaternion attitude data. In localization systems, the IMU provides high-frequency (typically 100-400Hz) short-term motion estimates, filling the gaps between low GPS update rates. However, integration drift makes IMUs unsuitable for long-duration standalone positioning.
- Wheel Speed Feedback: Hall-effect encoders on the wheels. Hall encoders use Hall-effect sensors to detect the rotation of magnets mounted on the wheel axle, generating a pulse signal each time a magnetic pole passes the sensor. By counting pulses per unit time and combining this with known wheel circumference, wheel linear velocity and cumulative distance traveled can be calculated. For skid-steer robots, the differential speed between left and right wheels can also be used to estimate turning angular velocity. Wheel odometry is fairly accurate over short distances (typically 1-5% error relative to distance traveled), but cumulative error grows continuously over longer distances.
The core idea of the entire system is to fuse data from these low-cost sensors through an Unscented Kalman Filter (UKF) to see if it can compensate for the accuracy shortcomings of GPS alone. The UKF is a nonlinear extension of the standard Kalman filter — the traditional Kalman filter assumes the system is linear, but actual robot motion models and sensor models are typically nonlinear. The Extended Kalman Filter (EKF) uses first-order Taylor expansion for linearization, while the UKF employs a deterministic sampling method called the "unscented transform": it selects a carefully designed set of sigma points to capture the mean and covariance of the probability distribution, propagates these points through the nonlinear function, and then reconstructs the statistical properties. The UKF doesn't require Jacobian matrix computation and typically achieves higher estimation accuracy and numerical stability than EKF in strongly nonlinear scenarios.
Comparing Raw GPS Positioning with Fused Output
The experimenter marked trajectory data with two colors: orange represents each raw position fix reported by the receiver, and blue represents the output after fusing these fixes with IMU and wheel odometry through the UKF.
Notably, in this run, all GPS fixes were accepted — none were rejected by the filter. This is key to understanding the fusion effect — the blue trajectory wasn't obtained by discarding "bad points," but rather by smoothing and dead-reckoning on top of the complete raw dataset.
Visually, the fused blue trajectory is noticeably more continuous and smooth than the scattered orange raw points, more closely resembling an actual driving path.
An Honest Assessment of Positioning Accuracy
The developer demonstrated considerable restraint and professionalism in data interpretation. He explicitly stated several key facts:
"Since this run had no RTK ground truth, I cannot claim the blue line is closer to the true path than the orange points."
This is a highly rigorous scientific attitude. Without an independent reference baseline, any claim of being "more accurate" is unverifiable. What he could provide were two self-reported metrics:
- The filter's reported 1-sigma uncertainty remained at approximately 2.5 meters throughout the run, including during motion
- The median deviation between fused output and raw fixes was 1.69 meters
Regarding the 1-sigma uncertainty, it's important to understand its statistical meaning: under Gaussian distribution assumptions, the probability of the true value falling within ±1σ of the estimate is approximately 68.3%. When the filter reports 2.5 meters of 1-sigma uncertainty, it "believes" there's roughly a 68% probability that the true position is within 2.5 meters of the reported position. 2-sigma (95.4% confidence) corresponds to about 5 meters, and 3-sigma (99.7% confidence) to about 7.5 meters. But critically, this uncertainty is computed by the filter based on its internal model and noise parameters — if model assumptions are inaccurate (e.g., noise is underestimated), actual errors could be far greater than reported uncertainty. This is why independent references are needed to verify filter "consistency."
He repeatedly emphasized that both figures are the filter's self-assessment, not true errors measured against an independent reference. This clear awareness of data boundaries is precisely what's most often missing in localization solution marketing.
Limitations of the Low-Cost GPS Localization Experiment
The developer proactively listed multiple limitations of this experiment — a level of transparency uncommon in technical sharing:
Limited Sample Size
This was a single short run with a total distance of approximately 20 meters. A single, short-distance dataset can hardly reflect system performance over extended periods and larger areas.
Lack of Lateral Comparison Baseline
No comparison has been made yet with robot_localization (a widely-used localization fusion package in the ROS ecosystem) on the same data. robot_localization is the most widely-used sensor fusion localization package in the ROS ecosystem, developed and maintained by Tom Moore, implementing both EKF and UKF filters capable of fusing arbitrary numbers of pose, velocity, and acceleration data sources. The package supports 2D and 3D state estimation and provides standardized interfaces for handling coordinate frame transformations and time synchronization across different sensors. Due to its maturity, thorough documentation, and extensive real-world deployment verification, it has become the de facto standard for sensor fusion localization in the ROS community. Without such a baseline comparison, it's difficult to assess the relative merits of a custom filter.
Inherent Heading Data Deficiency
Heading comes from GPS track rather than the magnetometer. A single-antenna GPS receiver cannot directly measure the vehicle's orientation because it can only determine the position of a single point. So-called "GPS heading" is actually the direction of motion (track or course over ground) inferred from the displacement direction between two or more consecutive position fixes. The fundamental problem with this approach is: when the vehicle is stationary or moving at very low speeds, displacement between consecutive fixes is dominated by positioning noise rather than actual motion, so the inferred direction is random. GPS heading typically only becomes meaningful once the vehicle reaches a certain speed (empirically about 1-2 m/s).
This means that during approximately the first minute after starting to move, heading data is essentially meaningless — because at rest or low speed, GPS cannot infer direction from displacement changes. Dual-antenna GPS systems can directly measure heading through carrier-phase differences between two antennas, but cost and complexity increase dramatically.
Mechanical Error Effects
The curvature in the trajectory isn't the path itself — the chassis has a mechanical bias, causing the vehicle to drift right at approximately 3 degrees/second. Such systematic mechanical errors also affect odometry estimation accuracy.
Next Steps: Accuracy Verification Plans
The developer outlined a more rigorous verification plan to quantify positioning accuracy:
Introducing Loop Closure Detection
The next run will close the path back to a physically marked starting point. Loop closure is a classic method in SLAM (Simultaneous Localization and Mapping) and localization verification — if a robot travels along a closed path and returns to the starting point, the deviation between the reported end position and the start position (closure error) provides a measurable lower bound on accuracy. For example, if a 500-meter closed path ultimately reports the endpoint 3 meters from the start, one can infer that positioning error reaches at least 0.6% of total path length. The advantage of this method is that it requires no external reference equipment, though it can only reflect cumulative drift and cannot reveal local error distribution along the path. This is a low-cost yet effective self-check for accuracy in the absence of RTK ground truth.
Controlled Comparison Experiment Design
He plans to replay the same rosbag data through robot_localization, enabling a controlled comparison on exactly the same inputs. Using the same dataset is the basic prerequisite for ensuring fair comparison.
Borrowing an F9P to Establish Ground Truth
The developer is also considering borrowing a u-blox ZED-F9P (an RTK-capable high-precision module) to provide ground truth. The ZED-F9P is a multi-band RTK-capable GNSS module that can simultaneously receive L1 and L2 band signals. After receiving RTCM-format differential correction data (from a base station or NTRIP network), the F9P can achieve RTK fixed solutions within seconds, reaching horizontal accuracy of 1cm + 1ppm and vertical accuracy of 2cm + 1ppm. At a single-module price of approximately $200-300, it dramatically lowers the barrier to high-precision positioning compared to traditional survey-grade RTK receivers, and has become a common ground truth source for verifying other localization solutions. Once a centimeter-level reference trajectory is available, the absolute error of the fusion solution can be truly quantified, rather than relying solely on self-reported uncertainty.
The FusionCore Open Source Project: A Commendable Sharing Spirit
This filter is called FusionCore, written by the developer himself and open-sourced on GitHub (github.com/manankharwar/fusioncore). He also offered to share rosbag datasets, welcoming others to test their own filters on the same data.
This attitude of "open data, open code, open limitations" is extremely valuable to the robotics and localization algorithm community. It allows other researchers to reproduce, verify, and even challenge conclusions, rather than simply trusting a pretty trajectory plot.
Conclusion: The Reality and Boundaries of Low-Cost GPS Localization
This experiment offers several important insights:
First, without RTK, a ~$100 GPS module combined with IMU and wheel odometry through Kalman filter fusion can produce meter-level (approximately 2.5 meter) positioning results. For many robot applications that don't require centimeter-level precision (such as campus patrol or rough positioning for agricultural operations), this already has practical value.
Second, sensor fusion can significantly improve trajectory smoothness and continuity, but "smoother" does not equal "more accurate" — the two must be strictly distinguished. The filter constrains and interpolates observation data through its internal motion model, which naturally produces smoother output. But if the motion model itself has biases, the smooth trajectory may systematically deviate from the true path.
Third, and most importantly — true engineering rigor lies not in showcasing spectacular results, but in honestly delineating what you can and cannot claim. In today's era of rapid iteration in robotics technology, this clear-headed awareness of data boundaries is precisely the scarcest and most valuable quality.
Related articles

System Prompts Should Be Version-Controlled Like Code
System prompts drive LLM apps but often lack version control and regression testing. Learn how to manage them with versioning, structured separation, testing, and code review.

Acoustic Attacks: How Speakers Can Covertly Hack Computers Without Physical Contact
Deep dive into Pwnd Blaster acoustic attack principles: how speakers and microphones create covert channels to bypass air-gapped systems. Covers attack chain analysis, real-world constraints, and defenses.

Opus 5 Generates a Kart Racing Simulator from a Single Prompt: 3D Spatial Understanding Put to the Test
A developer tests Anthropic's Opus 5 model, generating a playable kart racing simulator from a single prompt. Deep analysis of its 3D spatial understanding and industry implications.