Skip to main content

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 Sim(3)\text{Sim}(3) による 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

関連ページ​

主なソース​