ROSの通信について(軽く)
概要
皆さん、ROSの通信についてどのくらい理解してるでしょうか?
私は、全く理解してないです。ある程度は、こんなもんだよねって感じで理解してました。
個人で作業してる場合では、問題ないですが、他人と同じ作業してる時にROSの通信に関する知識の差のせいで作業が止まってしまうかもしれません。なので、相手に迷惑をかけないように、ここで一通りROSの通信に関する情報をまとめようと思います。ちなみにROS2の話はしません。(ほんの少しだけする)
ROSの通信
ROSの通信に関するものを雑にリスト化します。
- 独自プロトコル
- RPC, XMLRPC, TCPROS, UDPROS
- rosmaster
- topic, service, action
- pub/sub
- md5sum
上記のものを抑えれば、とりあえず大丈夫な気がする。
独自プロトコル
ros2は、OMGによって策定されたIDLを使用する通信プロトコルを採用してるそうなのですが、rosの通信プロトコルは独自に決められているそうです。多分、メッセージの定義やシリアライズが独自ってことなのかな。
RPC
プログラミングでのメソッド呼び出しを、同一プロセス内ではなく、別のプロセス(通常、別サーバ上)に対して行うもの。クライアント・サーバーシステムや分散処理技術(pub/sub?)を実現する仕組みとして利用されている。
XMLRPC
XMLRPCは、遠隔手続き呼出し (RPC) プロトコルの一種である。
また、XMLRPCはXML形式のデータをHTTPでやり取りするためのプロトコルであり、XML-RPCを利用するためにはXML-RPCサーバを立ち上げ、そのサーバに対してリクエストを送信する必要がある。
rosでは、XMLRPCをデータの接続をネゴシエートする場合のみ使用する。データは、XMLRPC経由で送信されない。
TCPROS
TCPROSは、ROSメッセージおよびサービスのトランスポート層です。 特徴としては、通信の信頼性を確保する代わりに低速。
UDPROS
UDPROSは、ROSメッセージおよびサービスのトランスポート層です。 特徴としては、通信の信頼性よりも速度を優先する。
topic
topicとは、メッセージの内容を識別するために使用される名前である。
メッセージは、パブリッシュ/サブスクライブセマンティクスを備えたトランスポートシステムを介してルーティングされる。
2つのノードがメッセージの交換を開始する順序について
- サブスクライバーが開始。使用するトピック名を解決。
- パブリッシャーが起動。使用するトピック名を解決。
- サブスクライバーはマスターに登録。(XMLRPC)
- パブリッシャーはマスターに登録。(XMLRPC)
- マスターはサブスクライバーに新しいパブリッシャーを通知。(XMLRPC)
- サブスクライバーはパブリッシャーに連絡してトピック接続を要求し、トランスポートプロトコルをネゴシエート。(XMLRPC)
- パブリッシャーは、選択したトランスポートプロトコルの設定をサブスクライバーに送信。(XMLRPC)
- サブスクライバーは、選択したトランスポートプロトコルを使用してパブリッシャーに接続。(TCPROSなど...)
service
topicでは、非常に柔軟な通信パラダイムであるパブリッシュ/サブスクライブモデルを使用していた。 serviceでは、一対一の一方向トランスポートとしてクライアント/サーバーモデルが使われる。
- サービスはマスターに登録。
- サービスクライアントはマスターでサービスを検索。
- サービスクライアントは、サービスへのTCP / IPを作成。
- サービスクライアントとサービスは接続ヘッダーを交換。
- サービスクライアントがシリアル化された要求メッセージを送信。
- サービスはシリアル化された応答メッセージで応答。
action