この記事は、ROSについてまとめてみる #2の続きです。
*重複している部分もありますが、ひとまずこのまま公開します。
*この記事の記載内容はROS1に関するものです。
#アーキテクチャ
##コンピュテーショングラフ
こちらの書籍を参考にまとめているのですが、この書籍では、コンピューティンググラフ、という項目で解説されていました。
ROSプログラミング(森北出版株式会社)
https://www.morikita.co.jp/books/book/3010
コンピュテーショングラフというのが何なのか、調べてみてもよくわからなかったのですが…。おそらく演算、処理(computing)の仕組みがどうなっているのか?という部分のことだという理解でいいと思います。
ROSの処理は、以下のような要素からなります。
- ノード
- roscore
- マスター
- パラメーターサーバー
- メッセージ
- トピック
- サービス
- バッグ
これらの要素を用いて、ROSのシステムは、数理的なグラフで表すことができます。
*大きな四角はネームスペース、その中の小さな四角はトピック、丸はノード。
###ノード
ROS1ではプロセスのことです。基本的には単一の処理をします。
パッケージはノードが集まったものです。
###roscore
####マスター
マスターはroscoreの提供する機能です。
トピックやノード、サービスの登録、検索などの管理を行うROSのコア機能です。
ノードは、起動時にマスターに自分の配信(publish)するトピックと、購読(subscribe)したいトピックを登録します。
あとはマスターが相手のピアを見つけてくれるので、それ以降はノード同士のピアツーピアの通信となります。
後からノードを追加した場合なども、マスターがよしなにやってくれます。
####パラメーターサーバー
こちらもroscoreの機能です。トピックのようにPub/Subでイベント的にメッセージを飛ばすのとは違い、こちらは値を保持するような場合に使われます。分散システム内の各ノードから見えるグローバル変数を保持するといったような感じでしょうか。複数ノード起動時の、ノードのコンフィグレーションなどに使われます。
###メッセージ
ノード間の通信におけるデータ単位のひとつ。
メッセージのデータ型は、標準的なものは用意されており、複数言語での実装でも問題のないように取り決められています。これらのデータ型は独自に設定が可能な上、headerにタイムスタンプやフレームIDを持たせることもでき、メッセージの時系列的な管理もできます。
####トピック
ノード間で通信を行う際に、配信者、購読者がお互いに参照する場所。
データパス。メッセージの流れてくる場所。
トピックやメッセージのまわりに関しては、用語が混乱しやすいのですが、トピックを公開して、そこにメッセージを配信する。という解釈が一番近いと思います。
本に例えると、トピックは漫画や雑誌のタイトル(またはそれ自体)、メッセージは中の文章といった感じでしょうか。"トピックを配信する"といったような表現も時々見ますが、"トピックを公開してメッセージを配信する"の方が理解しやすいかなと思います。
###サービス
ROSでは、上記のメッセージのようなPub/Sub型の通信のみでなく、Req/Rep型(クライアント-サーバ型)の通信も提供しています。サービスとは、あるノードが提供する関数(サービス)を、他のノードが利用する仕組みのことです。
使用頻度が高くなく、短い時間で処理が終わるものに適しています。
センサーのスイッチを入れたり、シャッターを押したりといったような操作などです。
###バッグ
rosbagのことです、メッセージの記録、再生を行うことができるツールです。
現状では対応しているのはメッセージのみで、サービスに関しては記録されtないですが、将来的には対応予定だそうです。(ほんとかな)
#4へつづく
#参考
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