【ROS】tfを理解する(フレームのつながり)

どうもこんにちは、
ROSのtfは非常に理解が難しく、最近ようやく理解できるようになってきました。
そこで、tfについてブログにまとめようと思います。
今回はフレームのつながりについて説明します。
tfとは?
tfは、ROSシステムを理解する上で非常に重要な仕組みです。
tfは、transformの略で、座標変換のライブラリのことです。
座標変換のライブラリですので、ROSには様々なフレーム(座標軸)が登場します。ここで代表的なフレーム(座標軸)を紹介します。
各フレームの座標変換については、別途纏めようと思います。
ROSのフレーム(座標軸)について
ROSシステムの自律走行ロボットでは、一般的には

まずは、それぞれのフレームについて見ていきます。
mapフレーム
odomフレーム
オドメトリで算出した位置とは、一般的には、車輪の回転数からロボットの位置を求める方法です。しかし、実際の開発現場では、IMUセンサーからの位置をオドメトリと言ったり、Lidarやカメラから求めた位置情報をオドメトリと言ったりします。
要はオドメトリというのは連続的に計測したデータから算出したロボットの位置のことで、その原点となるのがodomフレームです。
base_linkフレーム
他にもいろんな座標系(フレーム)がありますが、主要な部分だけ紹介しました。
個人的に一番ポイントになるのがodomフレームだと思います。
では、odomフレームについてもう少し深堀りしてみましょう。
odomフレームとは何なのか?
先ほども紹介したように、odomフレームは、mapフレームからオドメトリで算出した位置がどのぐらいズレているかを表します。
オドメトリというのは、回転数やセンサーから算出したロボットの位置のことです。例えば、回転数から位置を算出する場合、ロボットが移動する地面がきれいな平面だったらよいですが、実世界ではボコボコした地面だったり、いろいろな環境下で動かすので、オドメトリから算出した位置は、移動すればするほど誤差が蓄積していきます。
要は、

誤差を含んでいるのは、あくまでもodomフレームからみたbase_link(ロボットの位置)です。もう1つmapフレームがありますので、
じゃあどうやってodomの誤差(ズレ)を無くすようにmap座標系とodom座標系をつなぐのか?
代表的な例でいうと、ROSの一般的な位置推定アルゴリズムのAMCL等がmapフレームからodomフレームを繋いでくれます。(AMCLについてはまた別の機会にブログにまとめようと思います)
簡単に言うと、AMCLはオドメトリで算出した位置(誤差あり)をレーザースキャン情報や地図などの情報から誤差を無くすようにmapフレームとodomフレームを繋いでくれるのです。
人間で例えると
人間の行動で例えてみます。家の中で自分の部屋からリビングへ移動することを考えましょう。
まずは、目をつむって足だけでリビングへ向かってみます。自分の歩幅から、大体今どのあたりを歩いているか感覚的にイメージできると思います。
ある程度歩いたら次に目を開けます。「思ったより進んでいる」とか「思ったより進んでなかった」など、目で回りの状況をみて、地図上の自分の位置を補正します。ROSのodomフレームの誤差を補正する仕組みもざっくり言うとこの仕組みと同じだと考えます。目を使わず足だけで動いている位置がオドメトリ。(odomフレームからみた自分の位置)
目を開けて、回りを見て、自分の位置を補正する。すなわち位置推定アルゴリズム(AMCL等)がズレを補正してくれるような動作。このようにイメージしたらわかりやすいかもしれませんね。

最後に
tfを理解する上で重要な各フレームのつながりについてまとめてみました。
次は各フレームの座標変換について書いてみようと思います。
それでは!
スポンサーリンク


