ROS2は、ノード間でパブリッシャー/サブスクライバーメッセージングを使用する分散アーキテクチャです。
ROS2は、メッセージングレイヤーで異なるアプローチを採用し、現在、データ分散サービス(DDS)と呼ばれる業界標準を採用しています。
ただし、DDSは通信用のミドルウェアであり、パブリッシャー/サブスクライバーもサポートします。
では、DDSを直接使用できますが、なぜROS2を使用するのでしょうか。
DDSは、OMGによって提案された通信規格です。対象となる市場は、軍事、航空管制、自動運転車、医療機器など、より一般的です。エンタープライズバージョンとオープンソースバージョンを提供するベンダーはほとんどありませんが、将来の作品やデザインを決定できるのは、少数の人々または市場だけです。
製品にDDSを採用したい人は、最初から始める必要があります。
ROS2はエコシステムのようなものです。 ROS2のリーダー-OSRFは、ロボットアプリケーションを作成したい人のために、エコシステム、ドキュメント、およびフレンドリーなフレームワークを提供します。
誰でも自分の考えをコアデザインに提出したり、コミュニティに独自の貢献をしたりすることができます。
参加者、トピック、パブリッシャー、サブスクライバー、データリーダー、データライター
はい、DDSには発行者と加入者がいます。さらに、参加者、トピック、パブリッシャー、サブスクライバー、データライター、- datareader、DDSのデータ共有スペースではentityと呼ばれます。
各エンティティは異なるQoS属性を所有し、エンティティがデータ配信またはデータライフサイクルを管理する方法に影響を与えます。
参加者は、エンティティ全体の作成、削除、グループ化を制御します。新しいエンティティが参加または離脱することを知る能力があります。
異なる参加者は、ドメインID(整数)によって識別されます。
トピックは、データライターとデータリーダーが相互にリンクできるQoS情報を所有するターゲットのようなものです。
パブリッシャーとサブスクライバーは、所有するデータ配信とデータの可用性を制御しますdatareaderおよびdatawriter。
パブリッシャーは複数のデータライターのみを持つことができ、サブスクライバーは複数のデータリーダーのみを持つことができます。
DataWriterはデータプロバイダーであり、DataReaderはデータコンシューマーです。ターゲットトピックに対して同じQoSを持っている必要があります。
DDSトピックの命名:
他のpub/subモデルのリンクを解除します。これらは、あまり使用しませんslash/
代わりに、オブジェクト指向です。
スペースとノードの命名
トピックに似ていますが、名前付けスペースがあります。
ROS2はネーミングスペースとスラッシュ/
を多用します。 /
で始まるネーミングスペースがあります。たとえば、/turtle/cmd_vel
、turtleはネーミングスペース、cmd_velはベース名です。
単にデータを提供または消費する基本的な要素。
ros2トピックおよびサービス名 でROS2 pub/subネーミングデザインを確認できます。
ROS2は、ロボットアプリケーションの設計に重点を置いており、DDSの複雑なpub/subアプリケーションを作成する際の問題を解消します。
特に特定のタイプのロボットアプリケーションでは、ROS2がDDSよりも高いレベルの抽象化を提供することに同意します。さらに、ROS2は、ロボット工学用に設計された既製のデータ型とコンポーネントを提供します。したがって、多くのビルディングブロックを取得します。これにより、そのドメインでのシステムの構築が確実に容易になります。
つまり、ネイティブDDSではなくROS2の使用にはコストもかかることに注意する必要があります。 ROS2が物事を簡単にする1つの方法は、QosのサブセットとDDSでサポートされている情報交換パターンを事前に選択することです。したがって、ROS2を使用すると、特定のDDS機能およびQosにアクセスできなくなります。 DDSを使用して実行できるが、DDSを介したROS2 APIを使用しない、パブリッシュ/サブスクライブ通信に関連する多くのことがあります。また、ROS2 IDLを使用して記述できない、DDSIDLを使用して定義できるデータ型も多数あります。そのため、送受信できるデータ型、型の進化、互換性ルールなども制限しています。一部のシステムでは、これらの制限が重要になる場合があります。機能がDDSに追加された理由は...
パフォーマンスは、追加されたレイヤーと、特定のDDSAPIが活用されていないという事実によっても悪影響を受けます。
基本的に、DDSが対象とするアプリケーションの範囲ははるかに広いため、API、Qos、タイプなどは、より一般的で柔軟である必要があります。
何に少し追加するか Stoogyはすでに書いています :
ROSは単なる通信層ではありません。それは、例えば、提供します
実際、ROS2は通信用のDDSに基づいています。 ( https://github.com/ros2/ros2/wiki/DDS-and-ROS-middleware-implementations )
ROS2が使用されるのは、DDSを使いやすくする抽象化を追加するためです。 DDSには、ROS2のRMWパッケージで行われる多くのセットアップと構成(パーティション、トピック名、検出モード、メッセージ作成など)が必要です。このパッケージは、メッセージが公開/受信(受信)されたときのエラーの処理も担当します。
DDSを直接使用できます(パブリッシャーとサブスクライバーを適切に構成すると、ROS2パブリッシャーとサブスクライバーとも通信できます)が、メッセージ(.idl)を作成し、ジェネレーターを呼び出して対応する構造とソースファイルを取得し、作成する必要があります。ドメイン、トピックの割り当て、datawriters/datareaderの構成、..(いくつかの例をご覧ください https://github.com/rticommunity/rticonnextdds-examples/tree/master/examples/listeners/c )
したがって、ROS2はあなたの生活を楽にしてくれます。さらに、メッセージの上で使用できるパッケージがたくさんあります。