前言
單目視覺SLAM可以根據其前端視覺里程計或是后端優化的具體實現算法進行分類:前端可以分為特征點法與直接法,后端可以分為基於濾波器和基於非線性優化。其中在后端上目前已經公認基於非線性優化的方法在同等計算量的情況下,比濾波器能取得更好的結果。而前端的兩種方法則各有優劣。
本文將具體分析直接法相較於特征點法的優劣處,並具體介紹目前主流的開源方案,以供大家參考。
直接法與特征點法的對比
“ 直接法最大的貢獻在於,以更整體、更優雅的方式處理了數據關聯問題。特征點法需要依賴重復性較強的特征提取器,以及正確的特征匹配,才能得正確地計算相機運動。而直接法,則並不要求一一對應的匹配,只要先前的點在當前圖像當中具有合理的投影殘差,我們就認為這次投影是成功的。而成功與否,主要取決於我們對地圖點深度以及相機位姿的判斷,並不在於圖像局部看起來是什么樣子。”
優勢:
1)節省特征提取與匹配的大量時間,易於移植到嵌入式系統中,以及與IMU進行融合;
2)使用的是像素梯度而不必是角點,可以在特征缺失的場合使用,如環境中存在許多重復紋理或是缺乏角點,但出現許多邊緣或光線變量不明顯區域;
3)可以進行稠密或半稠密的地圖重建;
劣勢:
1)灰度不變是一個強假設,難以滿足(易受曝光和模糊影像);
2)單像素區沒有區分度,需要計算圖像塊或是相關性;
3)直接法成功的前提,是目標函數從初始值到最優值之間一直是下降的,然而圖像非凸。因此需要有一個相當不錯的初始估計,還需要一個質量較好的圖像;
4)難以實現地圖復用、回環檢測、丟失后的重定位等:除非存儲所有的關鍵幀圖像,否則很難利用先前建好的地圖;即使有辦法存儲所有關鍵幀的圖像,那么在重用地圖時,我們還需要對位姿有一個比較准確的初始估計——這通常是困難的。
數據關聯和位姿估計,在直接法中是耦合的,而在特征點法中則是解耦的。耦合的好處,在於能夠更整體性地處理數據關聯;而解耦的好處,在於能夠在位姿不確定的情況下,僅利用圖像信息去解數據關聯問題。所以直接法理應更擅長求解連續圖像的定位,而特征點法則更適合回環檢測與重定位。此外,稀疏直接法更適用於實時性較高而計算資源有限的場合。
常用開源方案對比
MonoSLAM
2007年提出,是第一個實時單目SLAM系統。
前端:追蹤非常稀疏的特征點(Shi-Tomasi角點);
后端:擴展卡爾曼濾波,以相機當前狀態和所有路標點為狀態量,更新其均值和方差。
缺點:應用場景很窄;路標數量有限;稀疏特征點容易丟失;存在EKF所存在的局限性。
PTAM
2007年 Parallel Tracking and Mapping
前端線程(Tracking):通過勻速運動模型預測當前幀方位,搜索FAST角點,並根據匹配關系優化幀方位,若跟蹤失敗開始重定位,跟蹤成功則判斷是否滿足關鍵幀條件。
后端線程(Mapping):沿極線匹配不同關鍵幀之間的圖像特征點,通過三角化恢復三維位置,並對所有關鍵幀和三維點運行BA。
特點:
1、提出並實現了跟蹤和建圖過程的並行化,首次區分出前后端的概念。
2、第一個使用非線性優化,引入了關鍵幀機制:把幾個關鍵圖像串起來,然后優化其軌跡和地圖。
3、PTAM同時是一個增強現實軟件:根據估計的相機位姿,可以在虛擬的平面上放置虛擬物體。
缺點:場景小,跟蹤容易丟失。
ORB-SLAM
2015年提出。
關於ORB-SLAM更多的分析將單獨開一個博客來討論。
三線程的SLAM方案:
Tracking線程:對新來的圖像提取ORB特征點,並與最近的關鍵幀進行比較,計算特征點的位置並粗略估計相機位姿;
Local Mapping線程:求解BA問題,包括局部空間內的特征點和相機位姿;
Loop Closing (and Full BA)線程:對全局的地圖與關鍵幀進行回環檢測,消除累計誤差,優化只有相機位姿組成的位姿圖。
特點:
1、支持單目、雙目、RGBD,具有良好的泛用性;
2、ORB特征:不像SIFT和SURF那樣費時,相比Harris角點又具有良好的旋轉和縮放不變性;ORB提供描述子,在大范圍運動時能進行回環檢測和重定位;
3、單目具有自動選擇系統初始化方案:基於對極幾何還是基於單應性;雙目和RGBD的初始化很快,且原地不動就能完成
4、關鍵幀的選取:先用寬松的判斷條件加入新的關鍵幀和三維點以保證后續幀的魯邦跟蹤,再刪除冗余關鍵幀和不穩定三維點以保證BA效率和精度。
5、回環檢測防止累計誤差。在運行前必須加載一個很大的ORB字典文件;
優點:
1、在靜態環境下定位准確,系統非常穩定, 單目和雙目版本都可以達到實時;
2、代碼可讀性強,易擴展, 網上也有實現和imu融合的版本。
缺點:
1、計算ORB特征耗時,三線程結構,cpu消耗大,難以移植到嵌入式設備;
2、稀疏特征點地圖;
3、對動態物體很敏感,有動態物體時非常容易跟蹤失敗;
4、純旋轉也容易丟失。
LSD-SLAM
2014年 Large Scale Direct monocular SLAM
將直接法應用到了半稠密的單目SLAM中
1、提出了地圖梯度與直接法的關系,以及像素梯度與極線方向在稠密重建中的角度關系;
2、在CPU上實現了實時半稠密場景的重建;
3、具有回環檢測功能;
4、一些技巧保證追蹤的實時性與穩定性:
在極線上等距離取5個點,度量其SSD;深度估計時,首先用隨機數初始化深度,在估計完后又把深度均值歸一化以調整尺度;度量深度不確定性時,不僅考慮三角化的幾何關系,還考慮了極線與深度的夾角,歸納成一個光度不確定項;關鍵幀之間的約束使用了相似變換群及與之對應的李代數顯式表達出尺度,在后端優化中可以將不同的尺度的場景考慮進來,減小尺度漂移現象。
缺點:
1、對相機內參和曝光非常敏感
2、在相機快速運動時容易丟失
3、依賴於特征點的方法進行回環檢測
SVO
2014年 Semi-direct Visual Odemetry
基於稀疏直接法的視覺里程計:
SVO跟蹤了一些關鍵點(角點),然后像直接法那樣根據關鍵點周圍的信息(4*4小塊進行塊匹配)估計相機運動及其位置 。
優點:
1、速度極快,適用於計算平台受限的場合
2、提出了深度濾波器的概念,推導了基於均勻-高斯混合分布的深度濾波器,用於關鍵點的位置估計,並使用了逆深度作為參數化形式。
缺點:
1、誤差大,不准確
2、目標應用平台為無人機,相機運動主要為水平和上下移動,在平視相機中表現不佳。如單目初始化時使用了分解H矩陣,需要假設特征點位於平面上;在關鍵幀選擇時,使用了平移量作為確定新的關鍵幀的策略,而沒有考慮旋轉量。
3、舍棄了后端優化和回環檢測功能,沒有建圖功能。
DSO
2016年 DSO(Direct Sparse Odometry)
慕尼黑工業大學(TUM)計算機視覺實驗室發布的一個稀疏直接法的視覺里程計。
后端使用一個由若干個關鍵幀組成的滑動窗口。除了維護這個窗口中的關鍵幀與地圖點外,還會維護與優化相關的結構。特別地,這里指Gauss-Newton或Levenburg-Marquardt方法中的Hessian矩陣和b向量(僅先驗部分)。
提出了光度標定,認為對相機的曝光時間、暗角、伽馬響應等參數進行標定后,能夠讓直接法更加魯棒。對於未進行光度標定的相機,DSO也會在優化中動態估計光度參數。
優點:可以生成相當稠密的點雲,速度在正常運行的時候很快
缺點:
1、對場景光照要求高,要求盡量保持曝光時間的穩定
2、不是個完整的SLAM,它沒有回環檢測、地圖重用、丟失后的重定位。
3、初始化部分也比較慢,當然雙目或RGBD相機會容易很多。
4、代碼可擴展性比較差
DSO在准確性,穩定性和速度上都比LSD好。LSD的優勢在於回環檢測。
參考
1、劉浩敏 , 章國鋒、鮑虎軍. 基於單目視覺的同時定位與地圖構建方法綜述
2、高翔《視覺SLAM十四講》
3、高翔的知乎文章《DSO詳解》
原文鏈接:https://blog.csdn.net/qq_41839222/java/article/details/86483071