tfのデモを試す(リスナー解析編)
ROSさんお手やわらかに:ROS入門編
今回はリスナーの解析。デモのリスナーはtfを使って(という言い方でいいのか?)タートル2を制御、タートル1を追跡させる。
下記がリスナーtutle_if_listenet.pyの主要部分。
これには__main__しかないので上から順に実行。
11行のinit_nodeは何かおかしい。以前確認したとおり、このノードの名前はlistenerのはず、tf_turtleではない。デモのサンプルコードではこうなっている。これでもエラーにもならず動くようだ。そういうものらしい。
13行目は重要。リスナーオブジェクトlistenerを生成する。生成されるとすぐにデータ受信を開始する。
15行から17行は、turtlesimのspawnサービスを使って、少しはなれた場所に2匹目のタートルを生成。
19行目、この2匹目のタートルへ制御情報をパブリッシュするためのオブジェクトturtle_valを生成。
21行目、ループの周期を制御するオブジェクトrateに10Hzを設定。
22行目からが制御ループ。
24行目が、tfの仕組みをつかって情報を取得する、このプログラムのキモ。リスナーオブジェクトlistenerからでtransとrotというコンテナに必要な変換をした結果を格納する。仕組みは例によってよく解らないが、どうもこう書くらしい。カッコの中は次のようになっている。
・タートル2の座標系から見た、
・タートル1の座標系の原点(タートル1のいる場所)の、
・最新情報(rospy.time(0))を取得。
このへんは別投稿で詳しく書いておいた方がよさそうだ。
27行目からはタートル2の制御情報を作っている。
どうも、transというのは配列で[0][1]にタートル1のx,y座標(タートル2の座標系で)が入っているようだ。つまりこれがタートル2から見たタートル1の方向と距離になる。
ということで旋回角angularはatan2で計算している。4倍しているのはなぜかは不明。実験してみる必要がある。
移動速度linearは、単純に距離を計算し、そこを2秒で移動するよう係数0.5をかけて算出している。
これも図をつかって再度投稿したほうがよさそう。
で、31行目でループの実行周期が10Hzになるようオブジェクトrateを使って調整している。
とりあえずこんなもの。スクリプトは下記に。
「turtle_tf_listener.py」をダウンロード
« tfのデモを試す(ブロードキャスター解析編) | トップページ | tfのデモを試す(追いかけっこの補足) »
「ROSさんお手やわらかに」カテゴリの記事
- 3Dプリンターで作る簡単turtlebot(おしまい)(2017.01.07)
- 3Dプリンターで作る簡単turtlebot(raspberry pi3の取り付け)(2017.01.03)
- 3Dプリンターで作る簡単turtlebot(kinectの取り付け)(2017.01.02)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て2)(2016.12.29)
- 3Dプリンターで作る簡単turtlebot(パーツの組み立て1)(2016.12.25)
コメント