Place Recognition and Loop Closure
Place Recognition は、現在の observation が過去に訪れた場所と同じ場所かどうかを判定する task です。Loop Closure は、その判定を使って SLAM の累積誤差を修正する処理です。
なぜ必要か
Visual Odometry や SLAM では、frame 間の motion estimation を積み重ねるため、時間とともに drift が蓄積します。Robot が以前訪れた場所へ戻ったときに loop closure を検出できれば、trajectory と map 全体を修正できます。
Place recognition
Place recognition では、現在 frame または local map を database と照合し、過去の keyframe と似ているかを判定します。代表的な approach は次の通りです。
- Bag-of-Visual-Words による image retrieval
- Global descriptor による nearest-neighbor search
- Learned descriptor による visual place recognition
- LiDAR scan context のような scan descriptor
ORB-SLAM では、ORB feature に基づく bag-of-words database が loop candidate 検出に使われます。
Loop closure verification
Place recognition の候補には false positive が含まれるため、幾何学的 verification が必要です。候補 keyframe との feature matching、essential matrix、PnP、Sim(3) estimation などで整合性を確認します。
Monocular SLAM では scale drift が起こるため、similarity transform による alignment が重要になることがあります。
Pose graph optimization
Loop closure が確認されると、pose graph に loop constraint を追加し、global optimization を行います。これにより、trajectory 全体の drift が分散・修正され、map の一貫性が改善します。
難しいケース
- Perceptual aliasing: 違う場所が似て見える場合
- Appearance change: 照明、季節、天候、時間帯の変化
- Dynamic object
- Long-term operation による scene change
- Large viewpoint change
関連ページ
主なソース
- ORB-SLAM paper: https://arxiv.org/abs/1502.00956
- DBoW2 library: https://github.com/dorian3d/DBoW2
- NetVLAD paper: https://arxiv.org/abs/1511.07247
- Cadena et al., “Past, Present, and Future of SLAM”: https://arxiv.org/abs/1606.05830