A generic MCL library for ROS2.



Beluga is a ROS-agnostic C++17 library that provides implementations for Monte Carlo-based localization algorithms widely used in robotics applications. Its modularity allows users to compose solutions from reusable modules and to combine them with new ones to configure the MCL algorithm that best suits their needs.


The current set of features includes:

  • Particle containers:

  • Composable range adaptor views, actions, and algorithms:

    • Multivariate normal distributions in SE(2) and SE(3) space

    • Multivariate uniform distributions in SE(2) compatible with occupancy grids

    • Multinomial resampling from a particle range

    • Adaptive KLD resampling

    • Selective resampling, on-motion resampling, and interval resampling policies

    • Support for sequential and parallel execution policies

    • Weighted mean and covariance statistics for pose estimation

  • Sensor models:

    • Likelihood field model

    • Beam model

    • Landmark-based models (using landmark position or bearing)

  • Motion models:

    • Differential drive model

    • Omnidirectional model


Auto-generated Doxygen documentation can be found in


Beluga is built on top of the following open source libraries:

  • Eigen: A well-known C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms.

  • Sophus: A C++ implementation of Lie groups using Eigen.

  • Range: The basis library for C++20’s std::ranges.

  • libciabatta: A composable mixin support library.