1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ROSについてまとめてみる #4

Last updated at Posted at 2020-12-18

この記事は、ROSについてまとめてみる #3の続きです。
*重複している部分もありますが、ひとまずこのまま公開します。
*この記事の記載内容はROS1に関するものです。

#ROSでの通信
ROSの肝は、まずこの通信を理解することです。
ここではROSの通信についてまとめます。

##メッセージ
ROSで使われるPub/Sub型の通信。TCPベースで実装されている。

ROS_message.png

Publisherは、プロセス起動時に、自身の発行するTopic名と、ノードのアドレスをMasterに登録します。
Subscriberは、起動時にMasterに購読したいTopicを検索してもらい、そのTopicを発行しているPublisherのアドレスを取得します。
あとは、SubscriberがPublisherに直接接続し、ピアツーピアのメッセージの送受信が行われます。

##サービス
ROSで使われるReq/Rep型の通信。あるノードが他のノードの関数を使う。RPCとも呼ばれる。

ROS_service.png

サービスはクライアント、サーバー形式の通信です。Serverは、起動時に自身のService名と、ノードのアドレスをMasterに登録します。
Clientはサービス利用時に、MasterにService名を検索してもらい、そのServiceを発行しているServerのアドレスを取得します。
Clientはその情報をもとにServerにリクエストを要求し、ServerはClientにレスポンスを返します。

##パラメータ
パラメータに関しては文献によって通信に分類されないものもありますが、用途としてはここにまとめてもいいような気もするので、書いておきます。

パラメータサーバーは、ROS Masterが有する機能で、システム内の全ノードから参照できる値を保持します。
利用できるデータ型が決まっているため、簡単に利用でき、システム内の全ノードから参照できます。
実際には文字列のやり取りが行わており、各ノードが適した形式に読み替えているようです。

##使い分け

  • メッセージ: 非同期ストリーミング
  • サービス: 同期での単一データ通信や、機器の操作など
  • パラメータ: システム内の全ノードから参照できる値を保持する

#アクション
ROSのサービスは同期なので、クライアントがサーバーからレスポンスを受け取るまでプロセスがロックします。
単純なスイッチのOn/Offや、ステータスの取得等ならこれでもいいのですが、ロボットの移動などの時間のかかるタスクには向きません。移動中はサーバーから何も返ってこないばかりか、失敗すれば一生何も返ってこないこともあり得ます。
こういった時のために、ROSには、複数のトピックを組み合わせた、アクションと呼ばれる非同期の手法があります。
アクションでも基本的にはトピックの仕組みが使われています。
ゴールというトピックにメッセージを送信することで、アクションサーバーは動作を開始します。実行中、アクションクライアントはフィードバックというトピックを通じて、途中結果を受け取ることができます。そしてすべてが実行し終わると、リザルトというトピックから、結果を受け取ります。

#5へつづく
#参考
ROS
http://wiki.ros.org/

プログラミングROS(O'Reilly Japan)
https://www.oreilly.co.jp/books/9784873118093/

ROSプログラミング(森北出版株式会社)
https://www.morikita.co.jp/books/book/3010

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?