(訳注:最新の情報は原文を参照してください.)

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

上の例では AB はリクエストで,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 ノードの働きを見てみましょう.

Wiki: ja/ROS/Tutorials/CreatingMsgAndSrv (last edited 2010-01-23 04:31:04 by AkihisaOyama)