0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

ROS 2 Humble環境において、Fast DDSとCyclone DDSを混在させた場合の通信制約について確認した結果を記載する。

動作確認環境

  • ROS 2 Humble
  • DDS
    • Cyclone DDS
      • ros-humble-cyclonedds 0.10.5-2jammy.20260213.230758
      • ros-humble-rmw-cyclonedds-cpp 1.3.4-1jammy.20260217.034014
    • Fast DDS
      • ros-humble-fastcdr 1.0.29-1jammy.20260213.225749
      • ros-humble-fastrtps 2.6.11-1jammy.20260214.005144
      • ros-humble-fastrtps-cmake-module 2.2.4-1jammy.20260214.004026
      • ros-humble-rmw-fastrtps-cpp 6.2.10-1jammy.20260217.033625
      • ros-humble-rmw-fastrtps-shared-cpp 6.2.10-1jammy.20260217.033034
      • ros-humble-rosidl-typesupport-fastrtps-c 2.2.4-1jammy.20260214.020147
      • ros-humble-rosidl-typesupport-fastrtps-cpp 2.2.4-1jammy.20260214.015657

方法

Fast DDS と Cyclone DDSで以下のテストを実施した。

  • トピック送受信 (ros2 topic pub / ros2 topic echo)
  • サービス呼び出し (ros2 service call {service_name})
  • パラメータ一覧取得 (ros2 param list)
  • パラメータ取得 (ros2 param get {node_name} {param_name})
  • パラメータ設定 (ros2 param set {node_name} {param_name} {value})

クライアント側で上記コマンドを実行して、サーバー側の機能を利用できるかを確認した。また、クライアント側とサーバー側のDDSを入れ替えて確認した。

各DDSの設定には以下のコマンドを使用した。

Cyclone DDSの設定

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

Fast DDSの設定

export RMW_IMPLEMENTATION=rmw_fastrtps_cpp

結果

クライアント サーバー テスト内容 結果 詳細
Fast DDS Cyclone DDS トピック送受信 Fast DDS(送信)⇒ Cyclone DDS(受信)
Cyclone DDS Fast DDS トピック送受信 Cyclone DDS(送信)⇒ Fast DDS(受信)
Fast DDS Cyclone DDS サービス呼び出し × サーバー側の実行はできるが、クライアントへ戻り値が返ってこない。
Cyclone DDS Fast DDS サービス呼び出し × サーバー側の実行はできるが、クライアントへ戻り値が返ってこない。
Fast DDS Cyclone DDS パラメータ一覧 × ros2 param listコマンドで以下の例外となる。
Exception while calling service of node '/{node_name}': None
Cyclone DDS Fast DDS パラメータ一覧 × ros2 param listコマンドで以下の例外となる。
Exception while calling service of node '/{node_name}': None
Fast DDS Cyclone DDS パラメータ取得 × ros2 param get {node_name} {param_name}コマンドで応答が返らず、パラメータ値の取得ができない。
Cyclone DDS Fast DDS パラメータ取得 × ros2 param get {node_name} {param_name}コマンドで応答が返らず、パラメータ値の取得ができない。
Fast DDS Cyclone DDS パラメータ設定 × ros2 param set {node_name} {param_name} {value}コマンドで応答が返らず、パラメータ値の設定ができない。
Cyclone DDS Fast DDS パラメータ設定 × ros2 param set {node_name} {param_name} {value}コマンドで応答が返らず、パラメータ値の設定ができない。

上記から、本記事で検証したFast DDSとCyclone DDSの組み合わせでは、以下の制約があることが分かった。

  • ROSサービスの戻り値が返ってこない
    • ROS 2サービス自体は呼び出せるが、応答が返ってこない
  • ROSパラメータコマンドが使えない
    • ROS 2のパラメータ機能は内部的にサービス通信を利用しているため、サービス通信が正常に動作しない環境では、パラメータ操作も利用できない

まとめ

ROS 2 Humble環境において、Fast DDSとCyclone DDSを組み合わせた通信試験を実施した。その結果、トピック通信(Pub/Sub)は正常に動作した一方で、サービス通信は応答を受信できず、ROS 2パラメータ機能も利用できなかった。

ROS 2ではDDS実装の違いをRMW層が吸収する設計となっているが、異なるDDS実装間ではPub/Sub以外の機能に制約が存在する場合がある。

そのため、異なるDDS実装を混在させるシステムを構築する場合は、サービス通信やパラメータ機能について事前に十分な動作確認を実施することを推奨する。

なお、Connext DDSとCyclone DDSの組み合わせについても、公式ドキュメントでService通信の制約が報告されている。

また、今回確認した現象は、ROS 2 Humbleおよび記事執筆時点のDDS実装の組み合わせによる結果であり、ROS 2やDDS実装のバージョンによって挙動が変わる可能性がある。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?