つらいのでサクッと終わらせたいです。
http://www.ros.org/wiki/tf/Tutorials/tf%20and%20Time%20(C%2B%2B)
前回のつづきで
$ roscd learning_tf
します。
で、
src/turtle_tf_listener.cppのtryの中を以下のように編集します。
try{ listener.lookupTransform("/turtle2", "/turtle1", ros::Time::now(), transform);
変わったのは、carrot1をturtle1に戻したこと、ros::Time(0)をros::Time::now()にしたこと。
ではmakeして実行してみます。
$ make
$ roslaunch learning_tf start_demo.launch
[ERROR] 1262237846.011536000: You requested a transform that is 0.085 miliseconds in the past,
but the most recent transform in the tf buffer is 35.950 miliseconds old.
When trying to transform between /turtle1 and /turtle2.
というエラーがでまくります。そんな最近のデータはないよ。というメッセージですね。
now()のデータはまだできていないので、少し待つ必要があります。
実はtfにはこの待つためのインタフェースが用意されており、
以下のようにして使います。src/turtle_tf_listener.cppを編集してください。
try{ ros::Time now = ros::Time::now(); listener.waitForTransform("/turtle2", "/turtle1", now, ros::Duration(3.0)); listener.lookupTransform("/turtle2", "/turtle1", now, transform);
ros::Duration(3.0)はタイムアウトを指定しています。
このwaitにより指定した時刻(now)のデータ(/turtle2から見た/turtle1の座標系)からがくるまで実行がブロックされます。
ではmake&launchしましょう。
$ make
$ roslaunch learning_tf start_demo.launch
[ERROR] 1262238458.663194000: You requested a transform that is 3.003 seconds in the past,
but the tf buffer only has a history of 2.720 seconds.
When trying to transform between /turtle1 and /turtle2.
まだ一回だけエラーがでます。
これは亀が生まれる前にtfをリクエストされたためです。
これは仕方ないみたいです。
では次回へ続きます。
0 件のコメント:
コメントを投稿