2016年10月31日月曜日

[Book]Programming Robots with ROS Chapter4: Service を読みながらServiceを試した。前編

こんにちは。

Topicばっかり使ってServiceの勉強してないことに気づいたので、せっかくなのでProgramming 
Robots with ROSのChapter4を読みながら動かしてみることにしました。

ちなみにこれ読む前は小倉さんの本で”同期で何かやりたいときに使う何か”くらいの理解でした。
まー読んだ後もあんまり理解は変わってませんが。。笑

まえがき

- あるノードが別のノードのfunctionを呼ぶ場合に使う。

- input/outputを定義するよ

- ユースケースとしては、センサをONしたり、カメラで高解像度の写真を撮ったりすることを想定

既存のサービスも多数ありますが、あえて中身を理解するために今回は独自のserviceを作る、とのこと。

Defining a Service

service-definition fileを自分で定義してみましょう、という段落になります。

message-definition file(Topicで使用する定義)と似ているのですが、
Input/Outputの定義がある点が異なります。

今回文字列から単語数をカウントするサービスですので、定義するサービスは以下とします。

WordCount.srv

string words
---
uint32 count

"---"は入力と出力の間に書きます。

作ったsrvファイルを適切なディレクトリに配置したら、catkin_makeを再度やる必要があります。
この辺は自分でmsg追加したときと同じ手順ですね。

CMakeLists..txtとpackage.xmlを一部修正する必要があります。


CMakeLists.txt

  1.  find_packageにmessage_generationを追加
  2.  add_service_filesにWordCount.srvを追加
  3.  generate_messagesを有効化

package.xml

以下を追加。コメントアウトしてある部分を有効にするのが半分くらいでした。

<build_depend>rospy</build_depend>
<run_depend>rospy</run_depend>

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>

以上の修正の後、catkin_makeを実行

実行後、rossrvコマンドで作成されたserviceが正しく設定できているか確認できる。

$ rossrv show WordCount

後編へ続く。

0 件のコメント:

コメントを投稿