Ekumen-OS/beluga
A general implementation of Monte Carlo Localization (MCL) algorithms written in C++17, and a ROS package that can be used in ROS 2.
Beluga – Monte Carlo Localization for Robots
What it is – Beluga is a C++17 library that implements the Monte Carlo Localization (MCL) family of algorithms, the core technique many mobile‑robot navigation stacks use to estimate a robot’s pose on a map. The code is written to be ROS‑agnostic, but the repo also ships ROS‑specific wrappers so you can drop a Beluga node straight into a ROS‑based robot stack.
Key pieces
| Package | Role |
|---|---|
beluga |
Core, ROS‑independent particle‑filter library. |
beluga_ros |
Thin glue layer that translates ROS messages/services to the core library. |
beluga_amcl |
Ready‑to‑run ROS node/component that mimics the behaviour of the classic nav2_amcl/amcl node, but uses Beluga under the hood. |
beluga_example |
Launch files and tiny demo programs showing how to start the AMCL node on a TurtleBot 2 or an Andino robot. |
beluga_system_tests |
Integration‑test suite that spins up full ROS systems to verify correctness. |
beluye_vdb |
Optional extension that plugs OpenVDB into Beluga, enabling 3‑D voxel‑based localization. |
Why it matters – Traditional AMCL implementations are tightly coupled to ROS and can be hard to extend. Beluga’s design separates the algorithmic core from any middleware, making it easier to:
- swap in custom motion or sensor models,
- reuse the library in non‑ROS projects (e.g., simulation, embedded systems),
- run automated benchmarks without pulling in a full ROS stack.
How you’d use it
- Add the library – Pull the
belugapackage into your CMake/colcon or Bazel workspace. - Pick a wrapper – If you’re already on ROS 1/2, depend on
beluga_rosorbeluga_amclto get a node that publishes/tfand subscribes to laser scans, odometry, etc. - Configure – The node reads the same parameters as the standard
amcl(map, particle count, resampling thresholds, etc.), so you can drop it into an existing Nav2 launch with minimal changes. - Extend – Implement a custom motion model or sensor model by inheriting the abstract interfaces in
beluga; the rest of the particle filter stays the same. - Benchmark – Use the built‑in benchmark scripts to compare different configurations (particle numbers, resampling strategies) and guard against regressions.
Target audience – Robotics developers who need a reliable, well‑tested particle‑filter localisation engine, especially those who want a clean separation between algorithmic code and ROS middleware, or who are building localisation for custom hardware (e.g., Raspberry Pi‑based robots).
Documentation & community – Full API docs are hosted at https://ekumen-os.github.io/beluga, CI badges show continuous testing on both Colcon and Bazel, and the project follows an Apache‑2.0 license, encouraging commercial and academic use.
Beluga is not a machine‑learning model; it is a classic probabilistic robotics algorithm, but it sits squarely in the robotics/embodied‑intelligence space.
Related
- Project
- Project
- Project
- Project
- Project