基於深度攝像頭的vslam(一)

(一)基礎知識

slam基本概念

slam,即時定位與地圖構建(SimultaneousLocalization AndMapping)指的是機器人在自身位置不確定的條件下,在完全未知環境中創建地圖,同時利用地圖進行自主定位和導航。

SLAM問題可以描述爲:機器人在未知環境中從一個未知位置開始移動,在移動過程中根據位置估計和傳感器數據進行自身定位,同時建造增量式地圖。

(1)定位(localization):機器人必須知道自己在環境中位置。
(2)建圖(mapping):機器人必須記錄環境中特徵的位置(如果知道自己的位置)。
(3)SLAM:機器人在定位的同時建立環境地圖。其基本原理是運過概率統計的方法,通過多特徵匹配來達到定位和減少定位誤差的。

移動機器人自定位與環境建模問題是緊密相關的。環境模型的準確性依賴於定位精度,而定位的實現又離不開環境模型。已有的研究中對這類問題的解決方法可分爲兩類:一類利用自身攜帶的多種內部傳感器(包括里程儀、羅盤、加速度計等),通過多種傳感信息的融合減少定位的誤差,使用的融合算法多爲基於卡爾曼濾波的方法。這類方法由於沒有參考外部信息,在長時間的漫遊後誤差的積累會比較大。另一類方法在依靠內部傳感器估計自身運動的同時,使用外部傳感器(如激光測距儀、視覺等)感知環境,對獲得的信息進行分析提取環境特徵並保存,在下一步通過對環境特徵的比較對自身位置進行校正。但這種方法依賴於能夠取得環境特徵。

基於視覺的Visual SLAM(簡稱VSLAM)框架

VSLAM的技術框架主要包括傳感器數據預處理、前端、後端、迴環檢測、建圖。
在這裏插入圖片描述

1、傳感器數據
傳感器數據預處理。這裏的傳感器包括攝像頭、慣性測量單元(Inertial measurement unit,簡稱IMU)等,涉及傳感器選型、標定、多傳感器數據同步等技術。
深度攝像頭:RGB-D,主動探測深度,重建效果好,測量範圍小,受日光干擾,受材質干擾

2、前端
又稱爲視覺里程計(visual odometry,簡稱VO)。主要是研究如何根據相鄰幀圖像定量估算幀間相機的運動。通過把相鄰幀的運動軌跡串起來,就構成了相機載體(如機器人)的運動軌跡,解決了定位的問題。然後根據估算的每個時刻相機的位置,計算出各像素的空間點的位置,就得到了地圖。

VSLAM中,前端主要涉及計算機視覺相關的算法。典型做法一般是:首先提取每幀圖像特徵點,對相鄰幀進行特徵點粗匹配,然後利用RANSAC(隨機抽樣一致)算法去除不合理的匹配對,然後得到位置和姿態信息。整個過程涉及到特徵提取、特徵匹配、對極幾何、PnP、剛體運動、李代數等多視圖幾何知識。

視覺里程計只計算相鄰幀的運動,進行局部估計,這會不可避免的出現累積漂移,這是因爲每次估計兩個圖像間的運動時都有一定的誤差,經過相鄰幀多次傳遞,前面的誤差會逐漸累積,軌跡漂移(drift)的越來越厲害。

解決軌跡漂移的方法有兩個:後端優化、迴環檢測。

3、後端
主要是對前端的結果進行優化,得到最優的位姿估計。主要有兩種方法:

一種是基於濾波理論的優化,主要有 EKF, PF, RBPF, UKF等方法,其中EKF(擴展卡爾曼濾波)在早期是主流的方法。它的思路是將狀態估計模型線性化,並用高斯分佈近似其噪聲,然後按照卡爾曼濾波進行預測來更新。但是實際上,這種對噪聲的高斯分佈大部分情況下是不成立的,此外,線性化過程中丟失了高階項。

另一種就是非線性優化(圖優化)。它的基本思想是將優化的變量作爲圖的節點,誤差項作爲圖的邊,在給定初值後,就可以迭代優化更新。由於圖優化的稀疏性,可以在保證精度的同時,降低計算量。

後端優化涉及到的數學知識比較多,具有較高的難度。總的來說,從狀態估計的角度來講,SLAM是一個非線性非高斯系統。因此傳統的濾波理論已經逐漸被拋棄,而圖優化已經成爲主流方法。

