Current state of sensor fusion packages for Outdoor Vehicles

Hello!

I’m Stefan, a developer at Husarion. We are currently working on an outdoor navigation demo on our Panther robot with dual GNSS antennas for heading. As we will soon upgrade our robots to ROS 2 Jazzy, we reconsidered our options for sensor fusion packages and would ask for guidance.

From our research, the robot_localization package is no longer being developed and would require treating GNSS heading as IMU data to function properly. We are considering switching to the fuse package by Locus Robotics, but the lack of open-source examples and out-of-the-box GNSS support is concerning. Any guidance or recommendations would be greatly appreciated.

Thanks!

4 Likes

Hi @stefan, thanks for creating the nice thread.
We have been facing a similar issue. For the fuse, the odometry in 3D space looked in progress.

The following OSS would be candidates for sensor fusion, but support for the latest ROS distribution and commercial use is limited.

Among them, I feel that graph_msf is the first choice but is not actively maintained.
Thanks!

1 Like

Hi Stefan…. late to this thread but I’ve been working on exactly this problem.

I built FusionCore….. a ROS 2 Jazzy sensor fusion package that directly addresses what you described: robot_localization deprecated, fuse lacking GNSS support and working examples.

What it does for your use case specifically:

  • UKF with full 3D state: not a port of robot_localization

  • Native GNSS fusion in ECEF coordinates: no UTM hack, no treating dual antenna heading as IMU data

  • Automatic gyroscope and accelerometer bias estimation: no manual covariance matrices

  • HDOP/VDOP quality-aware noise scaling: bad fixes automatically down-weighted

  • Apache 2.0: commercially safe for Husarion’s use case

Install and run:

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
ros2 launch fusioncore_ros fusioncore.launch.py

Then in a second terminal:

ros2 lifecycle set /fusioncore configure
ros2 lifecycle set /fusioncore activate

Honest status: core fusion: UKF, IMU bias estimation, GNSS ECEF, encoder fusion: is working and tested at 100Hz. Adaptive covariance and outlier rejection are on the roadmap for the next release.

I respond to issues within 24 hours. If you hit problems getting it running on the Panther, open an issue or reply here.

GitHub: https://github.com/manankharwar/fusioncore