3次元相似変換(Exponential Map)の実装
Visual SLAMでは、スケールの不定性があるため、スケールドリフトと呼ばれる問題が生じ、Loop Closureなどで蓄積誤差を解消するにあたって3次元の剛体変換ではうまく補正できない場合がある。このような場合に、3次元相似変換Sim3を用いて補正を行う方法が提案されている。 Scale Drift-Aware Large Scale Monocular SLAM http://roboticsproceedings.org/rss06/p10.pdf Sim3のExponential Mapは上記論文や以下の記事を参照してください。(書くのが面倒なので。。。) Sim(3) optimization の exponential map を計算してみた 3次元の相似変換では以下のように回転成分にスケール要素が掛かった形になる。 ここで、exp Sim(3) 、exp SO(3) はそれぞれSim(3)、SO(3)のExponential Mapを表す。 W の中身については、論文や上記記事を参照してください。 Sophusを用いた実装例は、以下のようになる。 #include <iostream> #include "sophus/sim3.hpp" #include "sophus/geometry.hpp" int main() { // 単位行列 Sophus::Sim3d T0; std::cout << "T0:" << std::endl; std::cout << T0.matrix() << std::endl; // 7次元のパラメータベクトル Sophus::Vector7d uws; uws << 10.0, 0.0, 0.0, Sophus::Constants ::pi(), 0.0, 0.0, 0.0; Sophus::Sim3d T1 = Sophus::Sim3d::exp(uws); // スケーリング double scale = 2.0; T1.setScale(scale); std::cout ...