2023年3月
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

カテゴリー

ブログパーツ

無料ブログはココログ

« tfのデモを試す(ブロードキャスター解析編) | トップページ | tfのデモを試す(追いかけっこの補足) »

2013年4月22日 (月)

tfのデモを試す(リスナー解析編)

ROSさんお手やわらかに:ROS入門編

今回はリスナーの解析。デモのリスナーはtfを使って(という言い方でいいのか?)タートル2を制御、タートル1を追跡させる。

下記がリスナーtutle_if_listenet.pyの主要部分。

Listener

これには__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さんお手やわらかに」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: tfのデモを試す(リスナー解析編):

« tfのデモを試す(ブロードキャスター解析編) | トップページ | tfのデモを試す(追いかけっこの補足) »