ROS 2 公式文書(英語) 日本語訳シリーズです。
本ブログの日本語翻訳版のトップページは以下のリンクを参照下さい。
※2019/05/06 現在のものです。
概要
ROS 2 は DDS / RTPS の上にミドルウェアとして構築されており、ミドルウェアは検出、シリアル化、およびデータ転送を提供します。
DDS と ROS の関係
こちらの記事では、DDS 実装や DDS の RTPS ワイヤプロトコルの使用の動機について詳しく説明します。要約すると、DDS はROS システムに関連する機能を提供するエンドツーエンドのミドルウェアです。例えば、分散検出や(ROS 1 のような一元管理型ではない)、データ転送のためのさまざまな「QoS」オプションを管理する機能が挙げられます。
DDS とは
DDS 自体は業界標準で、RTI の実装である Connext や、 ADLink の実装である OpenSplice RTPS(別名 DDSI-RTPS。DDSがネットワーク上で通信するために使用するワイヤプロトコル。)など、さまざまなベンダーによって実装されています。また、完全な DDS API を満たすものではありませんが、eProsima の実装である Fast RTPS などは、ROS 2 で使用する上で十分な機能を備えています。
ROS 2 で複数の DDS 実装に対応するわけ
ROS 2 は複数の DDS / RTPS 実装をサポートしています。ベンダ/実装の選択に関しては、必ずしも「1サイズがすべてに収まる( “one size fits all” という諺を引用。)」とは限らないためです。ミドルウェアの実装を選択する際に考慮するべき多くの要因があります(ライセンスのような事業面での考慮事項、プラットフォームの可用性のような技術的な考慮事項、または計算上の制約等)。
ベンダーは、多様なニーズを満たすべく、複数の DDS または RTPS 実装を提供することがあります。たとえば、RTI には、特にマイクロコントローラを対象としたものや、特別な安全性認定を必要とするアプリケーションを対象としたもの(現在、標準デスクトップ版のみサポート)のように、目的が異なる Connext 実装のバリエーションがいくつかあります。
RMW (ROS Middleware Interface) とは
ROS 2 で DDS / RTPS 実装を使用するには、DDS または RTPS 実装の API とツールを使用して抽象 ROS ミドルウェアインタフェースを実装する「ROS Middleware Interface」(別名 rmw インタフェースまたは単に rmw)パッケージを作成する必要があります。 DDSの実装をサポートするために RMW パッケージを実装して維持するのは大変な作業ですが、ROS 2 コードベースが特定の実装に結び付けられないようにするには、少なくとも2、3の実装をサポートすることが重要だと考えております。ユーザがプロジェクトのニーズに応じて実装を切り替えたいと考えることも考慮して。
サポートされている RMW 実装一覧表
Product name | License | RMW implementation | Status |
---|---|---|---|
eProsima Fast RTPS |
Apache 2 | rmw_fastrtps_cpp |
フルサポート。 RMWのデフォルトはこれ。 バイナリリリースでパッケージ化されている。 |
RTI Connext |
commercial, research |
rmw_connext_cpp |
"フルサポート。 バイナリサポートあり。 ただし、Connext は別途インストールが必要。" |
RTI Connext (dynamic implementation) |
commercial, research |
rmw_connext_dynamic_cpp |
サポート終了。 フルサポートは alpha8 まで。* |
PrismTech Opensplice |
"LGPL (only v6.4), commercial" |
rmw_opensplice_cpp |
部分的サポート。 バイナリサポートあり。 ただし、 OpenSplice 別途インストール必要。 |
OSRF FreeRTPS |
Apache 2 | - | 部分的サポート。 開発終了。 |
「部分的なサポート」とは、rmw インタフェースに必要な1つ以上の機能が実装されていないことを意味します。
複数の RMW 実装の操作に関する実用的な情報については、「複数のRMW実装の操作」のチュートリアルを参照してください。