オドメトリを連結している別の座標系に移す時の座標変換計算(ROS)
概要
下記のようなシチュエーションのオドメトリ変換を考えます。
Bodyに固定したセンサでとったodometryをbase_linkでのオドメトリに変換するのが目的です。 (ROSでよくあるシチュエーションだと思います。)
注意:速度変換の部分に自信がないです。詳しい方訂正・コメントお願いします。
tfを使った解法
ROSを使う人なら位置変換に関しては普通にROSのtfを
/base_link(q_0) -> /sensor_frame(q_0) -> /sensor_frame(q_c) -> /base_link(q_c)
のような感じでつないでlookupTransformで解決すれば位置の変換が取得できるとお思いになるかと思います。 一方で、速度(twist)の解決は私の知る限りサポートされていないように思います。
一応、lookupTwistというのがあるのですがこれはlookupTransformの結果を数値微分しているっぽいのであまり正確な値は期待できません。
また、複数のセンサがある場合などは複数の経路ができてtf treeの構造を壊しかねないのでエスケープのために余計なリンクをたくさん定義することになります。
自分で計算するときの数式
以上の課題を解決するために自分で計算していきます。
位置の変換
同次行列をつないでいけば、base_linkの座標系で見たOdometryのPoseは
で計算できます。これを全て計算すると下記のようになります。
ここで、が可換の時、具体的にはyaw回転しかしない自動車などのアプリケーションでカメラを水平に構えた時などは
とすることができます。
どこかが違うtwistの変換 (Pose変換の微分で解く)
Poseの変換がわかったので上記の式を時刻qで微分することで、Twist変換に変換することができます。(よね?)
なんか上記の仮定が間違っている気がしてきました。 一応途中式は残しておきます。結果が少し異なるのですが何が違うのかちょっと自信がないので
何かがおかしい気がする導出
記述量削減のため と記述することにします。 ここでは角速度で、はその交代行列です。この辺の話は面白いのでぜひ参考文献をご覧あれ。
のみが時変なので微分は下記のように計算できます。
角度の関係は
を解いて
となります。角速度の関係は参考文献[2]からと簡単な形に求まります。
並進速度は下記の感じになります。
また、R_o R_c が可換のケースでは下記のようになります。
並進速度の第一項は回転に伴うモーメントのような項ですね。
twistの変換 (多分こっちが正しい。)
twist(速度・加速度)の変換に自信がなく結構調べたのですが 調べる際によく出る例として下記の質疑があります。参考文献[4]のスライドがいい感じだと思われます。
要約すると座標Aで見た速度を座標A'で見たときにどうなるかを表す式は
とかけるというものです。
自分の変数に書き下すと下記の通りになります。vは並進tを時間微分したものです。
ここで、は角速度ベクトルの交代行列であり、 のように微小回転行列を表せます。 この辺は結構面白いのでリー代数や三次元回転についての記述を参照してください。(参考文献1)
展開すると並進速度は外積の性質などを用いて、
とかけます。
- 導出
導出の元になる数式は下記のようになっています。
角度について展開すると
となります。角速度の関係は参考文献[2]からと簡単な形に求まります。
並進速度は下記のように書けます。
補足
- 交代行列について
の時、
この行列は下記の性質を持ちます。
- の導出
スマートな解釈としては参考文献[3]の式(8)あたりを見てもらうと良いですが、実は以下の2式をゴリゴリ成分計算することでも求まります。
まとめ
ということで機体から の位置に取り付けられたセンサのオドメトリから得られる機体のオドメトリは
で表されます。上から順に計算するなら右側の別解を使ったほうがスムースかと思われます。
なお、回転がYawしかないような特殊ケースでR_o,R_cが可換の場合は
となります。
正直Twistの速度の変換は下記の数式と異なるためどこか間違えている気がしないでもないのでご指摘よろしくおねがいします。
参考文献
フォーマット適当ですが下記の文書が参考になります。
[1] 金谷先生 「3次元回転: パラメータ計算とリー代数による最適化」
[2] 角速度ベクトルと回転行列の時間微分【力学の道具箱】 | スカイ技術研究所ブログ
[3] ベクトルの成分表示と座標変換【力学の道具箱】 | スカイ技術研究所ブログ
[4] http://www.eeci-institute.eu/pdf/M5-textes/M5_slides4.pdf