ROS2 + DDS:相互運用性のフィールドガイド
ROS 2は接続フレームワークとしてDDSを使用するように設計されていますが(私の以前のブログ投稿-ROS 2 + DDS:詳細についてはEcosystems Mergeの場合を参照)、統合プロセスには、純粋なDDSシステムのために対応する必要のあるいくつかの癖があります。 ROS2システムとシームレスに相互運用します。このブログは、相互運用性の実用的なフィールドガイドとして機能し、ROS 2の「BouncyBolson」(2018年7月)リリースの時点での既知の問題のいくつかと、それらを軽減する方法について説明しています。
ROS2での更新
ROS2は進化するプロジェクトです。相互運用性にさらに影響を与える将来のROS2リリースに変更がある可能性があります。そうは言っても、 rmw_connext_cpp
を使用するときは常に覚えておいてください。 ROS 2の下のレイヤー–それはまだConnextDDSです。非ROS実装と同じ方法を使用して、Connextライブラリに固有のパワーと柔軟性を引き続き利用できます。システムを制御できます。
純粋なDDSシステムとROS2システム(特に指定がない限り、ROS 2「BouncyBolson」)間の相互運用性に影響を与える可能性のある設定の概要は次のとおりです。
トピック名とパーティション
ROS 2は、トピックの名前またはDDSパーティションにエンコードすることにより、トピックデータの名前空間を識別します。ユーザーデータトピックは、「rt」(ROSトピック)名前空間にあり、DDSで次のようにエンコードされます。
トピックデータ型
ROS2でConnextRMWレイヤーを使用している場合、すべてのROS2の「rt / *」トピックが検出中に同じデータ型であると報告されていることに気付いたかもしれません。
このタイプの定義は、トピックデータが変更されていない場合でも、トピックデータのシリアル化を表すためにROS2rmw_connext_cppレイヤーによって挿入されます。元のデータ型を使用してDDSトピックで接続を試みると、QoSの不一致が発生し、接続が妨げられます。
最も簡単な解決策は、ROS2参加者からのこのタイプコードのアナウンスを抑制することです。これは、USER_QOS_PROFILES.xmlファイルをROS2参加者の起動に使用されるディレクトリに追加することで実行できます。このファイルには、次のようなタイプコードとタイプオブジェクトの共有を抑制するためのQoS設定が含まれています。
このファイルは信頼性も「ベストエフォート」に設定していることに注意してください。これは出発点の例にすぎません。
このQoSファイルは、QoSファイルと同じディレクトリに対して起動されたROS2参加者にのみ影響することにも注意してください。必要に応じて、すべてのROS2参加者が独自のカスタムQoSファイルを別のディレクトリに置くことができます。
トランスポートの選択
DDSシステムをROS2システムに接続すると、アドレス指定できないロケーター/トランスポートがインストールされていないという警告が表示される場合があります。これは、参加者A(udpv4)が参加者B(udpv4、udpv6)を検出するなど、利用可能なトランスポートのさまざまなリストを持つ参加者の結果です。参加者Aがudpv6を使用して接続できないという警告が発行されます。
ROS2でのConnextRMWを使用したトランスポート選択では、Connextのみのシステムと同じ方法が使用されます。
- 次のように
セクションに追加して、USER_QOS_PROFILES.xmlファイルで許可されるトランスポートを設定します。
UDPV4 | SHMEM
- アプリケーションの起動に使用するディレクトリに「NDDS_DISCOVERY_PEERS」ファイルを追加して、初期ピアを設定します(およびマルチキャストを有効/無効にします)。プレーンテキストファイルには、検出に必要なピアのコンマ区切りのリストが含まれている必要があります。たとえば、
localhost、192.168.1.12、shmem://
(この例では、マルチキャスト検出が無効になっています)
ROS2でのRMWの選択
必ず環境変数を設定して、ROS2の下のRMWレイヤーとしてConnextを選択してください:
RMW_IMPLEMENTATION =rmw_connext_cpp
これは、次のように、ROS2アプリケーションを起動するときにコマンドラインで渡すこともできます。
RMW_IMPLEMENTATION =rmw_connext_cpp ros2 run demo_nodes_cpp talker
無制限のサポート
一部のROS2トピックは、無制限のシーケンスと文字列を使用します。これらのトピックを使用して相互運用しようとするDDSアプリケーションは、DDSコードジェネレーターで「無制限のサポート」を有効にする必要があります。
RTIで先を見据える
このシリーズの次の記事で、ROS2ラインナップの重要な(一時的ではありますが)ギャップをカバーしています。トピックデータの記録と再生です。
RTIのチームを開始し、通信システムを改善する準備ができている場合は、今すぐお問い合わせください。私たちの専門家があなたを助ける準備ができています。
モノのインターネットテクノロジー