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 – ロボット向けモンテカルロ局所化

何であるか – Beluga は C++17 ライブラリであり、モンテカルロ局所化(MCL)アルゴリズム群を実装しています。これは、多くの移動型ロボットナビゲーションスタックが地図上のロボットの姿勢を推定するために使用するコア技術です。コードはROSに依存しないように設計されていますが、このリポジトリには ROS 固有のラッパーも同梱されており、Beluga ノードを ROS ベースのロボットスタックにそのまま挿入できます。

主なコンポーネント

パッケージ 役割
beluga コアで、ROSに依存しないパーティクルフィルタライブラリ。
beluga_ros ROSメッセージ/サービスをコアライブラリに変換する軽量ラッパー。
beluga_amcl 既存の nav2_amcl/amcl ノードと同様の振る舞いを実現する、即時実行可能な ROS ノード。内部では Beluga を使用。
beluga_example TurtleBot 2 や Andino ロボット上で AMCL ノードを起動する方法を示す、起動ファイルとミニデモプログラム。
beluga_system_tests 完全な ROS システムを起動して正しさを検証する統合テストスイート。
beluye_vdb オプション拡張機能。OpenVDB を Beluga に統合し、3Dボクセルベースの局所化を可能にします。

なぜ重要か – 伝統的な AMCL 実装は ROS に強く結合されており、拡張が難しい場合があります。Beluga の設計はアルゴリズムのコアとミドルウェアを分離しており、以下を容易にします:

  • カスタムの運動モデルやセンサモデルを交換可能に。
  • 非 ROS プロジェクト(例:シミュレーション、組み込みシステム)でもライブラリを再利用可能に。
  • 完全な ROS スタックを導入せずに、自動化されたベンチマークを実行可能に。

使い方

  1. ライブラリを追加 – beluga パッケージを CMake/colcon または Bazel ワークスペースに取り込みます。
  2. ラッパーを選択 – ROS 1/2 を既に使用している場合、beluga_ros または beluga_amcl を依存関係に追加し、/tf を発行し、レーザースキャン、オドメトリなどを購読するノードを取得します。
  3. 設定 – ノードは標準の amcl と同じパラメータ(マップ、パーティクル数、再サンプリング閾値など)を読み取ります。既存の Nav2 起動ファイルに最小限の変更で差し込むことができます。
  4. 拡張 – beluga 内の抽象インターフェースを継承して、カスタム運動モデルやセンサモデルを実装。パーティクルフィルタの他の部分はそのまま変更なし。
  5. ベンチマーク – 組み込みのベンチマークスクリプトを使用して、異なる設定(パーティクル数、再サンプリング戦略など)を比較し、バグの再発を防ぐ。

ターゲットユーザー – 信頼性が高く、十分にテストされたパーティクルフィルタ局所化エンジンが必要なロボット開発者。特に、アルゴリズムコードと ROS ミドルウェアの明確な分離を求める人、またはカスタムハードウェア(例:Raspberry Pi ベースのロボット)向けの局所化を構築する人。

ドキュメントとコミュニティ – 完全な API ドキュメントは https://ekumen-os.github.io/beluga でホストされており、CI バッジで Colcon と Bazel での継続的テストが確認できます。プロジェクトは Apache-2.0 ライセンスに従っており、商業的・学術的利用を促進しています。


Beluga は機械学習モデルではありません。古典的な確率ロボティクスアルゴリズムですが、ロボティクス/身体化知能の分野に明確に位置づけられています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト