この文書は rclsharp と ROS 2 node の相互運用を確認するための手順を定義する。 unit tests は wire format や loopback の正しさを確認し、interop scripts は実際の ROS 2 RMW 実装と通信できることを確認する。
- ROS 2 Humble が利用できること
demo_nodes_cppが利用できることdotnetSDK 8.0 が利用できること- 初期対象 RMW は
rmw_fastrtps_cpp
Nix devShell を使う場合:
nix developFast DDS baseline は次のスクリプトで確認する。
scripts/interop/fastdds_talker_listener.shNix devShell では ros2 CLI の Python extension が macOS の動的ライブラリ解決で失敗する場合があるため、
スクリプトは $AMENT_PREFIX_PATH/lib/demo_nodes_cpp/{talker,listener} が存在すれば ros2 run を経由せず直接実行する。
このスクリプトは以下を確認する。
- rclsharp publisher から ROS 2
demo_nodes_cpp listenerにstd_msgs/msg/Stringが届くこと - ROS 2
demo_nodes_cpp talkerから rclsharp subscriber にstd_msgs/msg/Stringが届くこと ROS_LOCALHOST_ONLY=1とスクリプトが選んだROS_DOMAIN_IDで loopback 通信できること- 検証前に
ros2 daemon stopして古い graph cache の影響を避けること
Fast DDS が DATA_FRAG を使うサイズの payload は次のスクリプトで確認する。
scripts/interop/fastdds_large_string.shこのスクリプトは ROS 2 CLI から 32KB 超の std_msgs/msg/String を publish し、rclsharp listener が実 payload を受信できることを確認する。
ros2 topic pub を使うため、ros2 CLI が動作する Linux または ROS 2 セットアップ済み環境で実行する。
interop の成功条件は introspection 結果ではなく、実際の受信ログにする。
- ROS 2 listener 側で
Hello rclsharpを受信している - rclsharp listener 側で
Hello WorldまたはHello rclsharpを受信している - large payload 検証では rclsharp listener 側で
large-payload-を含む message を受信している
- Best Effort publisher/subscriber の組み合わせ
- Cyclone DDS (
rmw_cyclonedds_cpp) std_msgs/Headerなど string 以外の msg- discovery unregister の反映
- Linux CI または self-hosted runner での定期実行