1. 程式人生 > >SLAM演算法解析 抓住視覺SLAM難點 瞭解技術發展大趨勢

SLAM演算法解析 抓住視覺SLAM難點 瞭解技術發展大趨勢

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

               

SLAM(Simultaneous Localization and Mapping)是業界公認視覺領域空間定位技術的前沿方向,中文譯名為“同步定位與地圖構建”,它主要用於解決機器人在未知環境運動時的定位和地圖構建問題。本次閱面科技資深研究員趙季也將從SLAM方向著手,為大家展現更深層次的技術乾貨。



趙季:閱面科技資深研究員。2012年獲華中科技大學博士學位,2012年至2014年在CMU機器人研究所做博士後。曾在三星研究院從事深度相機、SLAM、人機互動方面的研究。目前專注於空間感知技術的研發。



目前科技發展速度飛快,想讓使用者在AR/VR、機器人、無人機、無人駕駛領域體驗加強,還是需要更多前沿技術做支援,SLAM就是其中之一。實際上,有人就曾打比方,若是手機離開了WIFI和資料網路,就像無人車和機器人,離開了SLAM一樣。


SLAM主要解決的是相機在空間中的定位、以及建立環境的地圖。在當前比較熱門的一些創業方向中,都可以看到它的身影:


  • 在VR/AR方面,根據SLAM得到地圖和當前視角對疊加虛擬物體做相應渲染,這樣做可以使得疊加的虛擬物體看起來比較真實,沒有違和感。


  • 在無人機領域,可以使用SLAM構建區域性地圖,輔助無人機進行自主避障、規劃路徑。


  • 在無人駕駛方面,可以使用SLAM技術提供視覺里程計功能,然後跟其他的定位方式融合。


  • 機器人定位導航方面,SLAM可以用於生成環境的地圖。基於這個地圖,機器人執行路徑規劃、自主探索、導航等任務。


SLAM技術的發展距今已有30餘年的歷史,涉及的技術領域眾多。由於本身包含許多步驟,每一個步驟均可以使用不同演算法實現,SLAM技術也是機器人和計算機視覺領域的熱門研究方向。

 

SLAM技術大解析


SLAM的英文全程是Simultaneous Localization and Mapping,中文稱作“同時定位與地圖建立”。SLAM試圖解決這樣的問題:一個機器人在未知的環境中運動,如何通過對環境的觀測確定自身的運動軌跡,同時構建出環境的地圖。SLAM技術正是為了實現這個目標涉及到的諸多技術的總和。

 

SLAM技術涵蓋的範圍非常廣,按照不同的感測器、應用場景、核心演算法,SLAM有很多種分類方法。按照感測器的不同,可以分為基於鐳射雷達的 2D/3D SLAM、基於深度相機的RGBD SLAM、基於視覺感測器的visual SLAM(以下簡稱vSLAM)、基於視覺感測器和慣性單元的visual inertial odometry(以下簡稱VIO)。

 

基於鐳射雷達的2D SLAM相對成熟,早在2005年,Sebastian Thrun等人的經典著作《概率機器人學》將2D SLAM研究和總結得非常透徹,基本確定了鐳射雷達SLAM的框架。目前常用的Grid Mapping方法也已經有10餘年的歷史。2016年,Google開源了鐳射雷達SLAM程式Cartographer,可以融合IMU資訊,統一處理2D與3D SLAM 。目前2D SLAM已經成功地應用於掃地機器人中。

 

2006年使用鐳射雷達生成的實驗室地圖

 

基於深度相機的RGBD SLAM過去幾年也發展迅速。自微軟的Kinect推出以來,掀起了一波RGBD SLAM的研究熱潮,短短几年時間內相繼出現了幾種重要演算法,例如KinectFusion、Kintinuous、Voxel Hashing、DynamicFusion等。微軟的Hololens應該集成了RGBD SLAM,在深度感測器可以工作的場合,它可以達到非常好的效果。

 

視覺感測器包括單目相機、雙目相機、魚眼相機等。由於視覺感測器價格便宜,在室內室外均可以使用,因此vSLAM是研究的一大熱點。早期的vSLAM如monoSLAM更多的是延續機器人領域的濾波方法。現在使用更多的是計算機視覺領域的優化方法,具體來說,是運動恢復結構(structure-from-motion)中的光束法平差(bundle adjustment)。在vSLAM中,按照視覺特徵的提取方式,又可以分為特徵法、直接法。當前vSLAM的代表演算法有ORB-SLAM、SVO、DSO等。

 

 

視覺SLAM

 

視覺感測器對於無紋理的區域是沒有辦法工作的。慣性測量單元(IMU)通過內建的陀螺儀和加速度計可以測量角速度和加速度,進而推算相機的姿態,不過推算的姿態存在累計誤差。視覺感測器和IMU存在很大的互補性,因此將二者測量資訊進行融合的VIO也是一個研究熱點。按照資訊融合方式的不同,VIO又可以分為基於濾波的方法、基於優化的方法。VIO的代表演算法有EKF、MSCKF、preintegration、OKVIS等。Google的Tango平板就實現了效果不錯VIO。

 

總的來說,相比於基於鐳射雷達和基於深度相機的SLAM,基於視覺感測器的vSLAM和VIO還不夠成熟,操作比較難,通常需要融合其他感測器或者在一些受控的環境中使用。

 

Visual SLAM為什麼比較難?

 

