Package: triorb_mutex_manager
- mutex管理およびTopicのバイパスを行う。
- ROS_LOCALHOST_ONLY=0と1のブリッジも担うため、global/local両方のコンテナで本パッケージを起動する必要がある。
- ブリッジ対象のtopicがglobal⇔localで無限ループする可能性がある場合は”RecentNSet<std::size_t>”を使った防御を行うこと。
- Global(上位管理システム)とLocal(ロボット)を跨いで送受信されるメッセージがあるとき、Global側のTopic名は末尾にHash値が付加されたメッセージを使う
- 末尾のHash値はmutexに使われるHashと一致させること
- なおHashは剛体Group内の全ロボットで共通のものではなく、ロボット固有のものとする。つまり、Sync move managerはロボット毎にトピックをPublish・Subscribeする必要がある。
# Global(上位管理システム)側から見たメッセージ定義: Topic:(prefix)/drive/run_vel/sample_hash Type:triorb_drive_interface/msg/TriorbRunVel3 # Local(ロボット)側から見たメッセージ定義: Topic:(prefix)/drive/run_vel Type:triorb_drive_interface/msg/TriorbRunVel3
Global Publish
mutex管理されているロボットのstate
- Topic:(prefix)/collab/mutex/state
- Type: std_msgs/msg/String
- Frequency : 1.0Hz
- Usage :
root@orin-nx-4260:/ws# ros2 topic echo /collab/mutex/state data: '{"hash":"A0BA7E15","mutex":"lock"}'
mutex管理されているロボットのresult
- Topic:(prefix)/collab/mutex/result
- Type: std_msgs/msg/String
- Usage :
Global Subscribe and Response
[Subscribe] mutexでlockされているか確認する
- Topic:(prefix)/collab/mutex/check_mutex
- Type:std_msgs/msg/Empty
- Usage:
[Response] mutexでlockされているか
- Topic:(prefix)/collab/mutex/check_mutex/response
- Type:std_msgs/msg/String
- Usage:
[Subscribe] mutex取得を試みてOKの場合はHASHを返却する(MUTEX_AUTO_RELEASE_MS秒以内にlock_mutexが呼ばれなければ自動開放する)
- Topic:(prefix)/collab/mutex/try_mutex
- Type: std_msgs/msg/Empty
- Usage:
[Response] mutex取得を試みてOKの場合はHASHを返却する
- Topic:(prefix)/collab/mutex/try_mutex/response
- Type: std_msgs/msg/String
- Usage:
[Subscribe] mutexを取得する
- Topic:(prefix)/collab/mutex/lock_mutex
- Type: std_msgs/msg/String
- Usage:
[Response] mutexを取得する
- Topic:(prefix)/collab/mutex/lock_mutex/response
- Type: std_msgs/msg/String
- Usage:
[Subscribe] mutexを解除する
- Topic:(prefix)/collab/mutex/unlock_mutex
- Type: std_msgs/msg/String
- Note: std_msgs/msg/String ‘{data: “force”}’ # 強制全解除
- Usage:
ros2 topic pub /collab/mutex/unlock_mutex std_msgs/msg/String '{data: "force"}'
[Response] mutexを解除する
- Topic:(prefix)/collab/mutex/unlock_mutex/response
- Type: std_msgs/msg/String
- Usage:
ROS2 Passive Global Topic
現在のState
- Topic:(prefix)/collab/mutex/msg/collab_state
- Type:std_srvs/msg/String
- Usage:
ROS2 Bypass Global to Local Topic
世界座標系の位置・姿勢へ向かう移動実行
- Topic(Global):(prefix)/drive/set_pos/${Hash}
- Topic(Local):(prefix)/drive/set_pos
- Type:triorb_drive_interface/msg/TriorbSetPos3
- Usage:
マーカー座標系の目標位置
- Topic(Global):(prefix)/drive/align_pos/${Hash}
- Topic(Local):(prefix)/drive/align_pos
- Type:triorb_drive_interface/msg/TriorbAlignPos3
- Usage:
ロボット座標系の目標速度
- Topic(Global):(prefix)/drive/run_vel/${Hash}
- Topic(Local):(prefix)/drive/run_vel
- Type:triorb_drive_interface/msg/TriorbRunVel3
- Usage:
Driving mode
- Topic(Global):(prefix)/drive/set_mode/${Hash}
- Topic(Local):(prefix)/drive/set_mode
- Type:std_msgs/msg/String
- Usage:
リフター動作指示
- Topic(Global):(prefix)/drive/run_lifter/${Hash}
- Topic(Local):(prefix)/drive/run_lifter
- Type:std_msgs/msg/String
- Usage:
ROS2 Bypass Local to Global Topic
世界座標系の位置・姿勢
- Topic(Global):(prefix)/vslam/rig_tf/${Hash}
- Topic(Local):(prefix)/vslam/rig_tf
- Type:geometry_msgs/msg/TransformStamped
- Usage:
ナビゲーションリザルト
- Topic(Global):(prefix)/collab/result/${Hash}
- Topic(Local):(prefix)/collab/result
- std_msgs/msg/String
- Usage:
リフターState
- Topic(Global):(prefix)/lifter/state/${Hash}
- Topic(Local):(prefix)/lifter/state
- std_msgs/msg/String
- Usage:
リフターリザルト
- Topic(Global):(prefix)/lifter/result/${Hash}
- Topic(Local):(prefix)/lifter/result
- std_msgs/msg/String
- Usage:
パラメーター
- BRIDGE_IP : Global ⇔ Local ブリッジに使うIPアドレス(recommend: 127.0.0.1)
- BRIDGE_PORT_G2L : Global ⇒ Local ブリッジに使うポート
- BRIDGE_PORT_L2G : Global ⇒ Local ブリッジに使うポート
- MUTEX_FILE : Mutex管理を行うファイル
- MUTEX_AUTO_RELEASE_MS : try_mutexの後lock_mutexが呼ばれなければmutex自動開放する時間[ms]
- PUBLISH_STATE_MS : mutex管理されているロボットのStateをPublishする時間間隔[ms]
TODO
- Mutexの部分は一旦適当