Computation Graph level
最初にも伝えましたが、ROSはネットワーク上ですべてのProcessを接続しています。すべての”Node”にもこのネットワークをアクセスすることや、他の”Node”とやり取りすることもできます。
コンセプト的にはNodes,Master,Parametre Server,Messages,Topic Services,Bagsがあります。これkら一つずつ説明したいと思います。
Master
Node間の通信管理し、システム立ち上げるとすべてのNodeがMasterに”Register”し、Node間のサービスを探します。このMasterがないとNode間、Services、Messageの通信もできません。分離システムでは、システムAには自分のMasterがあり、Nodeは自分や他のパソコンにいてもOKです。
Node
NodeはMasterの立ち上げ終わりか処理し始めます。もしシステム中でどあるProcessを他のNodeとやり取りしたなら、Nodeの作成が必要しROS Networkとつながる必要があります。そしてそのNodeに処理するProcessが入っています。通常にシステム内はたくさんのNodeがあり違うFunctionを制御しています。
そこで、大きなNode1つですべての仕事やるより小さいなNodeたくさんで違うFunctionを制御したほうが効率だと思います。NodeはROS Client libraryからプログラムされています(例えばroscpp or rospy)。そしてServices,Topic,Parametersを経由して他のNodeと通信します。Node自体は他のNode名と重複しないように注意しましょう。
ROSでNodeの操作するにはrosnodeというコマンドがあります。
Messages
Node間は”Message”で通信します。このMessageには他ののNodeに送るのデータが含まられています。ROSでは様々な標準Typeなメッセージもあり、もちろんあなたも自分でTypeを作成できます。
rosmsgというコマンドがあります。
Example
fieldtype1 fieldname1 fieldtype2 fieldname2 fieldtype3 fieldname3 |
Topics
Messageことに自分の名前があり、ROSネットワークに配置されています。Nodeはデータ送るとき、私たちはこの”データ送る”の動作は”Publishing Topic”と言います。Nodeが別のNodeからデータ受けたいとき、まず”subscribing to the topic”という動作が必要になります。ここで特別なのはSubscriberがSubscribeするTopicは”実際存在しなくも大丈夫”ってこと。メリットは実機で動くとき要らなくなったTopicがきても特になにもしなくもOKです。
でも、大事なのは”Topic”の名前は必ず重複してはだめです。
Topicsの通信はTCP/IP(Default、TCPROS)やUDP(UDPROS)を使っています。
ROSでTopicsを操作するにはrostopicというコマンドがあります。
Example
/enable_statistics default: False /statistics_window_min_elements default: 10 /statistics_window_max_elements default: 100 /statistics_window_min_size default: 4 seconds /statistics_window_max_size default: 64 seconds |
Parameter Server
このParameter Serverが…よくわからない。
もう少し深く掘ったらまた書きます。
Services
TopicsをPublishするときは、N to Nのデータやり取りは常にやっています。ですが、そのデータのリクエストやアンサーはTopicsの仕事ではありません。これはServicesの仕事です。もちろん、Servicesの名前は重複してはいけません。NodeがそのServicesがあるから、すべてのNodeがこれを使って通信することできます。
Servicesを操作するにはrossrvとrosserviceとコマンドがあります。
Bags
BagsはROS messageのデータを保存したりPlaybackしたりのFomratです。Bagsはデータ保存するにはすこく大事な手段(例えばSensorとか)。もし複雑なRobotシステムになるとBagsを使う機会が多くなるでしょう。
ros_comm repository
とりあえず、今回はそこまでにしまね。
はーい、お疲れ様です。