2017/07/08

ORB-SLAMの特徴

こんにちは!

以前実装したORB-SLAMについて,どんなSLAMか軽く説明したいと思います!!


ORB-SLAMとは特徴ベースのSLAMに関する技術をいろいろ突っ込んだらよくなったぞというSLAMです.

画像から特徴的な点(色の変化が激しいなど)を特徴点検出を用いて抽出し,マップにはり付けたり,自己位置推定に使うのが特徴ベースのSLAM.代表的なのはORB-SLAMとかPTAM(下動画がPTAM).


対するのがdirect SLAMで,輝度を直接用いるvisual SLAM.代表的なのはLSD-SLAMとかDTAM(下動画がDTAM).



で!!特徴ベースのvisual SLAMが従来主だったんだけど!だんだんdirectなSLAMが性能がいいことがわかってきて発展してくる!
ここでORB-SLAMはいやいや,特徴ベースSLAMもまだまだ性能いいぞ!!って示してくれた

BA(Bundle Adjustment)が使えるから誤差を吸収できるし,特徴量を使うという性質から回転や光の変化,動的物体などにある程度強くなるし,Loop Closing(リンク先参考)のためにDirectな手法でも特徴点を用いているから効率悪いし!!特徴ベースSLAMもすごいぞって!!

で,どうやって性能をよくしているかなんだけど!
PTAMをメインに,ORB-SLAMオリジナルの考え方に加え,PTAM以降発展した特徴ベースのSLAMの技術をいろいろ入れた感じ!!

まず!ORB-SLAMの基本としてはPTAMの流れを汲んでいるvisual SLAMである!

よって
.MappingとTrackingが並列して行われる
.BAをリアルタイムで行う
ということが基本です.

さらに,PTAMの応用として,
・特徴点の選び方は比較的高速なFASTを使う.
・FASTで見つけた特徴点はロバストさと高速さのバランスの良いORB特徴量で表現する.「Rubbleらの手法」
・DBoW2というLoop Closing(リンク先参考)を採用し,ロバスト性アップ【Galvez-Lopez and Tardosらの手法】
・BAは実装がしやすいg2oフレームワークを用いる.「Kuemmerleらの手法」
・Covisibility graphの採用により,Loop Closingの検出後,その効果をうまく伝搬できる「Strasdらの手法」

さらにORB-SLAMでオリジナルなのは!
1. キーフレームは適者生存戦略をとる.キーフレームを多めにとることで局所的に精度の良い自己位置推定を行い,あとから余計なキーフレームを削除する.
2.初期化を自動で行う

結果として汎用性のすごく高いvisual SLAMとなる!


ちょっと詳しめに話してみます.英語得意じゃないので間違ってても勘弁.

全体のアルゴリズムは以下になります.

[引用]R. Mur-Artal, J. M. M. Montiel, and J. D. Tardos, "ORB-SLAM: a versatile and accurate monocular SLAM system." arXiv preprint arXiv:1502.00956, pp.1-15, 2015.


MAPの表現方法


マップはキーフレームに含まれる特徴点の集合であらわされるが,各キーフレームは本手法ではCovisivility graphで結ばれる.Covisibility graphの各ノードはキーフレームを示し,各エッジは同じマッピングポイントを共有するキーフレームを結ぶ.
各エッジは共有するマッピングポイント数の重みをもつ.

また,Essential graphもこの時構成する.これは,Covisibility graphの中でも特に重みの大きいエッジを残し,loop closingするキーフレーム同士でエッジを結んだものである.
この時重みは撤廃する.

初期化では

Two-Viewの局所的平面から推定【射影変換】
Two-Viewで非平面を用いる【基礎行列】
という2手法が主に考えられるが,ヒューリスティックにどちらの手法が有効かを自動で計算する.計算した後BAを適用することで,初期MAP,初期カメラ姿勢が決定される.


Trackingスレッドでは

毎フレームのカメラとの相対姿勢推定+キーフレーム挿入判定を行います.

カメラから画像が入ってきたら,FASTで特徴点を抽出した後,それぞれの特徴点にORB特徴量を割り当てます.
ORB特徴量の値が近い特徴点同士は,同じ場所を表している可能性が高いです.
ORB特徴量は数ある特徴点の中でも比較的高速かつ回転,スケール変化に強い特徴量です.

前フレームでロストしてないなら
前フレームから現在フレームまでの等速運動モデルを想定しカメラ位置の初期値決定⇒
初期値を用いて前フレームと現在フレームの画像マッチング(2画像間で対応する特徴点はどこか)を行い位置関係を算出⇒
現在カメラの姿勢推定

前フレームでロストしているなら
現在フレームと今まで見たことのあるキーフレームとの位置関係をbag-of-wordsでチェックし,マッチングをとることができたら姿勢推定

を行う

次に,ローカルマップ(局所的なマップ)の特徴点を現フレームに投影しマッチングし姿勢推定⇒Local BA(Huber Cost 関数)⇒KF判断(甘く判断)を行います.

Local Mapping スレッドでは

新しいKFの処理+Local BAを行う.

キーフレームが入力されたらCovisibility graphおよびEssential MAPをアップデートした後,余計なマップポイントを削除します.

さらに入力されたフレームとcovisibility graphで近いフレームにおいてマッチするORB特徴を探し,三角法的に配置します.そしてLocal BAを行い,最後に冗長なKF削除

Loop Closing Threadでは

KFとKFのデータベースを照会し,一致するならばそれを結び,essential graphに沿って最適化


この後も研究が続けられ,
ORB-SLAM2(stereoカメラ,RGB-Dカメラ対応ORB-SLAM)
や,ORB-SLAMの疎なマップを半密に拡張する手法も開発された.



難しくなって申し訳ないです!&どっか間違っていたらすみません!

以上です!また!!

0 件のコメント:

コメントを投稿