はじめに
ROS2(Robot Operating System 2)には、大きく下記の構成要素があります。
- plumbing(通信)
- tools(ツール群)
- capabilities(機能群)
- ecosystem(エコシステム)
今回は、この中で重要な「plumbing(通信)」の中でも、
特に使用頻度が高い「トピック通信」についてご説明します。
plumbing(通信) の概要
ロボットは、数多くのモータやセンサ、アクチュエータなどから構成されており、
それぞれが連携しながら、個別に制御を行う必要があります。
ROS2では、上記を実現するため、それぞれの各センサなどを制御する機能などを 「ノード」と呼ばれる基本的なオブジェクトとし、ノード同士が通信することで 連携する構成となっております。
そのため、ROS2では、「plumbing(通信)」は非常に重要な要素となっており、 Operating System とされていますが、主な部分は、このplumbing(通信)の ミドルウェアが占めています。
トピック通信
トピック通信は、Publisher/Subscriberモデルの通信方式となっています。 Publisher/Subscriberモデルの通信方式は、新聞・雑誌などの出版社と購読者の関係に似ています。
-
あらかじめ、データを受け取りたい側のノードは、 配信データを示す一意のTopicのSubscriberとして登録しておきます。
(新聞・雑誌を定期購読する申し込みをするイメージ) -
データの発行元であるPublisherがTopicにデータを発行します。 (新聞・雑誌を出版社が発行するイメージ)
-
Topicに登録していたSubscriberに、データが更新されたことが通知される。
(新聞・雑誌を出版社が発行するイメージ)
PublisherがTopicにデータを発行することで、Subscriberである各ノードに トリガーがかかるため、データを受け取ったタイミングで制御を実行することも可能です。 (イベントドリブン)
トピック通信のメリット
- ノード間がTopicを介して結合しているため、お互いに依存性が低く、システムの変更・拡張が容易。
⇒ 同じデータを使用するノードが増えても、そのノードが Subscriber として増えるだけで、既存のノードの通信に影響がない。
⇒ センサの変更など、Publisherとなるノードを変更するだけで、Subscriberは変更後の情報を受け取ることができる。
※ 実際のセンサ・アクチュエータの制御を行うノードをPC上のシミュレータで模擬するノードを作成し、置き換えれば、実機 ⇔ シミュレータを容易に切り替えて、動作確認・検証なども可能です。
Sky株式会社でも、下記のようにROS2で制御を行うロボットを Unityによって作成した3Dの仮想環境のシミュレータで動作させる取り組みも行っております。