http://www.ros.org/wiki/tf/Tutorials/Time%20travel%20with%20tf%20(C%2B%2B)
前回書き換えた部分(src/turtle_tf_listener.cpp)をさらに以下のようにします。
try{ ros::Time past = ros::Time::now() - ros::Duration(5.0); listener.waitForTransform("/turtle2", "/turtle1", past, ros::Duration(1.0)); listener.lookupTransform("/turtle2", "/turtle1", past, transform);
見れば分かると思いますが、5秒前のturtle1のデータを使ってturtle2に指令値を与えます。
うーん、ぐちゃぐちゃですね。
5秒前の亀1と亀2の位置を使って現在の亀にフィードバックしちゃっているので、
むちゃくちゃな制御になります。
5秒前の亀1のデータと今の亀2の位置のデータをつかって今の亀にフィードバックすれば、
5秒前の亀1を追いかけるはずですね。
実は以下のように、時間は2つのリンク(座標系)にばらばらに指定ができます。
try{ ros::Time now = ros::Time::now(); ros::Time past = now - ros::Duration(5.0); listener.waitForTransform("/turtle2", now, "/turtle1", past, "/world", ros::Duration(1.0)); listener.lookupTransform("/turtle2", now, "/turtle1", past, "/world", transform);
"/world"を入れているところには、時間が変わっても動かないリンクを入れる必要があります。
過去の時間でまず/turtle1から/worldへの変換を計算し、現在で/worldと/turtle2の変換を計算します。下図参照。
これで5秒前のところを追いかける亀ができました。
これでtfのチュートリアルは終了です。
座標系(リンク)間の関係を求めるのにtfを使いました。
0 件のコメント:
コメントを投稿