0. 簡介
視覺里程計最近幾年越來越受到學術界以及工業界的認可,以ORB和VINS為代表的視覺SLAM已經可以滿足絕大多數場景,而OV2SLAM在其他VSLAM中脫穎而出,其實時性以及具體的回環性能在測試中都得到了認可。
1.OV2SLAM與ORB-SLAM2的對比
下圖為OV2SLAM的示意圖
下圖為ORB-SLAM2示意圖
下面是兩個算法的對比
我們從上表中可以看到相比于ORB-SLAM2而言,OV2SLAM有以下四個主要的區別點
1.放棄了ORB算子,采用了LK光流來代替。這樣可以大大的節省前端特征點提取的時間
2.在輸出實時pose的時候,ORBSLAM2精度比OV2SLAM高,相比于ORBSLAM2使用TrackLocalMap來進行motion-only的BA而言,OV2SLAM輸出的實時pose是通過PnP計算出來的。雖然OV2SLAM也有TrackLocalMap,但是他這一步僅進行特征點的re-track, 沒有進行位姿計算。
3.在回環檢測部分ORBSLAM2使用的是DBOW 離線訓練字典,而OV2SLAM使用的是iBowLCD 在線構建字典,這就導致OV2SLAM可以適應更多的場景
4.最后也是最關鍵的就是全局位姿輸出,ORBSLAM2使用的是FullBA 優化來優化全部關鍵幀的位姿和3D點,而OV2SLAM使用的是looselyBA,這個優化方式僅優化當前幀和回環幀關聯的信息。所以使用FullBA 可以影響到包括losselyBA以及其余關鍵幀的pose和3D點。
2 視覺前端
這部分內容其實都大同小異,值得一提的是:
圖像預處理(image pre-processing )關鍵點追蹤(keypoint tracking)離群值濾波(outlier filtering)位姿估計(pose estimation)觸發條件,創建關鍵幀(keyframe creation triggering)
下面我們來簡述一下具體流程:
1.圖像預處理:通過CLAHE進行對比度增強,這既增加了動態范圍,又限制了曝光適應引起的強度變化。
2.關鍵點追蹤:關鍵點跟蹤是通過引導的從粗到精的光流法來執行的。使用具有9×9像素窗口和金字塔比例因子為2的反向組合Lucas-Kanade(LK)算法[12]的金字塔實現來單獨跟蹤關鍵點。
這里提到2D點和3D點這兩種,對于3D關鍵點(即已經三角化的3D關鍵點),會先使用勻速運動模型估計當前幀的初始位姿,然后將3D keyoints對應的3D點投影到當前幀,作為該3D keypoints在當前幀的初始位置。
對于2D關鍵點-即那些沒有關于其真實3D位置的先驗信息的關鍵點,會將其在當前幀的初始位置設置為在上一幀中的位置
3.離群值濾波:采用基于核線約束的RANSAC濾波,使用3D關鍵點估計基礎矩陣(Essential Matrix)然后用它來過濾不一致的2D關鍵點。
4.位姿估計:使用穩健的Huber成本函數最小化3D關鍵點重投影誤差來執行姿態估計,也就是我們上文提到的PnP計算位姿并更新運動模型
5.創建關鍵幀:跟蹤的3D關鍵點的數量w.r.t.。最后一個關鍵幀低于閾值(跟蹤的關鍵點少于85%),或者如果檢測到明顯的視差(平均15個像素的未旋轉關鍵點運動),則會創建新的關鍵幀。
值得一提的是OV2SLAM將每張圖像分為nbwcells*nbhcells個網格,是基于網格的特征提取。每一幀的更新也是只保留了一個指向當前幀的指針pcurframe,用于實時記錄當前幀跟蹤到的2D、3D特征點以及位姿信息。
接受到新圖像時只更新時間戳和幀號,在光流跟蹤以及計算位姿后分別更新當前幀的特征點、位姿信息并更新運動模型。
3. 建圖線程
主要處理兩個任務,負責三角化以及局部地圖的跟蹤,在雙目的配置情況下會增加立體匹配的功能。
3.1 三角化
mapping中的三角化是整個系統中唯一生成3D點的地方,包括初始化成功后的生成初始地圖。三角化的主要功能是在當前關鍵幀與共視關鍵幀之間產生新的地圖點,使得跟蹤更穩。
具體過程為:對于當前關鍵幀中的每一個2D特征點,將當前2D點與第一次觀測到該2D點的關鍵幀中的對應2D點進行三角化。相比ORB-SLAM中將當前關鍵幀與其共視程度最高的20幀至少有15個共視點的相鄰關鍵幀通過詞袋進行特征匹配,再將成功匹配的點對進行三角化的策略,二者的效果有待進一步實驗對比。
下圖為ORB-SLAM的LocalMapping中的三角化搜索范圍。這個操作和ORB-SLAM2類似
3.2 暫時三角化
通常用于單目初始化3D地圖,本文發現在雙目情況下可以用于在當前關鍵幀之前,已經正確追蹤到,但找不到雙目匹配的關鍵點。這時所有成功三角化的地圖點立刻應用于前端進行定位,然后這些3D位置通過BA進行重新優化。
3.3 局部地圖追蹤
類似于ORB-SLAM2局部地圖,局部地圖包括當前關鍵幀或共視圖關鍵幀觀察到的3D地圖點。
局部地圖追蹤的目標是找出屬于局部地圖的3D地圖點是否可以與當前幀的關鍵點相匹配。這種重追蹤的操作可以看做是基本的回環檢測。
任意這樣的3D地圖點,在當前關鍵幀的投影與一個關鍵點的距離少于兩個像素點時被定義為候選匹配。計算3D地圖點和其他幾個候選點的距離,接受最近距離的候選。
4. 狀態估計線程
使用局部BA來精煉已選擇的關鍵幀位姿和3D地圖點位置,此外過濾冗余的關鍵幀來限制外來局部BA的運行時間。
4.1 局部地圖的優化
這里的優化與ORB-SLAM相近,優化當前關鍵幀和與其至少有25個共視點的相鄰關鍵幀的位姿以及這些關鍵幀對應的地圖點的3D坐標,對于那些不在這些關鍵幀范圍內,但是可以觀測到這些地圖點的關鍵幀,也將觀測添加到BA中但是不對這些關鍵幀的位姿進行優化。
4.2 關鍵幀過濾
刪去關鍵幀的標準為:該關鍵幀觀測到的95%3D點已經被至少其他4個關鍵幀觀測到
5. 在線詞袋回環檢測器
回環檢測主要負責檢測回環和重定位,即校正當前姿勢估計和當前幀與已檢測到LC的已傳遞關鍵幀之間的估計軌跡。這是一個重要的創新點。主要流程主要分為關鍵幀預處理、使用iBoW-LCD算法檢測候選關鍵幀、驗證候選關鍵幀、位姿圖優化以及looseBA。
5.1 關鍵幀預處理以及選取候選關鍵幀
作者在論文中提到,出于定位的考慮,OV2SLAM并不會跟蹤太多的特征點(大概只有200多)。在這里為了更新詞袋樹,對每幅圖像額外提取300個FAST特征并計算其描述子,然后將此關鍵幀傳給iBoW-LCD用于更新詞袋樹,當關鍵幀數量大于100幀時,在詞袋樹中查找當前關鍵幀的閉環候選關鍵幀。
5.2 驗證候選關鍵幀
發現一個好的LC候選,首先確定不是一個假陽性。對當前關鍵幀Ki和候選關鍵幀Klc,首先應用一個k最近鄰暴力匹配算法在這兩個關鍵幀的描述子中。
而不明確的匹配首先由經典的ratio test進行過濾。然后使用RANSAC方法進行計算基礎矩陣Essential Matrix 以便只保持滿足極線幾何(對極幾何)的匹配。
使用這種內在維持方法,我們使用P3P-RANSAC方法用回環候選關鍵幀Klc觀測到的剩余3D地圖點對當前關鍵幀Ki進行一個假設位姿計算。
若計算出一個可靠位姿,由大量內參器(inliers)確定,我們得到候選關鍵幀Klc的局部地圖,然后搜索在當前關鍵幀Ki的額外的匹配,將3D地圖點的投影使用P3P的方法計算位姿。
然后,使用等式(1)基于到目前為止發現的所有匹配來精煉假設位姿,并且基于由Huber魯棒成本函數檢測到的離群值來執行最后的過濾步驟。
5.3 位姿圖優化
最終如果保留30個內點,我們驗證回環檢測,并執行位姿圖優化(PGO)來矯正完整軌跡。
目的是將誤差均攤到檢測到的關鍵幀與當前關鍵幀之間的所有關鍵幀之間。
5.4 looseBA
與ORB-SLAM中的fullBA相比,OV2SLAM只對受閉環檢測影響的關鍵幀以及地圖點進行優化,這樣減輕了BA的負擔,但是仍然要花費數秒的時間
6. OV2SLAM總結
OV2SLAM整體精度比ORBSLAM2略微下降,但是速度明顯提升。通過PnP、looselyBA 等方法能夠快速的構建出我們想要的地圖。對于OV2SLAM而言相較于ORBSLAM2增加了異常點剔除、估算位姿準確性等操作。
當然對于ORB-SLAM3來說除了會判斷遠點和近點,遠點只用于優化旋轉,尺度信息只能依靠近點以外,還是用了極大后驗概率(MAP)估計應用于利用幾何BA(光束平差法)最小化特征重投影誤差中。并將歷史數據一起加入約束中一起計算BA。
除此以外,ORB-SLAM3中還提出新的位置識別算法,現在當前候選關鍵幀進行幾何一致性檢測,然后檢測候選關鍵幀與三個共視關鍵幀的局部一致性,以計算成本為代價換來高召回率。
除此以外相較于這兩篇文章,ORB-SLAM3還提出了 ORB-SLAM Atlas,該地圖集提供了ORB-SLAM3的多地圖SLAM特性,ORB-SLAM地圖集中存有一系列非活動的地圖,并且這些地圖可以進行位置識別、相機重定位、回環檢測以及精準的無縫地圖拼接。
7. OV2SLAM 安裝
安裝 OpenGV
git clone https://github.com/laurentkneip/opengv cd opengv mkdir build cd build/ cmake .. sudo make -j4 install
安裝OV2SLAM
xxxxxxxxxx cd ~/catkin_ws/src/ git clone https://github.com/ov2slam/ov2slam.git cd ~/catkin_ws/src/ov2slam chmod +x build_thirdparty.sh ./build_thirdparty.sh cd ~/catkin_ws/src catkin_make --pkg ov2slam
運行 OV2SLAM
xxxxxxxxxx rosrun ov2slam ov2slam_node /home/crp/catkin_ws/src/ov2slam/parameters_files/accurate/euroc/euroc_mono.yaml cd ~/catkin_ws/src/ov2slam rviz -d ov2slam_visualization.rviz rosbag play MH_04_difficult.bag
審核編輯:劉清
-
lcd
+關注
關注
34文章
4411瀏覽量
167082 -
SLAM
+關注
關注
23文章
419瀏覽量
31786 -
RANSAC
+關注
關注
0文章
10瀏覽量
7912 -
orb
+關注
關注
0文章
21瀏覽量
9886
原文標題:經典文獻閱讀之—OV2SLAM(高速視覺slam)
文章出處:【微信號:3D視覺工坊,微信公眾號:3D視覺工坊】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論