我們通過分析感測器的測量資訊做個定性的分析。鐳射雷達或者RGBD相機可以直接獲取環境的點雲。對於點雲中的一個點,它告訴我們在某個方位和距離上存在一個障礙點。而視覺感測器獲取的是灰度影象或者彩色影象。對於影象中的一個畫素,它只能告訴我們在某個方位有障礙點、障礙點周圍的表觀(local appearance)如何,但它不能告訴我們這個障礙點的距離。要想計算該點的距離,需要把相機挪動一個位置再對它觀察一次,然後按照三角測量的原理進行推算。

 

原理上很清晰,實際做起來並不簡單。首先需要在兩幅影象中尋找點的對應,這涉及到特徵點的提取和匹配、或者準稠密點之間的匹配。計算機視覺發展到今天,其實還不存在效能和速度上很好滿足vSLAM的特徵提取和匹配演算法。常見的特徵點提取演算法,效能上大致可以認為SIFT>SURF>ORB>FAST,效率上可以認為FAST>ORB>SURF>SIFT(大於號左邊代表更優。效能主要包括匹配精度、特徵點的數量和空間分佈等)。為了在效能和效率上取得折中,通常採用FAST或者ORB,只能捨棄效能更好的SIFT、SURF等。

 

其次,匹配點的影象座標與空間座標之間的關係是非線性的,例如2D-2D點的對應滿足對極幾何、2D-3D點的對應滿足PnP約束。這些匹配數量較多,前後兩幀影象中一般有幾十至數百的匹配。這些匹配會引入眾多約束關係,使得待估計變數的關係錯綜複雜。為了得到一個較優的估計,通常需要建立優化問題,整體優化多個變數。說起來這無非是一個非線性最小二乘優化問題,但實現起來並不簡單,因為存在非線性約束、約束數量很多、存在誤差和野值點,並且要將計算時間控制在允許範圍。目前廣泛採用關鍵幀技術,並且通過很多方法來控制問題規模、保持問題的稀疏性等。

 

非線性優化問題的形象圖示。圓餅代表待優化的變數(相機姿態、特徵點的空間座標),杆子代表約束(對線幾何、PnP等)。

 

前面分析了vSLAM的兩個困難。前者導致了前端的特徵跟蹤不易,後者導致了後端的優化不易。想做出一個高效率、魯棒的vSLAM系統還是一個非常有挑戰的任務。效率方面,SLAM必須是實時執行的。如果不能做到實時,就不能稱作SLAM。不考慮實時性,採用從運動恢復結構(structure-from-motion)效果會更好。魯棒性方面,一個脆弱的系統會導致使用者體驗很差,功能有限。

 

使用structure-from-motion對玲瓏塔進行三維重建

 

vSLAM的核心演算法


預備階段,包括感測器的選型和各種標定。Visual SLAM自PTAM演算法以來,框架基本趨於固定。通常包括3個執行緒,前端tracking執行緒、後端mapping優化執行緒、閉環檢測(loop closure)執行緒。


前端tracking執行緒主要涉及到:


(1) 特徵的提取、特徵的匹配;


(2) 多檢視幾何的知識,包括對極幾何、PnP、剛體運動、李代數等。


後端優化執行緒涉及到非線性最小二乘優化,屬於數值優化的內容。閉環檢測執行緒涉及到地點識別,本質上是影象檢索問題。對於VIO,還涉及到濾波演算法、狀態估計等內容。

 

將SLAM演算法拆解了看,用到的技術是偏傳統的。與當前大熱的深度學習“黑箱模型”不同,SLAM的各個環節基本都是白箱,能夠解釋得非常清楚。但SLAM演算法並不是上述各種演算法的簡單疊加,而是一個系統工程,裡面有很多tradeoff。如果僅僅跑跑開源程式,沒有什麼核心競爭力。不論是做產品還是做學術研究,都應當熟悉各種技術,才能有所創造。

 

SLAM的未來發展趨勢

 

VSLAM的發展感覺是中規中矩,各個環節在前人的基礎上一點點優化,同時不斷吸收其他方向的最新成果。短期內肯定會在現有框架下不停地改進。至於長遠一些的趨勢,IEEE TRO 2016有一篇綜述文章Past, present, and future of SLAM: towards the robust-perception age。幾位有聲望的學者在文中對SLAM的趨勢做了非常好的總結。這裡僅就自己感興趣的點提一些個人感想。

 

新型感測器的出現會不停地為SLAM注入活力。如果我們能夠直接獲取高質量的原始資訊,SLAM的運算壓力就可以減輕很多。舉例來說,近幾年在SLAM中逐漸有使用低功耗、高幀率的event camera(又稱 dynamic vision system, DVS)。如果這類感測器的成本能降下來,會給SLAM的技術格局帶來許多變化。

 

自從深度學習在諸多領域所向披靡,不少研究者試圖用深度學習中end-to-end的思想重構SLAM的流程。目前有些工作試圖把SLAM的某些環節用深度學習代替。不過這些方法沒有體現出壓倒性優勢,傳統的幾何方法依然是主流。在深度學習的熱潮之下,SLAM涉及的各個環節應該會逐漸吸收深度學習的成果,精度和魯棒性也會因此提升。也許將來SLAM的某些環節會整體被深度學習取代,形成一個新的框架。

 

SLAM原本只關注環境的幾何資訊,未來跟語義資訊應該有更多的結合。藉助於深度學習技術,當前的物體檢測、語義分割的技術發展很快,可以從影象中可以獲得豐富的語義資訊。這些語義資訊是可以輔助推斷幾何資訊的,例如已知物體的尺寸就是一個重要的幾何線索。

 

           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述