ROSでは,ノード同士がメッセージおよびサービスをやり取りすることでデータのやり取りをします.そこで,今回はメッセージとサービスを作成します.
たいていは作らないでも事足りるので,勉強用です.
勉強しなくてもいけるのでパスでもOK.
メッセージもサービスもノードからノードへのデータの型です.
しかし,メッセージはトピックを介して一方通行にデータを渡しますが,サービスは受け取った場合受け取ったノードが返信を行います.
以下に新しいメッセージやノードの作り方を記します.
メッセージ:
メッセージ(msg)ファイル。ROS メッセージの型を説明するテキストファイル.
Msgディレクトリに保管。
一行ごとに型と名前が記載。
int8, int16, int32, int64 (plus
uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and
fixed-length array[C]
からなる。
*ROSの固有の型Headerも含まれることがある.
タイムスタンプと座標フレームの情報を含む.
タイムスタンプと座標フレームの情報を含む.
msgの例をいかに示す.
Header header
string
child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
サービス:
サービス(srv)ファイル。サービスを記述.リクエストとレスポンスという2つの部分で構成.リクエストとレスポンスの部分があること以外はメッセージと同じ。以下の例ではAとBがリクエスト。Sumがレスポンス。
int64 A
int64 B
---
int64 Sum
1. メッセージファイルを作成
新しいメッセージを定義し,int64 numと書かれたメッセージファイルを作る
$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
メッセージビルド時には"message_generation"が有効になっていることが必要で、メッセージ実行時には、"message_runtime"の有効化のみ必要なのでpackage.xmlの以下のコメントアウトを外す
<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
CMakeLists.txtのfind_package()に以下のようにmessage_generation追加
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
メッセージの実行時依存を有効にする
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
以下のブロックを見つける
# add_message_files(
# FILES
#
Message1.msg
#
Message2.msg
# )
以下に書き換える
add_message_files(
FILES
Num.msg
)
以下のコメントアウト解除
# generate_messages(
# DEPENDENCIES
#
std_msgs
# )
CMakelists.txtの編集を終えたのでメッセージを確認していく
以下のコマンドと出力が正しいか確認
$source ~/catkin_ws/devel/setup.bashを行ってからやったほうがいいかも。
$ rosmsg show beginner_tutorials/Num
表示は
int64 num
2. サービスの作成
$ roscd beginner_tutorials
$ mkdir srv
ほかのパッケージからコピー(パッケージrospy_tutorials からAddTwoInts.srvにコピー)
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
CMakeLists.txtにmessage_generationの依存を追加(メッセージのほうで済)
CMakeLists.txtの以下を探す
# add_service_files(
# FILES
#
Service1.srv
#
Service2.srv
# )
ここをいかに書き換える
add_service_files(
FILES
AddTwoInts.srv
)
サービスの確認
$ rossrv show beginner_tutorials/AddTwoInts
表示は
int64 a
int64 b
---
int64 sum
以下の部分を、CMakeLists.txt内から探す。
# generate_messages(
#
DEPENDENCIES
# #
std_msgs # Or other packages
containing msgs
# )
以下に書き換え
generate_messages(
DEPENDENCIES
std_msgs
)
catkinワークスペースの中で再度catkin_make
$cd ~/catkin_ws
$catkin_make
$cd -
以上
以上
ところで,rosの2017年のディストリビューション,lunarが出ましたね.
必要なパッケージがある人はlunarにしてもいいと思いますが,そうでもない人は今のパッケージが互換性あるか不明なものも多いと思うので,そうそう急ぐ必要はないかなと.
0 件のコメント:
コメントを投稿