4、迴環檢測
主要目的是讓機器人能夠認識自己曾經去過的地方,從而解決位置隨時間漂移的問題。視覺迴環檢測一般通過判斷圖像之間的相似性完成,這和我們人類用眼睛來判斷兩個相同的地點是一樣的道理。因爲圖像信息豐富,因此VSLAM在迴環檢測中具有很大的優勢。

當迴環檢測成功後,就會建立現在的圖像和過去曾經見過圖像的對應關係,後端優化算法可以根據這些信息來重新調整軌跡和地圖,從而最大限度地消除累積誤差。

5、建立地圖
SLAM根據不同的傳感器類型和應用需求建立不同的地圖。常見的有2D柵格地圖、2D拓撲地圖、3D點雲地圖等。

2D拓撲地圖更強調地圖元素之間的連通關係,而對精確的位置要求不高,去掉了大量地圖的細節,是一種非常緊湊的地圖表達方式。3D點雲地圖在VSLAM中用的比較多,主要用於真實場景的視覺重建,重建的地圖非常直觀漂亮。但是點雲地圖通常規模很大,比如一張VGA分辨率(640 x 480)的點雲圖像,就會產生30萬個空間點,這會佔據非常大的存儲空間,而且存在很多冗餘信息。

通俗的思考一些問題

1、關於我們要做的事情,可以這樣想:

(1) 已知的東西:傳感器數據(圖像,點雲,慣性測量設備等)。我們的傳感器主要是一個Kinect,因此數據就是一個視頻序列,說的再詳細點就是一個RGB位圖序列與一個深度圖序列。至於慣性測量設備,可以有也可以沒有。

(2) 待求的東西:機器人的運動軌跡,地圖的描述。運動軌跡,畫出來應該就像是一條路徑。而地圖的描述,通常是點雲的描述。但是點雲描述是否可用於導航、規劃等後續問題,還有待研究。

2、全局優化

如果只用幀間匹配,那麼每一幀的誤差將對後面所有的運動軌跡都要產生影響。例如第二幀往右偏了0.1,那麼後面第三、四、五幀都要往右偏0.1,還要加上它們自己的估算誤差。所以結果就是:當程序跑上十幾秒之後早就不知道飛到哪兒去了。這是經典的SLAM現象,在EKF實現中,也會發現,當機器人不斷運動時,不確定性會不斷增長。

怎麼辦?

通常的做法是認準一個標誌性建築物,在它周圍轉上幾圈,弄清楚附近的環境。然後再一點點兒擴大我們走過的範圍。在這個過程中,我們會時常回到之前已經見過的場景,因此對它周圍的景象就會很熟悉。

機器人的情形也差不多,除了大多數時候是人在遙控它行走。因而我們希望,機器人不要僅和它上一個幀進行比較,而是和更多先前的幀比較,找出其中的相似之處。這就是所謂的迴環檢測(Loop closure detection)。

迴環檢測,又稱閉環檢測(Loop closure detection),是指機器人識別曾到達場景的能力。如果檢測成功,可以顯著地減小累積誤差。

沒有迴環時,由於誤差對後續幀產生影響,機器人路徑估計很不穩定。加上一些局部迴環,幾個相鄰幀就多了一些約束,因而誤差就減少了。你可以把它看成一個由彈簧連起來的鏈條(質點-彈簧模型)。當機器人經過若干時間,回到最初地方時,檢測出了大回環時,整個環內的結構都會變得穩定很多。我們就可以籍此知道一個房間是方的還是圓的,面前這堵牆對應着以前哪一堵牆,等等。

其他

講一下其他的亂七八糟的東西,畢設換題了……很悲哀了,查了一通很迷茫不知道怎麼開始煩的一比,和我媽說我說我要回家,我媽第一反應好呀好呀,後來聽說我畢設換題不相干之後她讓我別回來了……憋說了是親媽。

看資料這一羣數學問題各個過程整個系統還是很懵,先整理了一些基礎入門問題概念等等,明天跟着高博(網上發現的,真是個神仙學長)的教程跑一跑程序吧。想哭了又,這都什麼神仙玩意……

參考博客

  1. https://www.cnblogs.com/slamtec/p/9706557.html
  2. https://blog.csdn.net/tiandijun/article/details/55212968
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章