2016年10月27日木曜日

【Book】Programming Robots with ROS Chapter3: topics

こんにちは。

一通り色々試してみたので、もう一回基本をおさらいしようと
Programming Robots With ROS の最初の方から読み直したのでメモ。
Chapter3から。

Published to a Topic


2Hzで/counterにInt32の値をpublishするサンプルが書いてありました。

・topic_publisher.pyのパーミッション変えないと実行できないから注意。

Checking That Everything Works as Expected


サンプルがちゃんと動いてるか確認方法が載ってました。

$ rostopic hz counter

想定している頻度でpublishされているか確認するコマンド。
その他は$ rostopic -h で確認できる。

Subscribing to a Topic


/counterというtopicをsubscribeするサンプルが載ってました。
callbackでmsgを表示するだけ。

Checking That Everything Works as Expected


サンプルをrosrunして、rostopic pubでcounterをpublishして、rostopic info counterでpub/subともに想定通りか確認。

Latched Topics


頻繁にpublishしないtopicの場合、subscribe側がtopicを受け取れないことがある。
(例: mapトピックは基本的に変わらないので、map_serverがdiskから読み込む際に一度だけpublishされる)

Publisherを定義する際にlatchedオプションをTrueにすることで、Subscribe側が自動的に一番最後にPublishされたtopicを読むことができる。

pub = rospy.Publisher('map', nav_msgs/OccupancyGrid, latched=True )

Defining Your Own Message Types


・型に注意。
例えばUInt8がC++だとunsignedだがPythonはsignedで扱われるので、想定と異なる振る舞いをする可能性があるのでC++とPython共存するときは注意

・msgディレクトリのファイルはどの言語を使う場合でも参照される。
独自で定義した場合はPythonを使う場合でもcatkin_makeを実行すること。

独自の型の作り方の例は、実数と虚数を持つComplex.msgをbasicsパッケージに作る
ケースを取り上げてました。
詳細は小倉さん本とかぶるので省略。

Using Your New Message


作ったComplex.msgを使ったサンプルが乗ってました。
使い方はいつものようにimportするだけなので省略。

When Should You Make a New Message Type?


Q:いつ作るか?
A:必要になったときだけ。以上
結構充実してるので使い回せないか確認してから作ろう。

Mixing Publisher and Subscriber


PublisherとSubscriber両方もつ例がここまでなかったのでサンプルを例示していた。

publishは新しいデータが来たときだけ送りたいのでcallbackで実行。

Summary


ROSの通信の基本中の基本topicsについてまとめたよ。
サンプル実際に使うとき使えるから参考にしてねとのこと。

あとはwiki参照とのこと。http://wiki.ros.org/Topics?distro=indigo


以上、3章を読んだメモでした。
サンプルとかは小倉さんの本とほぼ一緒ですが、細かい部分の話が参考になる部分もありました。

次は今までTopicで事足りてたので全然使ったことがないChapter4のServiceを読む予定。

あ、あとrostest使ってみたら意外と情報がググってもわからなかったので手探りでやったのをまとめる予定。

0 件のコメント:

コメントを投稿