Contents
パブリッシュ/サブスクライブ モデルは、とても柔軟な通信のパラダイムですが、その多対多単方向の転送は、よく必要とされるRPCのリクエスト/リプライ インタラクションには向きません。リクエスト/リプライは、messagesのペア(一つはリクエスト用、もう一つは、リプライ用)によって定義されるサービス(Service)を通して、実現されます。ROSのnodeは、nameの文字列に基づき、サービスを提供し、クライアントは、リクエストメッセージを送ることによってサービスを呼び出し、リプライを待ちます。クライアントライブラリは、通常は、リモート呼び出しであるかのように、プログラマにこのインタラクションを提供します。
サービスは、srvファイルを使って定義され、そのファイルは、ROSのクライアントライブラリによってソースコードにコンパイルされます。
クライアントは、継続的接続をサービスに作ることができ、サービスプロバイダの変更に対するロバストを犠牲にする代わりに高いパフォーマンス性を持ちます。
サービスタイプ
topicsのように、サービスは、.srvファイルのパッケージのリソース名である関連したサービスタイプを持ちます。他のROSのファイルシステムベースタイプと同様、サービスタイプは、パッケージ名 + .srvファイルの名前でできています。例えば、my_srvs/srv/PolledImage.srvは、サービスタイプmy_srvs/PolledImageとなります。
Service ツール
rosservice: ROSのサービスについて問いかけ、リストする。
クライアントライブラリサポート
Python
rospy 概要をご覧ください.
C++
roscpp 概要をご覧ください.