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