locusrobotics/fuse

The fuse stack provides a general architecture for performing sensor fusion live on a robot. Some possible applications include state estimation, localization, mapping, and calibration.

What it solves

It provides a general architecture for performing live sensor fusion on robots, simplifying tasks like state estimation, localization, mapping, and calibration. It allows developers to focus on modeling the robot and sensors rather than the complex plumbing required to wire different sensor models together into runnable code.

How it works

fuse is a ROS framework that uses nonlinear least squares optimization (via Google's Ceres Solver) to determine the most likely state of a robot. It operates through a plugin-based system:

  1. Sensor Models: Receive raw data and generate constraints (mathematical error terms) for the optimizer.
  2. Motion Models: Generate constraints between different timestamps to connect states, especially when sensors operate asynchronously.
  3. Optimizer: Collects constraints and variables into a graph and computes the optimal values for each state variable.
  4. Publishers: Take the optimized state values and publish derived quantities back to ROS topics.

Who it’s for

Robotics developers who need a flexible, extensible system for fusing data from multiple sensors (e.g., wheel encoders, lasers) to estimate a robot's pose or calibrate system parameters in real-time.

Highlights

  • Plugin-based Architecture: Sensor models, motion models, and publishers are all plugins, making them easy to swap or share.
  • Asynchronous Support: Handles sensors that operate at different frequencies and clocks using motion models to bridge gaps in the constraint graph.
  • Extensible State Variables: Supports custom variable definitions beyond standard 2D/3D position, orientation, and velocity.
  • Online Calibration: Capable of estimating changing system parameters (like wheel diameter wear) alongside the robot's pose.

Related

  • Project
  • Project
  • Project
  • Project
  • Project