2016年10月13日木曜日

subscribeしたデータをpublishしてみた

こんにちは。

ROSで色々試行錯誤でやり始めて早1週間。
今日はあるノードでsubscribeしたデータをpublishするプログラムを書いてみました。

【本日の目標】


具体的にはロボットがセンサのデータをsubscribeして、それを別のノード(ロボット動かすノード)にpublishしたいなーと言うのが今日のゴールです。

【やってみた】

まずは何も考えずにぐわー、っと書いてみたんですが、callbackの中でpublishしていたせいですごい周期でpublishされてうひょっ、となりました。subscribeの頻度ってけっこー頻繁なのね。。


みんなどう書いてるのかなー、とちょっとググってみたら、複数のTopicをSubscribeしてその情報をpublishしてる方がいらっしゃいました。

http://interimadd.com/2016/02/12/ros%E3%81%A7%E8%A4%87%E6%95%B0%E3%81%AEtopic%E3%82%92subscirbe%E3%81%97%E3%81%9F%E6%83%85%E5%A0%B1%E3%82%92%E5%87%A6%E7%90%86%E3%81%97%E3%81%A6publish%E3%81%99%E3%82%8B%E3%83%8E%E3%83%BC%E3%83%89/

ということで、

・callback内ではセンサのデータの更新のみ行う
・別の関数でwhile文とsleep使って周期的に投げる

的な書き方をして、適切な周期でデータを他のノードに送ることができました、めでたしめでたし。

【勉強になったこと】

・callbackで今まで引数は適当にSubscribeで指定した型のものを使うために使用してたんですが、クラスを作る場合&インスタンス変数使う場合は引数selfを追加しとかないと、実行時に怒られた。

こんなかんじで書いたら大丈夫でした。

define callback(self, data):
    self.hoge = data.fuga.fuga.x

Python使ったことないからPythonの勉強しないとですねー。

・rospy.Rateで指定する引数がHzなので、もっと細かくするとき他のやり方あるのかなー、と気になりました。(今後の宿題)

次は週末やらなかったPS3のコントローラーでもつないでみるかなー。

0 件のコメント:

コメントを投稿