2016年10月12日水曜日

【Book】Programming Robots with ROS 【その5】 rosnode/rostopic/rosmsg/rosservice/rossrv

こんにちは。

やっぱり三連休色々やってるとなかなか難しい、時間作ってやらねば。

最後CHAPTER20の残りを一気にメモ。
よく使いそうなものばっかりだから将来いつか役に立つ、はず。




Introspection: rosnode, rostopic, rosmsg, rosservice and rossrv



システムの内部がどう動いているかをコマンドラインでどう見るか説明するシリーズ。

1. rostopic 


rostopic list
どのトピックが使用可能か確認するためのコマンド。

rostopic list
/chatter
/rosout
/rosout_agg

rostopic info
chatterについて調べる場合は、以下を実行する。

$rostopic info chatter
Type: std_msgs/String
Publisher: XXX
Subscribers: XXX

型とPublisher/Subscribeが確認できる。

さらに、std_msgs/Stringについて調べるときは、rosmsg showを使う。

rosmsg show std_msgs/Strings
string data


subscriberとTopicがわかっている場合、直接Topicをpublishすることが可能。

例:
$ rostopic pub /chatter std_msgs/String "{data: 'Hello world'}"

Ctrl-cで完了

rostopic pub のみだと、1回だけpublishされる。
-r つけると、Hz単位で繰り返し送信可能。

$ rostopic pub -r 10 /chatter std_msgs/String "{data: 'Hello world'}"

subscriber側のコンソールでメッセージが確認できる。

<補足> rostopic param でYAMLもコマンドラインで送れる。

2. rosservice


serviceについてもtopicと同様のことが確認可能。

$ rosservice list
使用可能なserviceの表示

$ rosservice info (サービス名)
rosservice listで表示されたサービス名について、
Node名, URI, Type, 引数を表示。

引数の型の定義を確認する際は、以下のコマンドで確認可能。
例:/add_two_intsについて確認する場合。
$ rossrv show rospy_tutorials/AddTwoInts
int64 a
int64 b
--------
int64 sum
この場合、a,bを指定して、sumが返ることがわかるので、
以下のように実行できる。

$ rosservice call /add_two_ints "{a:40, b:2}"
sum: 42

3. rosnode

nodeについても、rosnodeを使ってコマンドラインで直接情報を確認できる。

$ rosnode list
現状存在するnodeを表示する。

表示されたnodeで気になるnodeについて、以下のコマンドで詳細確認。
$ rosnode info (ノード名)
Publications(publishするもの), Subscription(どのノードのpublishを見るか)
Services(使用するサービス), 他のノードとの接続情報などが表示される。

ノードに対して、状態を確認するのにpingのようなrosnode pingが使用可能。
$ rosnode ping listener
reply from http://XXXX  time=XXXXms
みたいな表示がでてくる。

nodeをkillする場合はrosnode killを使用する。
$ rosnode kill (node名)
killing (node名)
killed

roslaunchコンソールで、killしたノードがshut downしたか確認できる。


Summary


ROSで使う基本的なツールについて紹介されている章でした。

roscore: 一番最初にrunするよ
rosparam: parameterを見たり設定したりする
roscd: cdするときパスとか指定しなくて楽
rosed: 好きなエディタでソースコードが開かれるよ、パスの指定もしなくていい
rosrun: 1つのNodeを実行
roslaunch: 複数のNodeを実行
rostest: 複数のNodeのテストを実行。roslaunchに<test>を追記
rosnode: Nodeに関する操作が色々できる
rostopic: Topicに関する操作が色々できる
rosmsg: メッセージの型を確認する
rosservice: サービスに対して色々できる。
rossrv: 指定する引数と返り値を確認する

0 件のコメント:

コメントを投稿