1. 程式人生 > >視覺SLAM算法框架解析(3) SVO

視覺SLAM算法框架解析(3) SVO

warp 最大的 重定位 版權 bubuko mon b- dom 策略

  版權聲明:本文為博主原創文章,未經博主允許不得轉載。

  SVO(Semi-direct Visual Odometry)[1]顧名思義是一套視覺裏程計(VO)算法。相比於ORB-SLAM,它省去了回環檢測和重定位的功能,不追求建立、維護一個全局地圖,更看重tracking的效果,追求高計算速度、低CPU占用率,所以SVO非常適合在計算資源有限的移動設備上使用。SVO對PTAM的改進主要在兩個方面:1)高效的特征匹配;2)魯棒的深度濾波器。SVO比PTAM、ORB-SLAM計算速度快很多的最主要原因是SVO不需要每一幀都提取特征點。在tracking線程,當前幀的特征點是從上一幀用光流法傳遞到過來的,只有在mapping線程插入新關鍵幀時才需要提取特征點。另一個原因是SVO使用了深度濾波器,PTAM和ORB-SLAM只用兩幀圖像三角化出地圖點,只要地圖點沒有被判定為外點,就固定不變了(除非BA階段調整),而SVO的深度濾波器會根據多幀圖片不斷收斂地圖點的不確定度,從而得到更可靠的地圖點。因為地圖點更可靠,所以SVO只需要維護更少的地圖點(PTAM一般維護約160到220個特征點,SVO在fast模式下維護約120個地圖點),從而加快了計算速度。

技術分享圖片

  在tracking線程,SVO綜合了直接法和特征點法的優點設計了全新的三步策略。第一步(Sparse Model-based Image Alignment),用Lucas-Kanade光流法粗算當前幀的位置姿態。具體方法是:把前一幀對應的地圖點投影到當前幀(初始位置姿態為單位陣),比較前一幀特征點和當前幀投影點附近區域(patch)像素灰度值的差別,通過最小化photometric error求解當前幀的位置姿態。由於這一步是粗算,為了加快計算速度,patch選取了4*4的大小,並且沒有做仿射變換(affine warp)。第二步(Feature Alignment),求出特征點在當前幀的精確像素坐標。對於每個特征點單獨考慮,找到和當前幀視角最接近的共視關鍵幀(這個關鍵幀和當前幀的視角差別越小,patch的形變越小,越可以更精準地匹配),然後再次用Lucas-Kanade光流法最小化photometric error。相比於第一步的粗測,這一步選取了8*8的patch,並且做仿射變換,可以得到亞像素級別的精度。第三步(Pose & Structure Refinement),通過前兩步找到精確的匹配點之後,可以通過最小化重投影誤差進一步優化相機姿態以及地圖點位置(這一步就和patch無關了,地圖點和投影點都是點,cost function是點到點的距離),這一步又分成三小步:1)Motion-only BA,地圖點不變,只優化當前幀位置姿態。2)Strcture-only BA,當前幀不動,只優化地圖點位置。3)Local BA,附近關鍵幀和可見的地圖點都被優化了,這一小步在fast模式下是不做的。

  SVO之所以叫半直接法(Semi-direct)就是因為前兩步估計策略像直接法(LSD-SLAM、DSO為代表)一樣最小化photometric error,而第三步則和特征點法(PTAM、ORB-SLAM為代表)一樣最小化重投影誤差。如果省略第一步,直接從第二步開始計算會更耗時,因為為了匹配遠距離的特征點需要把patch設置得很大,而且會需要剔除外點。而如果省略第二步和第三步則會產生嚴重的累積漂移,因為第一步只是考慮前後幀,而第三步把當前幀和關鍵幀、地圖點對齊了。

  在mapping線程,SVO首先判定當前幀是否是關鍵幀(追蹤成功的特征點數量是否少於一個閾值就插入新關鍵幀),如果是,則提取特征點、初始化深度濾波器;如果不是,則更新深度濾波器看它是否收斂,如果收斂,則生成新的地圖點輔助tracking線程計算。SVO提取特征點的方式和ORB-SLAM類似,也是先構造金字塔,再劃分網格提取最顯著的FAST特征(如果提取不到足夠顯著的FAST角點,SVO2.0[2]會找梯度值最大的像素作為edgelet特征點,它和普通FAST角點在計算中的唯一差別是:在tracking線程的第二步feature alignment階段,edgelet只沿梯度方向優化)。每個特征點有一個單獨的深度濾波器,深度值被設定為高斯分布與均勻分布的加權和(作者論證了這種假設比單一高斯分布要好),高斯分布描述內點的分布,均勻分布描述外點的分布。深度值濾波器在初始化時,不確定度是很大的(如果是stereo或者RGBD相機可以直接給出接近真值的初值,深度濾波器會收斂的更快),之後每計算出新一幀的位置姿態,都可以根據幾何約束沿著極線找特征點匹配,然後根據三角測量的原理得到不確定度更小的後驗深度值。當不確定度小於一個閾值,這個地圖點就會被建立。地圖點立即就會被用來估計運動。

參考文獻:

[1] Forster C, Pizzoli M, Scaramuzza D. SVO: Fast semi-direct monocular visual odometry[C]// IEEE International Conference on Robotics and Automation. IEEE, 2014:15-22.

[2] Forster C, Zhang Z, Gassner M, et al. SVO: Semidirect Visual Odometry for Monocular and Multicamera Systems[J]. IEEE Transactions on Robotics, 2017, 33(2):249-265.

[2] George Vogiatzis, Carlos Hernández. Video-based, real-time multi-view stereo ☆, ☆☆[J]. Image & Vision Computing, 2011, 29(7):434-441.

視覺SLAM算法框架解析(3) SVO