ROS 1とROS 2のブリッジ通信を行う (1)
本日は、以下の記事を日本語に要約して、ROS 1とROS 2のブリッジ通信に関して理解していきます。
- https://github.com/ros2/ros1_bridge/blob/master/README.md
- https://github.com/ros2/ros1_bridge/blob/master/doc/index.rst
ros1_bridge
ブリッジはROS 1とROS 2を共存させる方法です。 一方のROSバージョンからメッセージをSubscribeして、もう一方のROSのバージョンへメッセージをPublishすることを可能にします。
ROS 1とROS 2の間で交換できるメッセージはコンパイル時に決定されます。 メッセージ名に基づき、通常は自動的な関連付けルールが適用されますが、ユーザ定義の関連付けルールを適用することもできます。
ROS 1/2メッセージの関連付け
まず、_msgs
で終わるROS 1パッケージは、_msgs
もしくは_interfaces
で終わるROS2パッケージと関連付けされます。
次に、同じ名前のメッセージはお互いに関連付けされます。
最後に、メッセージのお互いのフィールドが関連付けされます。 もし、二つのうち一つの関連付けされたメッセージに、一部フィールドがない場合、無視されます。 また、両者のメッセージに他で定義されるはずのメッセージを使うフィールドがあるにも関わらず、その定義が含まれていない場合も、関連付けルールは不完全であり、関連付けされません。
ユーザ定義のメッセージ関連付け
以下の3種類の方法のうち、一つを使って関連付けルールを定義します。定義はyamlファイルに書きます。
パッケージ名のみ指定
-
ros1_package_name: 'ros1_pkg_name'
ros2_package_name: 'ros2_pkg_name'
パッケージ名とメッセージ名を指定
-
ros1_package_name: 'pkg_name'
ros1_message_name: 'ros1_msg_name'
ros2_package_name: 'pkg_name'
ros2_message_name: 'ros2_msg_name'
パッケージ名とメッセージ名を指定し、フィールドの関連付けルールも記載
-
ros1_package_name: 'pkg_name'
ros1_message_name: 'msg_name'
ros2_package_name: 'pkg_name'
ros2_message_name: 'msg_name'
fields_1_to_2:
foo: 'foo'
ros1_bar: 'ros2_bar'
ROS 1/2サービスの関連付け
メッセージと同様に、ROS 1とROS 2のサービスを関連付けさせることができます。
This post is licensed under CC BY 4.0 by the author.
Comments powered by Disqus.