概念
視覺SLAM(Simultaneous Localization and Mapping)系統中,整個過程通常分為 前端 和 后端 兩個主要部分。前端處理的是從傳感器數據(如相機圖像、激光雷達等)中提取和處理信息,用于實時定位和建圖,而后端則負責全局優化、地圖生成和精確化。
SLAM前端
前端的核心任務是處理傳感器數據(如圖像、IMU等)并生成與位姿相關的局部信息。主要包括 特征提取、匹配、位姿估計 和 局部優化。
前端 有時被稱為 視覺里程計(Visual Odometry,VO)。在 視覺SLAM 系統中,前端的任務通常包括 從相機圖像中估計相機的相對運動,這正是視覺里程計的核心任務。
1.1 視覺里程計(VO):
視覺里程計是指通過連續的圖像序列來估計相機的 相對運動(即位移和旋轉)。它只關注相機的運動估計,而不依賴于全局地圖或回環檢測,通常用于短期、局部的運動估計。是前端的一部分,負責估計相機的相對運動。
前端除了執行視覺里程計(估計相機相對運動)外,還會進行一些其他任務,例如:特征提取與匹配、位姿估計(通過方法如PNP等)、局部地圖構建(局部優化),滑動窗口優化等。
步驟
- 傳感器數據預處理
點云濾波:點云數據通常包含噪聲和離群點,需要通過濾波方法進行清理。常見的濾波方法包括統計濾波(Statistical Outlier Removal)、體素濾波(Voxel Grid Filter)、直通濾波(Pass-through Filter)等。濾波之后還會進行點云平滑(沖裁樣)
圖像預處理:對于視覺SLAM,圖像的預處理包括去畸變、灰度化、降噪等操作。
利用圖像生成點云的代碼:可以看我這篇文章 點云濾波與重采樣可以看這篇文章
1.1 特征提取
關鍵點檢測:從圖像中提取關鍵點(如角點、邊緣、特征點等),常見的算法包括 SIFT、SURF、ORB、FAST、BRIEF 等。
特征描述符生成:為每個關鍵點生成描述符(特征向量),描述符用于匹配不同視角下的相同物理點。常見的描述符有 ORB、BRIEF 等。
1.2 特征匹配
局部匹配(粗匹配):通過描述符,在不同時間的圖像中找到相同或相似的特征點。例如,通過 暴力匹配(Brute-Force) 或 FLANN(Fast Library for Approximate Nearest Neighbors) 來匹配特征點。
精匹配:如ICP
外點剔除:使用 RANSAC 算法去除錯誤匹配點(外點),確保匹配點的準確性。
1.3 位姿估計
PnP (Perspective-n-Point):根據已知的3D點和其在圖像中的投影,估計相機的旋轉和位移,進而求得相機的 位姿(位置與朝向)。常用的方法包括 EPnP、UPnP。
光流法(Optical Flow):通過估計像素點在連續圖像幀之間的運動,來計算相機的相對位姿。
1.4 局部地圖構建
將多幀點云數據融合到一個統一的坐標系中,形成完整的環境地圖。
局部優化:根據前端估計的相機位姿,進行局部地圖的更新。通過 局部地圖(如特征點、深度圖、關鍵幀等)來幫助改進定位精度。
1.5 滑動窗口優化(Sliding Window Optimization)
滑動窗口:為了保持實時性,通常只處理一小部分最近的幀(例如,前幾幀或一段時間的幀)。滑動窗口優化能夠減少計算負擔,同時保證定位精度。
局部一致性:前端會維持一個 滑動窗口,隨著新幀的加入,窗口中只保留當前的幾幀,這樣能夠在局部范圍內進行優化,使得前端的估計更加精確。
SLAM后端
后端主要負責全局優化,包括 回環檢測、全局圖優化 和 地圖精細化。它主要是處理前端產生的數據,通過全局優化來糾正位姿的漂移和誤差。
2.0 多傳感器融合
IMU與視覺數據融合:通過時間戳對齊和姿態對齊(如四元數插值)將IMU數據與視覺數據融合,以提高定位精度
2.1 回環檢測(Loop Closure Detection)
回環檢測:當機器人回到已知的位置時,后端需要檢測到這個回環(即,識別該位置已經被之前的幀訪問過)。這有助于減少累積誤差,恢復全局一致性。
方法:常用的回環檢測算法包括基于 Bag of Words 的方法、 FabMap、 ORB-SLAM 的回環檢測等。
2.2 圖優化(Graph Optimization)
圖模型:后端通過構建 圖優化模型,將機器人位姿和地標視為圖的節點,而它們之間的相對約束(如運動約束、觀測約束)則是圖中的邊。圖的邊通常對應前端得到的相對位姿、地標觀測等約束。
非線性優化:使用 非線性最小二乘法 或 Levenberg-Marquardt 算法來優化圖中節點的位置,最小化邊約束的誤差。常見的優化框架包括 g2o、Ceres Solver。
2.3 地圖優化
地圖更新:后端根據優化后的位姿和地圖信息來更新全局地圖。隨著回環檢測的成功,地圖會得到糾正和優化。
圖優化:地圖的精細化不僅包括位姿優化,還包括 地標位置 的優化和重定位,確保整個地圖的一致性和精確度。 如Bundle Adjustment 方法,見文章中的代碼部分
2.4 姿態修正與全局一致性
姿態校正:由于前端的累積誤差,后端的全局優化會對機器人的姿態進行修正,確保地圖和軌跡的準確性。
全局一致性:圖優化后的結果不僅能修正回環檢測引入的誤差,還能確保地圖在全球范圍內的一致性。
2.5 地圖構建與精細化
地圖生成:通過前端和后端的共同工作,最終生成的地圖包含了機器人的位姿軌跡以及環境中的特征點或地標。
稀疏/密集地圖:根據所使用的算法和傳感器類型,地圖可以是 稀疏地圖(由特征點組成)或 密集地圖(如通過深度圖或語義分割得到的更豐富的地圖數據)。
前端與后端的協同工作
前端的作用:實時獲取傳感器數據,估計局部的位姿變化,并不斷更新局部地圖。前端通常依賴于滑動窗口優化、特征匹配和位姿估計,保證實時性和定位精度。
后端的作用:對前端的輸出進行全局優化,確保全局軌跡的一致性和精確性,尤其是在回環檢測和圖優化過程中,解決長期累積的誤差問題。
視覺SLAM的典型系統架構
ORB-SLAM:一個經典的視覺SLAM系統,使用 ORB 特征進行匹配,支持回環檢測和圖優化,適用于大規模的環境。
LSD-SLAM:密集SLAM系統,基于直接法(不依賴特征提取和匹配),直接使用圖像的像素強度進行位姿估計和地圖構建。
VINS-Mono:一個基于單目相機和IMU的視覺慣性SLAM系統,結合了視覺和慣性傳感器的數據進行位姿估計。