System)を勉強した記録です。ROSを使ってロボットに知能を吹き込みます。2009年12月31日木曜日フレームを追加する(C++)今日は大晦日のROS日和ですからじゃんじゃんいきましょう。フレームを追加する(C++)http://www.ros.org/wiki/tf/Tutorials/Adding%20a%20frame%20(C%2B%2B)ローカル座標系の連結がテーマです。この重要性はロボティクスを勉強した人なら分かりますね。tfがやりたいのはまさに今回やるテーマだと思います。例として、レーザーレンジファインダの取り付け位置の話がでています。レーザー位置はロボットが動くと自動的についてきます。レーザーレンジファインダが返す、レーザーレンジファインダからの相対位置での障害物位置を、ロボット座標系に変換する、なんてことはやりそうですよね。tfを使えばそういう変換が楽勝にできます。tfではツリー構造を作ります。親1つ、子多数の関係です。循環構造は作れません。今回作るツリー構造は以下の図です。turtle1の子としてcarrot1を作ります。/turtle2(引数で指定した)は/worldの子でしたね。いつものように始めます。learning_tfしていつものところへ。以下をsrc/frame_tf_broadcaster.cppとして保存しましょう。0;};以前作ったbroadcasterと似たコードが並んでいますね。違うのはコールバックでないこと、と以下が違います。"turtle1");最後のsendTransformで、turtle1を親にして、carrot1という名前で新しいフレームを作っています。この引数をとるsendTransformはdepricatedなので、以下のように書き換えたほうがいいですね。"carrot1");その上のところはオフセットです。turtle1からY方向に2.0だけオフセットした位置にcarrot1を作っています。ところで、亀なのにcarrotを追いかけるってどうなの・・・。);ではいつものようにビルドしてください。CMakeLists.txtに以下を追加。launchファイルも追加しましょう。</launch>です。普通に起動するだけですね。start_demo.launchあれ?前回と何も変わりません。前回作ったsrc/turtle_tf_listener.cppを編集して、carrotを追いかけるようにしましょう。/turtle1を/carrot1に置き換えるだけです。transform);で、makeして、launchしましょう。亀の左によりそう、いい亀になりましたね。最後におまけで、動くフレームを作っててみましょう。src/frame_tf_broadcaster.cppを以下のように変更します。);亀のまわりをぐるぐる回る亀ができましたとさ。今回はこれでおしまいです。(Atom)自己紹介OTLヒューマノイドロボットラブ。おもしろいロボットを作るのが趣味です。