Introduction
-
リアルタイムのSLAMアルゴリズムを実現するには
- 選択したキーフレーム間の特徴点(マップ点)の観測情報の一致させる
- キーフレームの数が増えて複雑性が増していくにつれて、不必要な冗長性を回避すべき
- 十分な視差があり、ループクローズに十分な対応関係を持った広いキーフレーム群
- 非線形最適化のためのキーフレームの位置姿勢と特徴点の位置の初期推定
- スケーラビリティを実現するためにローカルマップで最適化を行う
- リアルタイムでループをクローズするための素早い全体最適化(ポーズグラフ最適化など)
-
contribution
- 視点変化、照度変化に対して不変のORB特徴量を用いており、GPUなしでのリアルタイム処理が可能
- ローカルのcovisibleマップを使うことにより、全体のマップサイズとは独立してトラッキングとマッピングをすることができる
- Essential Graphを基に行うポーズグラフ最適化に基づいたリアルタイムなループクローズ処理
- 視点変化、照度変化に頑健なカメラリローカライズ、トラッキングに失敗したときやマップを再利用する際に復帰することができる
- 自動の初期化処理
- 冗長なキーフレーム削除によるトラッキングのロバスト性向上、lifelongな操作を可能にする
Related Work
- ORB特徴量を使って、DBoW2により画像間のマッチングをする
- Bag of Wordsを利用
- トラッキングとマッピングと同じ特徴点でPlaceRecognitionをしている
- キーフレームは素早く追加して、後で削除するという思想
System OVerview
-
トラッキング、マッピング、ループクローズ、リローカライズに全て同じ特徴点を使っているのが強み
-
ORBはSIFTとかに比べて早いし、視点変化にも強いから、場所認識にも強い。
-
トラッキングはカメラの位置決めと、新しいキーフレームの追加のタイミングを決定する。
-
ローカルマッピングスレッドは、冗長キーフレーム削除の役割を担っている。
-
ループクローズスレッドでは、新しいキーフレームを追加するたびに類似キーフレームを探し、見つかったら、ループを閉じ、同じ点同士はマージする
-
ループクローズのポーズグラフ最適化をessential graphを使ってやっているのが新しい
-
マップ点の持つ情報
- 三次元座標
- 各観測キーフレームの観測方向の平均の単位ベクトル(キーフレームの光軸中心とマップ点を結ぶベクトルの平均)
- 観測されている他のすべてのdescriptorとのハミング距離が最小となるORB descriptor
- 点が観測される距離の最大値と最小値
-
キーフレームが持つ情報
- カメラの位置姿勢
- カメラ内部パラメータ
- フレーム内で検出されたORB特徴点(マップ点であるかどうかに関わらず)歪みモデルが与えられてたら、歪み補正後の座標を格納
-
covisibility Graph
- 15点以上特徴点を共有してるとキーフレーム間にエッジを張る
- 共有特徴点数がエッジの重みになる
-
essential graph
- covisibility graphはとても密なので、エッジを減らしたグラフ。ただ、正確な結果を得るための強いネットワークは保持している。全てのノード(キーフレーム)を含む
- spanning treeで構成され、高い共有特徴点数(最小100点)。
-
map initialization
- 平面のシーンなら、ホモグラフィーで推定、そうでなければ、基礎行列で推定
- どっちのモデルで推定するかは、インライアの割合を見て決定。
- 十分な示唆が得られるまで初期化しない。これにより初期化の安定性を増している。
-
track local map
- マップ点を現在のフレームに追加
- マップ点を現在フレームに投影する(画像外なら無視する)
- マップ点の持つ視線ベクトルと現在フレームのマップ点を見る視線ベクトルの角度が60度以内
- カメラからの距離が閾値の範囲内
- 投影した先の近くでORBのdescriptorが1番マッチするところ
- マップ点を現在のフレームに追加
-
キーフレームの追加条件
- 最後のリローカライズから20フレーム以上経過
- ローカルマッピングがアイドル状態、最後のキーフレーム追加から20フレーム以上経過
- 現在フレームが50点以上トラッキングしている
- 参照キーフレームよりもトラッキングしている特徴点数が90%以下