(訳注:最新の情報は原文を参照してください.)
Contents
ROS メッセージとサービスの作成
メッセージとサービスの紹介
メッセージ: メッセージ(msg)ファイルは ROS メッセージの型を説明する単純なテキストファイルです.これは異なる言語でメッセージのソース コードを作成するのに使います.
サービス: サービス(srv)ファイルはサービスの説明です.これはリクエストとレスポンスという2つの部分で校正されます.
メッセージ ファイルはパッケージの msg ディレクトリに保管されています.サービス ファイルは srv ディレクトリに保管されています.
メッセージは一行ごとに型と名前が記載されている,ただの単純なテキスト ファイルです.型には以下のものが使用できます:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string
- time, duration
- other msg files
- variable-length array[] and fixed-length array[C]
ROS 固有の型もあります.Header はタイムスタンプと ROS でよく使用される座標フレームの情報が含まれています.メッセージ ファイルの最初の行にはよく Header header があるでしょう.
以下は Header と文字列型と他の2つのメッセージを用いたメッセージの例です:
Header header string child_frame_id geometry_msgs/PoseWithCovariance pose geometry_msgs/TwistWithCovariance twist
サービス ファイルはリクエストとレスポンスの部分があることを除けば,メッセージ ファイルによく似ています.2つの部分は '---' の行で区切られています.以下がサービス ファイルの例です.
int64 A int64 B --- int64 Sum
上の例では A と B はリクエストで,Sum がレスポンスです.
メッセージの作成
先ほどのチュートリアルで作成したパッケージに,新しいメッセージを定義してみましょう.
$ roscd beginner_tutorials $ mkdir msg $ echo "int64 num" > msg/Num.msg
もう1つステップがありますが,ここでメッセージ ファイルが C++ や Python や他の言語のソースコードへ変換できることを確認しましょう:
CMakeLists.txt をあなたの好みのテキスト エディタで開いてください.そして以下の行の # のコメントを外してください:
#rosbuild_genmsg()
rosmsg の使い方
ROS が rosmsg show コマンドでメッセージを作成しましょう.メッセージを作成するために必要な手順はこれだけです.
使い方:
$ rosmsg show [message type]
例:
$ rosmsg show beginner_tutorials/Num
このように表示されるはずです:
int64 num
先ほどの例で,メッセージには2つの部分が含まれていました:
beginner_tutorials -- メッセージが定義されているパッケージ
Num -- Num メッセージの名前
どのパッケージにメッセージが入っているのか覚えていなければ,パッケージ名を省略できます.やってみましょう:
$ rosmsg show Num
このように表示されるはずです:
[beginner_tutorials/Num]: int64 num
サービスの作成
作成したパッケージを使用してサービスを作成しましょう:
$ roscd beginner_tutorials $ mkdir srv
手作業で新しくサービスを定義するのではなく,別のパッケージをコピーします.
roscp の使い方
roscp 1つのパッケージから他のパッケージへファイルをコピーするのに便利なコマンドライン-ツールです.
使い方:
$ roscp [package_name] [file_to_copy_path] [copy_path]
rospy_tutorials パッケージからサービスをコピーできるようになりました:
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
もう1つステップがありますが,ここでサービス ファイルが C++ や Python や他の言語のソースコードへ変換できることを確認しましょう:
CMakeLists.txt をあなたの好みのテキスト エディタで開いてください.そして以下の行の # のコメントを外してください:
#rosbuild_gensrv()
rossrv の使い方
ROS が rossrv show コマンドでサービスを作成しましょう.サービスを作成するために必要な手順はこれだけです.
使い方:
$ rossrv show <message type>
例:
$ rossrv show beginner_tutorials/AddTwoInts
このように表示されます:
int64 a int64 b --- int64 sum
新しくメッセージを作成したので,もう一度パッケージを作成する必要があります.
$ rosmake beginner_tutorials
ヘルプ
私たちはまだほんの少しの ROS ツールについてしか見てきていません.それぞれのコマンドが要求する引数を覚えておくことは難しいかもしれません.幸運なことに,ほとんどの ROS ツールは各々がヘルプを提供しています.
やってみましょう:
$ rosmsg -h
違う rosmsg サブコマンドの種類を見ることができます.
Commands: rosmsg show Show message description rosmsg users Find files that use message rosmsg md5 Display message md5sum rosmsg package List messages in a package rosmsg packages List packages that contain messages
サブコマンドについてのヘルプも見ることができます.
$ rosmsg show -h
以下は rosmsg show で必要な引数を表示しています:
Usage: rosmsg show [options] <message type> Options: -h, --help show this help message and exit -r, --raw show raw message text, including comments
復習
これまで使ってきたコマンドを並べてみましょう:
- rospack = ros+pack(age) : ROS パッケージに関連した情報を提供します
- rosstack = ros+stack : ROS スタックに関連した情報を提供します
- roscd = ros+cd : ROS パッケージがスタックのディレクトリへ移動します
- rosls = ros+ls : ROS パッケージ内のファイルを表示します
- roscp = ros+cp : ROS パッケージから/へファイルをコピーします
- rosmsg = ros+msg : ROS メッセージ定義に関連した情報を提供します
- rossrv = ros+srv : ROS サービス定義に関連した情報を提供します
- rosmake = ros+make : ROSパッケージを作成(コンパイル)します
次のチュートリアル
ここでは ROS メッセージとサービスを作成しました.次はROS ノードの働きを見てみましょう.






