A new open-source sensor fusion library for ROS 2 combines IMU, wheel encoders, and GPS with superior accuracy compared to existing solutions, requiring zero manual tuning.
Mobile robots need precise positioning to navigate effectively, but combining data from imperfect sensors—IMUs that drift, wheel encoders that slip, and GPS that jumps—has long been a challenge. A new open-source project called FusionCore aims to solve this problem with a ROS 2 sensor fusion SDK that delivers more reliable positioning than existing alternatives while requiring no manual tuning.
The Problem with Current Sensor Fusion Solutions
Every mobile robot requires accurate position estimation, typically derived from multiple sensors. The standard approach in ROS has been robot_localization, but it has significant limitations:
- No native ECEF GPS fusion
- Lacks IMU bias estimation
- Doesn't support adaptive noise covariance
- Its designated replacement (fuse) has incomplete GPS support without ECEF handling or RTK quality gating
These limitations leave robotics developers with inadequate tools for robust positioning, especially in challenging environments where sensor data quality varies.
Introducing FusionCore
FusionCore, available on GitHub, addresses these gaps with a comprehensive sensor fusion solution built specifically for ROS 2 Jazzy. The library combines IMU, wheel encoder, and GPS data into a single, reliable position estimate using an Unscented Kalman Filter with a 22-dimensional state vector that includes quaternion orientation.
The project benchmarks against robot_localization using the NCLT dataset from the University of Michigan, with results showing FusionCore outperforming the standard solution in 5 of 6 test sequences:
| Sequence | FC ATE RMSE | RL-EKF ATE RMSE | RL-UKF ATE RMSE |
|---|---|---|---|
| 2012-01-08 | 5.6 m | 23.4 m | NaN divergence at t=31 s |
| 2012-02-04 | 9.7 m | 20.6 m | NaN divergence at t=22 s |
| 2012-03-31 | 4.2 m | 10.8 m | NaN divergence at t=18 s |
| 2012-08-20 | 7.5 m | 9.4 m | NaN divergence |
| 2012-11-04 | 28.7 m | 10.9 m | NaN divergence |
| 2013-02-23 | 4.1 m | 5.8 m | NaN divergence |

Notably, the robot_localization UKF implementation diverged completely in all test sequences, while FusionCore maintained stable performance throughout.
Key Technical Differentiators
FusionCore's superior performance stems from several technical innovations:
1. Native ECEF GPS Fusion
Unlike robot_localization which requires a separate navsat_transform node, FusionCore handles ECEF (Earth-Centered, Earth-Fixed) GPS coordinates natively in a single node. This eliminates coordinate system conversion errors and simplifies the configuration pipeline.
2. Automatic IMU Bias Estimation
The library continuously estimates and compensates for IMU sensor biases without requiring manual calibration. This is particularly valuable for low-cost MEMS sensors that typically have significant bias variations.
3. Adaptive Noise Covariance
FusionCore automatically estimates sensor noise characteristics from incoming data using a sliding window approach with exponential moving average. This eliminates the tedious and often inaccurate process of manually tuning noise parameters in YAML configuration files.
4. Robust Outlier Rejection
The library implements Mahalanobis distance-based outlier rejection using chi-squared thresholds at the 99.9th percentile. This prevents GPS jumps, multipath errors, and encoder slip spikes from corrupting the state estimate. Testing showed that even when injecting a 500m GPS jump, the filter position remained completely stable.
5. Zero Velocity Updates (ZUPT)
When the robot is stationary (encoder speed below 0.05 m/s and angular rate below 0.05 rad/s), FusionCore automatically applies zero velocity updates. This prevents IMU drift from accumulating into false velocity estimates when the robot isn't moving—a critical feature for accurate stationary positioning.
6. GPS Antenna Offset Correction
For robots where the GPS antenna isn't mounted at the base_link, FusionCore corrects for the lever arm offset using the current robot orientation. This correction only activates when heading has been independently validated, preventing errors when heading uncertainty is high.
Practical Implementation Details
FusionCore is implemented as a ROS 2 lifecycle node that publishes odometry data at 100Hz. The library subscribes to standard ROS message types for IMU data, wheel odometry, and GPS fixes, making it straightforward to integrate with existing robot architectures.
The project includes extensive documentation and example configurations for common platforms like the Clearpath Husky and provides simulation environments through Gazebo for testing without physical hardware.

Integration with Nav2
One of FusionCore's strengths is its seamless integration with Nav2. The library publishes all necessary outputs in formats that Nav2 expects:
/fusion/odomas the primary odometry topic/fusion/posefor pose initialization/diagnosticsin Nav2-compatible format- The odom→base_link TF transformation
This allows developers to use FusionCore as a drop-in replacement for other odometry sources in Nav2 without additional configuration or coordinate transforms.
Licensing and Support
FusionCore is released under Apache 2.0 license, which provides explicit patent licensing that BSD-3 doesn't offer, making it suitable for commercial applications. The project maintainer commits to responding to issues within 24 hours, indicating strong ongoing support for the robotics community.
Who Should Use FusionCore?
FusionCore is particularly valuable for:
- Developers working with ROS 2 Jazzy (the current ROS 2 LTS release)
- Mobile robots operating in GPS-denied or GPS-challenged environments
- Agricultural and industrial robots requiring RTK-level positioning
- Research projects needing high-accuracy ground truth
- Commercial products requiring robust positioning without extensive manual tuning
As robotics increasingly relies on accurate positioning for autonomy, solutions like FusionCore that provide reliable sensor fusion with minimal configuration overhead will become increasingly valuable. The project's benchmark results and comprehensive feature set suggest it could become the new standard for ROS 2-based positioning systems.

Comments
Please log in or register to join the discussion