本日は、以下の記事を日本語に要約して、ROS 1とROS 2のブリッジ通信に関して理解していきます。

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のサービスを関連付けさせることができます。