ROS Filesystem Concepts: Packages | Metapackages | Manifest | msg | srv

ROSは、ROSのserviceのタイプを記述する際に、簡略化されている記述言語である("srv")を使用します。これは、node間でのrequest/responseのような関係の通信を可能にするために、msg フォーマットに則って作られています。Serviceの記述は、packageのサブディレクトリであるsrv/のなかの.srvで行われます。ですので、.srvファイルを書く前に、msg フォーマットに慣れておくべきです。

Service の記述は、package resource namesという形で参照されて使われます。例えば、robot_srvs/srv/SetJointCmd.srvは一般的に robot_srvs/SetJointCmdと参照されるということです.

コマンドラインツール

rossrv はserviceの内容や、 .srvファイルを含むパッケージなどを表示したり、サービスのタイプを使っているソースファイルを見つけ出すこともできます。

サービスの書き方

サービスのファイルのは、requestresponsemsg type'---'で分断されて構成されいる。二つの.msgファイルが'---'でつながっているのは、正しいサービスの書き方です。

以下に簡単なサービスの例として、stringを受けとり、stringを返すものを挙げてみます。:

string str
---
string str

もちろんもっと複雑な形にすることは可能です。:

#request constants
int8 FOO=1
int8 BAR=2
#request fields
int8 foobar
another_pkg/AnotherMessage msg
---
#response constants
uint32 SECRET=123456
#response fields
another_pkg/YetAnotherMessage val
uint32 an_integer

サービスの中に他のサービスを挿入することはできません

.srvファイルをビルドする

ROS Client Libraries.srvファイルをソースコードに変換するサービスジェネレータを実行します。ほとんどの場合、詳細な内容は一般的なビルドルールを含むことによって解決されますが、これらのサービスジェネレータは、あなたのビルドスクリプトから実行される必要があります。慣習として、すべての.srvファイルは、srvと呼ばれるパッケージの中のディレクトリに蓄えられ、それらのファイルは、gensrv()CMakeLists.txtに加えることでビルドされます。以下が例です:

cmake_minimum_required(VERSION 2.6)
include(rosbuild)
rospack(robot_srvs)
gensrv()

クライアントライブラリサポート

Pythonでは、生成されるPythonのサービスタイプファイル(例えばfoo_srvs.srv.Foo)が、ほぼすべての必要となるであろう.srvファイルについての情報を提供してくれます。__slots___slot_types、そのほかの変数を使って、requestやreplyメッセージについての情報を内観することができます。さらに、発展的なことを行えるユーザのために、roslibパッケージの中のroslib.srvsのモジュールが、.srvファイルをPythonでパースする機能をサポートしています。このライブラリは、サービスジェネレータを実行する人にのみ推奨されます。

Wiki: ja/srv (last edited 2013-04-24 17:11:59 by EisokuKuroiwa)