こんにちは。
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
- find_packageにmessage_generationを追加
- add_service_filesにWordCount.srvを追加
- 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 件のコメント:
コメントを投稿