これは、ロボット技術や極端に制約のあるデバイスで使用される RTPS (Real Time Publish Subscribe) の Fast-RTPS お よび Micro-RTPS の入門チュートリアルです 。FIWARE プラットフォームのイネーブラは、この低レベルの通信には直接関与していま せんが、ロボッ・デバイスを FIWARE システムに接続する前に、プロトコルの完全な理解 が必要です。
このチュートリアルでは、Docker コンテナから直接実行で きる一連の演習を紹介していますが、HTTP コールは必要ありません。
Fast-RTPS とは?¶
eProsima Fast-RTPS は RTPS (Real Time Publish Subscribe) プロトコルの C ++ 実装で、Object Management Group (OMG) コン ソーシアムによって定義され維持されている、UDP などの信頼できないトランスポートを 通じたパブリッシャとサブスクライバ間の通信を提供します。RTPS はまた、OMG によっ て Data Distribution Service (DDS) 標準用に定義されたワイヤ相互運用性プロトコル です。eProsima Fast RTPS は、ほとんどのベンダー・ソリューションが DDS を実装する ツールとして、または過去のバージョンの仕様を使用するツールとして実装されているた め、スタンドアロンで最新のメリットを持っています。
このライブラリの主な機能の一部は次のとおりです :
- リアルタイム・アプリケーション用に構成可能なベスト・エフォート型で信頼性の高 いパブリッシュ/サブスクライブ通信ポリシー
- 新しいアプリケーションがネットワークの他メンバによって自動的に検出されるよう に接続をプラグ・アンド・プレイします
- ネットワーク内の複雑でシンプルなデバイスで継続的な成長を可能にするモジュール 性とスケーラビリティ
- 構成可能なネットワーク動作と互換性のあるトランスポート層 : 各展開のための最 適なプロトコルとシステム入出力チャネルの組み合わせを選択します
- 2 つの API レイヤー : ユーザビリティに重点を置いた高水準のパブリッシャ/サブ スクライバと、RTPS プロトコルの内部動作に細かいアクセスを提供するより低いレ ベルのライタ・リーダーです
eProsima Fast RTPS は、これらの重要なケースを含む多くの分野で複数の組織によって 採用されています :
- ロボティクス : ROS2 のデフォルト・ミドルウェアとしての ROS (Robotic Operating System)
- EU R&D: FIWARE Incubated GE
Micro-RTPS とは?¶
RTPS (Real Time Publish Subscribe) 用の eProsima Micro-RTPS プロトコルは、ロボティクスや 非常に制約の厳しいデバイスで使用されています。これは、非常に限られたリソース制約 環境 (eXtremely Resource Constrained Environments : XRCEs) と DDS ネットワーク間 のパブリッシャとサブスクライバの通信を提供するソフトウェア・ソリューションです。 特に、Micro-RTPS は、リソース制約のあるデバイス (クライアント) が DDS 通信に参加 できるようにするクライアント/サーバのプロトコルを実装しています。Micro-RTPS エー ジェント (サーバ) は、Micro-RTPS クライアントに代わって動作し、DDS グローバル・ データ・スペース内の DDS パブリッシャおよび/またはサブスクライバとして参加できる ようにして、この通信を可能にします。
前提条件¶
Docker¶
物事を単純にするために、両方のコンポーネントが Docker を使用して実行されます。Docker は、さまざまコンポーネントをそれぞれの環境に 分離することを可能にするコンテナ・テクノロジです。
- Docker Windows にインストールするには 、こちらの手順に従ってくださ い
- Docker Mac にインストールするには 、こちらの手順に従ってください
- Docker Linux にインストールするには 、こちらの手順に従ってください
Docker Compose は、マルチコンテナ Docker アプリケーションを定義して実行する ためのツールです 。YAML file ファイルは、アプリケーションのために必要なサービスを構成するために使用します。つ まり、すべてのコンテナ・サービスは 1 つのコマンドで呼び出すことができます 。Docker Compose は、デフォルトで Docker for Windows と Docker for Mac の一部と してインストールされますが、Linux ユーザ はここに記載されている手順に従う必要 があります。
次のコマンドを使用して、現在の Docker バージョンと Docker Compose バージ ョンを確認できます :
docker-compose -v
docker version
Docker バージョン 18.03 以降と Docker Compose 1.21 以上を使用していることを確認 し、必要に応じてアップグレードしてください。
Cygwin¶
シンプルな bash スクリプトを使用してサービスを開始します。Windows ユーザは cygwin をダウンロードして、Windows 上の Linux ディスト リビューションと同様のコマンドライン機能を提供する必要があります。
起動¶
インストールを開始するには、次の手順を実行します :
git clone https://github.com/FIWARE/tutorials.Fast-RTPS-Micro-RTPS.git
cd tutorials.Fast-RTPS-Micro-RTPS
git checkout NGSI-v2
./services create
注 Docker イメージの最初の作成には最大 15 分かかります
その後、リポジトリ内で提供される services Bash スクリプトを実行することによって、コマンドラインからすべてのサービスを初期 化することができます :
./services start
注 : クリーンアップをやり直したい場合は、次のコマンド を使用して再起動することができます :
./services stop
Fast-RTPS 入門¶
このセクションの目的は、Fast-RTPS をインストールして使用する方法に関する簡単なス タート・ガイドを提供することです。以降のチュートリアルでは、FIROS2 を使用して Fast-RTPS そして ROS2 を Orion Context Broker に接続する方法について説明します。
使用例¶
この時点で、Docker コンテナ環境に Fast-RTPS がインストールされています。Hello World の例を実行できるようになりました。この例では、図に示すように、Fast-RTPS プロトコルを使用してパブリッシャからサブスクライバに一連のメッセージを送信します 。
例を作成 (1st ターミナル)¶
新しいターミナルを開き、実行中の examples-fast-rtps
の Docker コンテナで次のよ
うに入力します :
docker exec -ti examples-fast-rtps /bin/bash
この例をコンパイルするには、以下のようにします :
cmake .
make
make install
Fast-RTPS サブスクライバを起動 (1st ターミナル)¶
最初にサブスクライバを起動します :
./HelloWorldExample subscriber
1st ターミナル - 結果 :¶
Fast-RTPS サブスクライバが起動し、メッセージを待っています :
Starting
Subscriber running. Please press enter to stop the Subscriber
Fast-RTPS パブリッシャを起動 (2nd ターミナル)¶
2 番目の新しいターミナルを開き、実行中の examples-fast-rtps
の Docker コン
テナで次のように入力します :
docker exec -ti examples-fast-rtps /bin/bash
次に、この 2 番目のターミナルでパブリッシャを起動します :
./HelloWorldExample publisher
メッセージは、パブリッシャによって自動的に送信され、サブスクライバが受信する必要 があります。すべてが正常であれば、パブリッシャ・ターミナルとサブスクライバ・ター ミナルのそれぞれに次のような表示が表示されます :
1st ターミナル - 結果 :¶
Fast-RTPS サブスクライバは一連のメッセージを受信しました :
Subscriber matched
Message HelloWorld 1 RECEIVED
Message HelloWorld 2 RECEIVED
Message HelloWorld 3 RECEIVED
Message HelloWorld 4 RECEIVED
Message HelloWorld 5 RECEIVED
Message HelloWorld 6 RECEIVED
Message HelloWorld 7 RECEIVED
Message HelloWorld 8 RECEIVED
Message HelloWorld 9 RECEIVED
Message HelloWorld 10 RECEIVED
Subscriber unmatched
2nd ターミナル - 結果 :¶
Fast-RTPS パブリッシャは一連のメッセージを送信します :
Starting
Publisher matched
Message: HelloWorld with index: 1 SENT
Message: HelloWorld with index: 2 SENT
Message: HelloWorld with index: 3 SENT
Message: HelloWorld with index: 4 SENT
Message: HelloWorld with index: 5 SENT
Message: HelloWorld with index: 6 SENT
Message: HelloWorld with index: 7 SENT
Message: HelloWorld with index: 8 SENT
Message: HelloWorld with index: 9 SENT
Message: HelloWorld with index: 10 SENT
1st ターミナルで、<enter>
を押すことにより Fast-RTPS サブスクライバを停止
できます。
コンテナから出て、インタラクティブ・モードを終了するには、各ターミナルで次のコマ ンドを実行します :
exit
その後、コマンドラインに戻ります。
その他の例は examples
フォルダにありますが、このチュートリアルの範囲を超えてい
ます。詳細については
、Fast-RTPS の公式ドキュメントを
参照してください。
Micro-RTPS 入門¶
このセクションの目的は、Micro-RTPS をインストールして使用する方法に関する簡単な スタート・ガイドを提供することです。
使用例¶
この時点で、Micro-RTPS が Docker コンテナ環境にインストールされています。Hello World の例を実行できるようになりました。この例では、図に示すように、Micro-RTPS パブリッシャから Micro-RTPS エージェントを介して Micro-RTPS サブスクライバに一連 のメッセージを送信します。
Micro-RTPS エージェントを起動 (1st ターミナル)¶
新しいターミナルを開き、実行中の examples-micro-rtps
の Docker コンテナで次の
ように入力します :
docker exec -ti examples-micro-rtps /bin/bash
まず、Micro-RTPS パブリッシャから送信されたメッセージを受信してサブスクライバに
転送する Micro-RTPS エージェントを起動する必要があります。これを行うには、次のコ
マンドを実行します。これにより、Micro-RTPS エージェントが UDP ポート 2018
で起
動されます :
cd /usr/local/bin
MicroRTPSAgent udp 2018
1st ターミナル - 結果 :¶
Micro-RTPS エージェントが起動し、稼動しています :
UDP agent initialization... OK
Running DDS-XRCE Agent...
今度は、Docker 環境にさらに 2 つのターミナルが必要になります。ターミナルの 1 つ では、Micro-RTPS パブリッシャを開始し、もう 1 つはサブスクライバを開始します。2 番目および 3 番目のターミナルを開くには、2 つの bash ターミナルを開き、両方とも 以下を実行します :
Micro-RTPS サブスクライバを起動 (2nd ターミナル)¶
2 番目の新しいターミナルを開き、実行中の examples-micro-rtps
の Docker コ
ンテナで次のように入力します :
docker exec -ti examples-micro-rtps /bin/bash
次のようにサブスクライバを起動します :
cd /usr/local/examples/micrortps/SubscribeHelloWorldClient/bin/
./SubscribeHelloWorldClient udp 127.0.0.1 2018
2nd ターミナル - 結果 :¶
Micro-RTPS サブスクライバが実行され、メッセージを待っています :
<< UDP mode => ip: 127.0.0.1 - port: 2018 >>
Micro-RTPS パブリッシャ を起動 (3rd ターミナル)¶
3 番目の新しいターミナルを開き、実行中の examples-micro-rtps
の Docker コ
ンテナで次のように入力します :
docker exec -ti examples-micro-rtps /bin/bash
次に、3 番目のターミナルでパブリッシャを起動します :
cd /usr/local/examples/micrortps/PublishHelloWorldClient/bin/
./PublishHelloWorldClient udp 127.0.0.1 2018
メッセージは、パブリッシャによって自動的に送信され、サブスクライバが受信する必要 があります。すべてが正常であれば、パブリッシャのターミナルとサブスクライバのター ミナルのそれぞれに次のような表示が表示されます :
1st ターミナル - 結果 :¶
Micro-RTPS エージェントがパブリッシャからのメッセージの受信を開始しました :
UDP agent initialization... OK
Running DDS-XRCE Agent...
RTPS Publisher matched
...
2nd ターミナル - 結果 :¶
Micro-RTPS サブスクライバは、Micro-RTPS エージェントによって渡されたメッセージを 受信しました :
<< UDP mode => ip: 127.0.0.1 - port: 2018 >>
Receive topic: Hello DDS world!, count: 1
Receive topic: Hello DDS world!, count: 2
Receive topic: Hello DDS world!, count: 3
Receive topic: Hello DDS world!, count: 4
Receive topic: Hello DDS world!, count: 5
Receive topic: Hello DDS world!, count: 6
Receive topic: Hello DDS world!, count: 7
Receive topic: Hello DDS world!, count: 8
...
3rd ターミナル - 結果 :¶
Micro-RTPS パブリッシャは、次のように一連のメッセージを送信しました :
<< UDP mode => ip: 127.0.0.1 - port: 2018 >>
Send topic: Hello DDS world!, count: 1
Send topic: Hello DDS world!, count: 2
Send topic: Hello DDS world!, count: 3
Send topic: Hello DDS world!, count: 4
Send topic: Hello DDS world!, count: 5
Send topic: Hello DDS world!, count: 6
Send topic: Hello DDS world!, count: 7
Send topic: Hello DDS world!, count: 8
...
コンテナから出て、インタラクティブ・モードを終了するには、次のコマンドを実行しま す :
exit
その後、コマンドラインに戻ります。
その他の例は examples
フォルダにありますが、このチュートリアルの範囲を超えてい
ます。詳細については
、Micro-RTPS の公式ドキュメントを
参照してください。
License¶
MIT © 2018-2020 FIWARE Foundation e.V.