Skip to content

Repository files navigation

cube_petit_fleet_adapter

CubePetit専用のOpen-RMF fleet adapter。

Hardware: CubePetit v2 & v3 Software: Ubuntu 24.04 ROS Version: ROS2 Jazzy

位置づけ

CubePetitの複数個体(cube_petit_orangecube_petit_pink など)を Open-RMF のfleet管理に統合するための、 fleet adapterプロセスのみを提供するリポジトリです。

  • ロボット側(各CubePetit本体)は、別途 cube_petit_ros リポジトリの feature/zenoh-fleet-bridge ブランチで実装される「zenoh connector」 ノードが担当します。当リポジトリはそれとは別プロセス・別リポジトリで、 eclipse-zenoh の Python クライアント (eclipse-zenoh pip パッケージ)経由でロボットとやり取りします。rmw_zenoh_cpp(ROS2 ミドルウェアとしてのzenoh)は使っていません。
  • Open-RMF本体(rmf_fleet_adapter_python等)には、社内の汎用実装 fleet_adapter_zenoh が既にありますが、それには依存しません。 参考にした設計パターンは一般的なOpen-RMFの easy_full_control fleet adapterのものですが、コードはCubePetit向けに独立して書き直しています (sbgisen内部の私的リポジトリへの依存を避けるため)。

構成:

cube_petit_fleet_adapter/
├── cube_petit_fleet_adapter/
│   ├── robot_client_api.py   # RobotAPI: zenohでロボットと通信する薄いクライアント
│   └── fleet_adapter.py      # rmf_easy(EasyFullControl)を起動するエントリポイント
├── config/config.yaml        # フリート・ロボット定義(CubePetit向けサンプル値)
├── launch/fleet_adapter.launch.py
└── requirements.txt          # eclipse-zenoh, nudged (pipのみ、rosdep管理外)

前提条件

このリポジトリは fleet adapter プロセスのみを提供します。以下は別途必要です:

  1. Open-RMF本体のインストールrmf_fleet_adapter_python (rmf_adapter / rmf_adapter.easy_full_control を提供するパッケージ) がROS2ワークスペースにビルド済み・ソース読み込み済みであること。 このマシン(オレンジプチ体内PC)には現時点でインストールされていません。 open-rmf/rmf の手順に従ってセットアップしてください。
  2. nav_graph。CubePetitが動く実環境の地図に対応するOpen-RMFの nav_graphを別途作成する必要があります(rmf_building_map_tools 等)。 現時点でCubePetit用のnav_graphは存在しません。
  3. zenoh connector側の実装cube_petit_rosfeature/zenoh-fleet-bridge ブランチが、ロボット側で robots/<name>/pose 等のキーを実際にpublish/subscribeしている必要が あります。
pip install -r requirements.txt

zenohキー規約

robot_client_api.pyRobotAPI が使う規約(zenoh connector側との合意事項):

キー 方向 ペイロード(JSON)
robots/<name>/pose sub {"x": float, "y": float, "yaw": float}
robots/<name>/battery sub float (0.0-1.0)
robots/<name>/map_name sub string
robots/<name>/command_is_completed sub {"id": str, "is_completed": bool, "success": bool}
robots/<name>/command pub {"method": str, "args": dict, "id": str}
robots/<name>/status query フォールバック用。pose/battery/map_nameの購読データが古い(既定5秒)場合に、RobotAPI.get_data() が同期queryで補う

commandmethod: move_to_pose / localize / dock / undock / speak / cancel_command

起動方法

# 1. このワークスペースをビルド(Open-RMFが既にセットアップ済みの
#    ワークスペースに colcon build 対象として置くこと)
colcon build --packages-select cube_petit_fleet_adapter
source install/setup.bash

# 2. config.yaml / nav_graph を用意した上で起動
ros2 launch cube_petit_fleet_adapter fleet_adapter.launch.py \
  config_file:=/path/to/config.yaml \
  nav_graph:=/path/to/nav_graph.yaml \
  server_uri:=http://localhost:8000/_internal   # 任意、RMF APIサーバーを使う場合のみ

ros2 run で直接起動する場合(launchを介さない場合)も、 -c/--config_file-n/--nav_graph は必須、-s/--server_uri は任意です:

ros2 run cube_petit_fleet_adapter fleet_adapter \
  -c config/config.yaml -n /path/to/nav_graph.yaml

config.yamlの主な値と決め方

  • rmf_fleet.name: "cube_petit"。複数個体(orange/pink)を1つのfleetとして扱う。
  • robots: cube_petit_orange / cube_petit_pink をサンプルとして記載。 robot_coordinates / rmf_coordinates は3点対応のプレースホルダーで、 実際のnav_graphとロボット側マップができてから実測値に差し替えること (nudged.estimate() で座標変換を推定するために使う)。
  • profile.footprint / profile.vicinity: CubePetitが小型の卓上ロボット であることを踏まえた仮の値(直径25cm程度を想定)。実測して調整すること、 とコメントで明記済み。
  • battery_system / mechanical_system: CubePetitには実バッテリー計装が 無いため、ダミー値。account_for_battery_drain: false にして、 RMFが未計装のバッテリー値を信用してタスク采配しないようにしている。
  • task_capabilities: loop のみ有効。CubePetitの実情(会話・簡単な 移動デモ)に合わせて delivery 等は無効化。
  • actions: ["speak"]: CubePetit固有のカスタムアクション。TTS発話を robots/<name>/command 経由でトリガーする想定。

未確認・要検討事項

  • rmf_easy API の細部は未検証fleet_adapter.py は一般的な easy_full_control パターン(Open-RMFの rmf_demos 等で使われている もの)を踏まえて書いていますが、このマシンには rmf_fleet_adapter_python が入っておらず、実際にimportして動作確認はできていません。特に rmf_easy.FleetConfigHandle.from_config_files() / RobotState の コンストラクタ引数 / add_robot() の引数名 / navigatedock コールバックに渡される destinationexecution オブジェクトの 属性名は、インストールされているOpen-RMFのバージョンに合わせて 要確認・要修正です(該当箇所にコメントで明記済み)。
  • nav_graphが存在しない。CubePetitが実際に動く環境向けのnav_graphは 別途作成が必要(このリポジトリのスコープ外)。
  • バッテリー計装が無いrobots/<name>/battery は現状ダミー値である 前提で実装(account_for_battery_drain: false)。実装され次第、 config.yamlの battery_system を実測値に差し替え、 account_for_battery_drain の有効化を検討する。
  • 実機確認未実施。zenoh connector側(cube_petit_ros feature/zenoh-fleet-bridge)との結合テスト、Open-RMFコアとの結合テスト はいずれも未実施。
  • 座標変換の3点対応が未実測。config.yamlの robot_coordinates / rmf_coordinates はプレースホルダー。

Git運用

初回コミットのみ develop に直接push(空リポジトリだったため例外対応)。 次回以降の変更は feature/* ブランチを切って develop 向けにPRを出す運用とします。


Apache License Version 2.0

About

Open-RMF fleet adapter for CubePetit (zenoh-based, independent implementation)

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages