No version for distro humble showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro kilted showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro rolling showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro github showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro galactic showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro iron showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro melodic showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file

No version for distro noetic showing jazzy. Known supported distros are highlighted in the buttons above.

Repository Summary

Description
Checkout URI https://github.com/manankharwar/fusioncore.git
VCS Type git
VCS Version main
Last Updated 2026-03-29
Dev Status MAINTAINED
Released RELEASED
Contributing Help Wanted (-)
Good First Issues (-)
Pull Requests to Review (-)

Packages

Name Version
compass_msgs 0.1.0
fusioncore_core 0.1.0
fusioncore_gazebo 0.1.0
fusioncore_ros 0.1.0

README

FusionCore

ROS 2 sensor fusion SDK. Combines IMU, wheel encoders, and GPS into one reliable position estimate. Zero manual tuning. Apache 2.0.


What problem does this solve?

Every mobile robot needs to know where it is. It gets this from multiple sensors: IMU, wheel encoders, GPS: each of which is imperfect in its own way. IMUs drift. Wheels slip. GPS jumps. You need software that intelligently combines all three into one trustworthy position estimate.

That software is called a sensor fusion package. The standard one for ROS, robot_localization, was officially deprecated in September 2023. Its designated replacement (fuse) still doesn’t support GPS properly as of early 2026. At ROSCon UK 2025 the official workshop was still teaching both tools because no clear accessible replacement existed.

FusionCore is that replacement.


Why FusionCore

Capability robot_localization Fuse FusionCore
Core filter EKF Factor graph UKF
3D support Partial PR open 1+ year Full 3D, native
IMU bias estimation None Complex Automatic
GPS fusion UTM workaround Not implemented ECEF, proper
Dual antenna heading Hack required Not supported Native
IMU frame transform Manual Manual Automatic via TF
Message covariances Ignored Partial Full 3x3 GNSS + odometry
GNSS antenna offset Ignored Ignored Lever arm with observability guard
Outlier rejection None None Mahalanobis chi-squared gating
Adaptive noise None None Automatic from innovation sequence
TF validation Silent failure Silent failure Startup check + exact fix commands
Multiple sensor sources No No Yes: 2x GPS, multiple IMUs
compass_msgs/Azimuth No No Yes: ROS 2 native port
Delay compensation No No Yes: retrodiction up to 500ms
Maintenance Abandoned Slow Active, issues answered in 24h
License BSD-3 BSD-3 Apache 2.0
ROS 2 Jazzy Ported Native Native, built from scratch
Working examples Minimal None Real robot configs

Installation

Prerequisites

  • ROS 2 Jazzy Jalisco
  • A colcon workspace (~/ros2_ws)

Clone into your workspace

cd ~/ros2_ws/src
git clone https://github.com/manankharwar/fusioncore.git
cd ~/ros2_ws
rosdep install --from-paths src --ignore-src -r -y
colcon build --packages-select fusioncore_core fusioncore_ros
source install/setup.bash


Running the tests

cd ~/ros2_ws
source /opt/ros/jazzy/setup.bash
colcon build --packages-select fusioncore_core --cmake-args -DBUILD_TESTING=ON
colcon test --packages-select fusioncore_core
colcon test-result --verbose

Expected output: 42 tests, 0 errors, 0 failures, 0 skipped


Running FusionCore

# Terminal 1
ros2 launch fusioncore_ros fusioncore.launch.py

# Terminal 2
ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

# Verify
ros2 topic hz /fusion/odom
# expected: average rate: 100.000

FusionCore uses a ROS 2 lifecycle node. Configure first (load parameters, validate TF tree, check transforms), then activate (start processing sensor data). This prevents the filter from starting with bad initial values or missing transforms.


Sensor topics

Subscribes to:

Topic Type What it is
/imu/data sensor_msgs/Imu IMU angular velocity and linear acceleration
/odom/wheels nav_msgs/Odometry Wheel encoder velocity
/gnss/fix sensor_msgs/NavSatFix GPS position

File truncated at 100 lines see the full file