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 件のコメント:
コメントを投稿