ROSのTFとは?簡単に説明(サンプルコード付き)最終更新日:2018年12月19日ROSのTFとは?簡単に説明(サンプルコード付き)はじめにROSの便利機能にして基本機能、TF(トランスフォーム)について出来るだけ難しい言葉を使わずに説明していきたいと思います。TFとは?TF(transform)とは「ある座標系」と「他の座標系」の位置関係を表すものです。座標系は部品と部品の位置関係のように変化しないものでもいいですし、部屋のある一点から見たロボットの位置のように常に変化するものでも良いです。例として次のようなロボットを考えてみます。車輪ロボットとセンサこのとき、ロボットの重心位置においた座標系からセンサの座標系に行くには「右に20cm、上に10cm」等と表現できます。複数のTFをつなげることが出来るTFは「あるもの」から「他のもの」への位置関係を表すものですが、普通ロボットなり自動車なりは沢山の部品で出来ています。それらを1つの基準点(たとえば上の図のロボット座標系)からすべて表すのは大変です。そこで、TFを数珠つなぎに書くことで、関係を分かりやすくすることが出来ます。先程のロボットなら次のような座標系が作れそうです。座標系の名前は「frame(フレーム)」と呼びます。「map」フレームは常に動かない座標系です。ロボットなら部屋のある点、自動車なら道路などがこれにあたります。黄色の線は「あるフレーム」から「他のフレーム」へのTFがある事を示しています。frame(子フレーム)」と呼びます。つながっているTF同士の位置関係は自動計算される繋がっている2つのフレーム間のTFは、ROSが自動で計算してくれます。任意の位置関係をいつでも取得することが可能です。※逆に、途中で切れていると目的のフレームが表せなくなります一定時間経つと捨てられるこれは重要な特徴なのですが、TFは一度誰かが発信して一定時間経つと無効になります。表示させたければすべてのTFを常に発信し続ける必要があります。静的TFと動的TFTFには例えばロボットのセンサの位置関係のように永久に変わらないものと、部屋からみたロボットの位置のように変わり続けるものがあります。前者を静的TF、後者を動的TFと言います。TFを発信する静的TFを発信するコードを書いてみます。簡単なのは次のようなlaunchファイルを作ることです。「/>」までがTFを発信するプログラムを実行する部分です。それぞれの引数の意味は次のとおりです。x方向、y方向、z方向、ヨー、ピッチ、ロール、親フレーム、子フレーム、発信の間隔[Hz]nameが同じプログラムを同時に作るとエラーになります。これを自分のパッケージ→lanchフォルダの中に入れて実行すると、argsで指定したTFが発信されます。static_tf.launch発信されているTFをrvizで見てみましょう。type」から「TF」を追加して下さい。Frame」を「robot」や「sensor」に切り替えることで、どのフレームを中心に据えるか選ぶ事が出来ます。lanchファイルで複数のプログラムを起動すれば、TFの数珠つなぎも簡単に実現できます。/></launch>しかし、これだと常に同じTFしか発信できません。次回は常に変化する位置関係の発信方法をご紹介したいと思います。ROS初心者の方はまずはこちらの本がオススメです。PM指摘が間違っていたらすみません。rollの順だと思います。PMその通りです、間違っていました。該当箇所を修正しました。ご指摘ありがとうございます。コメントをキャンセルメールアドレスが公開されることはありません。ライセンスで提供されています。当サイトはクリエイティブ・コモンズを利用しています。以下のルールを守って下さい。BY(表示)作品を創作した人(著作者)の氏名や作品のタイトルなど、作品に関する情報を表示しなくてはならないことを表します。