slam的優化後端完成工作主要是對視覺前端得到的不夠準確的相機位姿和重建地圖進行優化微調。在視覺前端中,不管是進行位姿估計還是建圖,都是利用相鄰幀之間的關係來完成的,這種依賴區域性約束且不停地鏈式進行的演算法,必將導致優化誤差逐幀累積,最終產生乙個較大的誤差漂移。因此,後端優化的思路就是從全域性(整個相機運動過程)中選取一些關鍵幀,利用這些關鍵幀之間的關係建立起時間和空間跨度更大的、需要同時滿足的全域性約束,以優化之前得到的不夠準確的各幀的相機位姿,實際上就是完成乙個bundle adjustment(最小化重投影誤差)。該全域性優化問題可以通過建立和優化位姿圖(pose graph)來求解。位姿圖是以關鍵幀的全域性位姿作為圖的節點,以關鍵幀之間的相對位姿誤差作為圖的邊的權重,通過令整個圖的所有邊的權重值總和最小,來優化得到每個圖節點的值。
在相機的運動過程中,有時候會重複地觀測到以前觀測過的區域(revisited areas),而由於視覺前端帶來的誤差漂移,會導致再次對這些區域進行建圖時,會與先前在同一區域建圖的結果不重合,即出現了重影現象。因此在後端優化中,另乙個重要的工作是進行閉環(loop closure)檢測。所謂閉環檢測,其實就是判斷在相機的運動軌跡上,有沒有觀測到先前觀測過的區域,而這些區域,就是閉環點。
用於閉環檢測的常用演算法主要有:詞袋模型和隨機蕨演算法。詞袋模型首先對乙個影象幀上的描述子進行聚類:乙個關於描述子的聚類稱之為乙個詞,所有不同的詞的集合稱之為字典。對於在字典中和在單幀影象**現頻率較高的詞,給予其較高的權重。當對比兩個影象幀之間的相似度時,只要在這兩個影象幀上,逐個詞地進行權重對比即可,常用的用於衡量權重差異的尺度為l1範數。
在檢測出閉環點之後,就可以利用閉環點建立起乙個跨度較大的全域性約束,其實就是將視覺前端中的單向鏈式約束的頭尾相連,並根據頭尾相連處的位姿必須相等作為乙個自洽條件,進而將這個約束條件反饋到閉合後的整個環式結構的優化中,使得每個歷史幀的位姿優化不僅依賴於其過去的影象幀的約束,也依賴於其未來的影象幀的約束。這樣的優化過程魯棒性更好,因為對不同的優化方向作出貢獻的雜訊將借由多約束條件在一定程度上相互抵消,誤差漂移現象也因此得到改善。
slam的發展:
slam近年來發展衍生出的一些其他型別的變種有:非剛性slam,多目標模型slam,動態slam,語義slam等。
slam的一些開源專案:
在專案**方面,當前比較具有代表性的一些開源slam方案有:
dense slam: kinectfusion, elasticfusion,bundlefusion,infinitam,maskfusion
semi-dense slam: lsd-slam
sparse slam: orb-slam
slam的一些開發工具:
開發slam常用到的工具庫主要包括:
openni:用於與視覺感測器的互動操作;
opencv:用於影象處理;
pcl:用於點雲處理;
eigen:用於矩陣運算;
sophus:用於李群李代數計算;
ceres solver:用於非線性優化;
g2o:用於圖優化;
dbow:用於處理詞袋模型;
opengl:用於模型渲染;
cuda toolkit:用於平行計算,等等。
隨機蕨演算法是對乙個影象幀進行稀疏編碼,即在影象幀的取樣畫素點上進行資訊編碼,乙個畫素點被稱為乙個蕨葉(fern),該畫素點上的rgbd通道被稱為該蕨葉上的一組節點,節點值都是binary的,即在每個節點上都有乙個給定的閾值,該閾值將確定該節點值是0還是1。於是乙個影象幀就可以用乙個蕨叢來表徵其資訊。在隨機蕨演算法中,對於每個蕨葉都會建立起乙個查詢表,且查詢表的每一行將對應這個蕨葉的一種編碼結果。當每獲取到乙個新的影象幀,就將該影象幀的id登記到描述其資訊的蕨叢的各個蕨葉所對應的查詢表的特定行上。如果有兩個影象幀,其id在超過某個給定閾值的數量的查詢表裡,都同時出現在同一行,則說明這兩個影象幀相似,新獲取到的這個影象幀是乙個閉環點。反之,如果乙個新獲取到的影象幀,與所有的歷史幀的相似度都足夠小,則將該影象幀作為乙個關鍵幀新增到關鍵幀的資料庫中用於後續的閉環檢測。隨機蕨演算法還可以在後端優化中完成位姿追蹤失敗後的重定位(re-localization):在關鍵幀資料庫中檢索與當前幀相似度最高的幾個關鍵幀,並利用它們與當前幀的相似度作為權重,對這些關鍵幀對應的位姿進行加權求和,作為對當前幀的位姿的乙個估計。
SLAM中的後端優化
本節介紹slam中的後端優化過程 同時對三維點位置和相機引數進行非線性優化 原理 是一種 信賴域 的方法,當收斂速度較快時,增大信賴域使演算法趨向於高斯牛頓法 當收斂速度較慢時,減小信賴域使演算法趨向於最速下降法。優勢 速度快 可以在距離初始值較遠處得到最優解。slam優化演算法對比 演算法缺點 優...
SLAM後端概述
二 線性系統和kf 三 非線性系統和ekf 四 濾波器後端小結 前端視覺里程計只能通過鄰近的幾張估計短暫時間內的運動軌跡和路標,這種方式為 漸進的 incremental 後端考慮乙個更長時間內 或所有時間內 的狀態估計問題,而且不僅使用過去的資訊更新自己的狀態,也會用未來的資訊 即全域性資訊 來更...
視覺slam14講之後端優化
前端視覺里程計能給出乙個短時間內的軌跡和地圖,但不可避免的誤差累積,這個地圖在長時間內是不準確的。要想構建乙個尺度,規模更大的優化問題,以考慮長時間內的最優軌跡和地圖,這時後端優化就出現了。slam中的運動方程和觀測方程通常是非線性函式,尤其是視覺slam中的相機模型,需要使用相機內參模型及李代數表...