本博客摘自一篇視覺slam博客,總結高翔視覺slam十四講,記錄以便今後學習用。
原文地址:https://blog.csdn.net/qq_23225073/article/details/78348089
1 關於SLAM
slam問題的本質:對運動主體自身和周圍環境空間不確定性的估計
儘可能使用不依賴於環境的傳感器如laser、imu、camera等,而視覺SLAM主要解決問題是使用相機解決定位和建圖問題
2 關於相機
單目相機(Monocular)
關鍵問題:無法得到深度。
單目slam估計的軌跡和地圖和真實的相差一個尺度因子,也叫尺度不確定性雙目相機(Stereo)
關鍵問題:配置與標定比較複雜,深度量程受雙目的基線和分辨率限制,視差計算量大,需要使用GPU和FPGA加速。深度相機
關鍵問題:測量範圍有限,容易受日光干擾,無法測量透射材質,主要用於室內。
我們之前機器人比賽經常用到kinect和xtion,上面的幾個問題都是常見的,比如測量範圍,比較蛋疼的就是這個,機器人看柱子,最遠的那個有7米遠,kinect就不行了……
3 slam框架
- 傳感器數據
相機圖像信息的讀取和預處理 視覺里程計(VO)
解決問題:估算相鄰圖像間的運動,以及局部地圖的樣子,又稱爲前端。
解決方法:主要進行圖像特徵提取和匹配後端優化(Optimization)
解決問題:處理slam過程中噪聲的問題。從帶有噪聲的數據中估計整個系統的狀態,以及這個狀態估計的不確定性有多大——稱爲最大後驗概率估計(MAP),狀態包括機器人的軌跡和地圖
解決方法:濾波和非線性優化算法迴環檢測(Loop Closure Detection)
解決問題:位置估計隨時間漂移問題,讓機器有識別到過場景的能力。
解決方法:判斷圖像間的相似性建圖(Mapping)
解決問題:構建地圖描述機器人周圍的環境
解決方法: 有多種地圖
附:兩個概念
1 度量地圖(Metric Map)
對定位來說,稀疏地圖就可以了;對導航來說需要稠密地圖
Location—Saprse Map
Navgation—Dense Map, 二維的用Grid表示,三維的用Voxel表示,常見導航算法A*, Dij
2 拓撲地圖(Topollogical Map)
拓撲地圖是一個Graph,由節點和邊組成,只考慮節點之間的連通性。
4 slam問題數學描述
兩個方程,運動方程和觀測方程。
xk=f(xk−1,μk,ω+k)
zk,j=h(yj,xk,vk,j)
已知量:
運動測量讀數
傳感器讀數 z
求解量:
定位問題x
建圖問題y
這是一個狀態估計問題——如何通過帶噪聲的數據估計內部的隱藏的狀態變量。
按照運動和觀測方程是否線性和噪聲是否服從高斯分佈分爲四類
線性/非線性,高斯/非高斯
其中
- 線性高斯系統(Linear Gaussian–LG)
最簡單,無偏最優估計使用KF解決 - 非線性非高斯系統(NLNG)
可以用濾波器(EKF、Particle Filter)和非線性優化(圖優化Graph Optimization)兩種方法