作者: Aswin S Babu
正如我們在[第 1 部分]中所討論的,SLAM 是指在無地圖區域中估計機器人車輛的位置,同時逐步繪制該區域地圖的過程。根據使用的主要技術,SLAM 算法可分為三種,分別是基于濾波器的 SLAM、基于圖形的 SLAM 和基于深度學習的 SLAM。
基于濾波器的 SLAM 將 SLAM 視為狀態估計問題。在這種 SLAM 中,通常使用擴展卡爾曼濾波器 (EKF) 或無跡卡爾曼濾波器 (UKF) 等概率濾波器,來遞歸估計機器人的狀態并根據傳感器測量值更新地圖。該濾波器根據機器人的運動模型預測機器人的下一個狀態,然后使用傳感器測量值來修正該預測。
與基于濾波器的 SLAM 相比,基于圖形的 SLAM 將問題視為圖形優化問題。在這種 SLAM 中,SLAM 問題被表述成一個圖形,其中節點表示機器人姿態或環境中的地標,邊緣表示它們之間的測量值或約束。基于圖形的 SLAM 的目標是優化機器人的姿態和地標的位置,以便盡可能準確地滿足測量的約束條件,例如地標之間的距離、機器人姿態之間的相對姿態。
基于深度學習的 SLAM 方法則利用神經網絡直接從傳感器數據中學習環境表征,而不依賴手工創建的特征或模型。這些方法可以學習傳感器測量值和機器人姿態或地圖之間的復雜映射,從而實現端到端的 SLAM 解決方案。
SLAM 的地圖繪制和定位這兩項核心功能彼此之間相互依存,其中機器人根據傳感器數據不斷更新其地圖并相應地調整位置估計。作為一種模塊化工具,SLAM 及其概念允許將替換和更改規劃在內。因此,很多時候,人們會同時開發和使用幾種算法,這使得將 SLAM 作為單一算法進行概括和解釋變得有些麻煩。因此,理解 SLAM 的最佳方式是聚焦一種具體的 SLAM 實現。既然如此,我們就詳細討論一下基于濾波器的視覺 SLAM (vSLAM)。
視覺 SLAM
顧名思義,vSLAM 使用視覺傳感器(相機)作為其主要傳感器。此外,它可能還配備編碼器、慣性測量裝置 (IMU) 和其他傳感器。圖 1 顯示了這種實現的通用框圖。
圖 1:基于特征的 SLAM 過程的簡化通用框圖。(復制自 kudan.io)
相機測量
相機捕捉機器人周圍環境的圖像,包括地標、邊緣和紋理等特征。然而,由于大多數相機鏡頭都會產生一定程度的失真,因此需要對捕捉的圖像進行失真校正。使用的相機可以是立體相機、單目相機或[帶有飛行時間 (ToF) 深度傳感器的 RGB-D 相機]。立體相機和 RGB-D 相機的優點是可以輕松獲取深度信息。但單目相機存在尺度不確定性問題。也就是說,單目 SLAM 無法僅從特征對應關系來識別平移運動的長度(比例因子)。不過,有一些方法可以緩解這種情況,但不在本文的討論范圍內。
特征提取
使用相機傳感器捕捉圖像后,我們需要通過找出特定幀的特征來唯一地識別該幀,以供將來參考。在這種情況下,特征是唯一且可以一致識別的像素的集合。或者我們可以說像素是圖像中的獨特點,不會因旋轉、縮放和失真而發生變化,因此即使在圖像處理之后也很容易重新識別它們。考慮到我們使用立體相機作為主要傳感器,我們應該能夠看到相機捕捉的立體圖像之間的重疊特征。然后,可以使用這些相同的特征來估計與傳感器之間的距離。然而,如前所述,在此之前,我們需要識別立體圖像對上的共同特征。這一過程由特征檢測器和匹配器來完成。一些常見特征檢測器的示例包括尺度不變特征轉換 (SIFT)、定向 FAST 和旋轉 BRIEF (ORB) 以及良好特征跟蹤 (GFTT)。圖 2 顯示了使用一些熱門特征檢測器識別的特征。一旦識別出特征,就會使用相同的特征檢測器對其進行描述。此過程有助于將來輕松地重新識別這些特征。
圖 2:使用 a) GFTT b) SIFT 在 XRP 機器人圖像上檢測到的關鍵點。(來源:SparkFun Electronics)
找出關鍵點之后,我們通過匹配來建立這些點之間的對應關系。一些可使用的特征匹配算法包括暴力匹配器或快速最近鄰搜索庫 (FLANN)。圖 3 顯示了匹配算法作用機制的視覺表示。圖中所示直線連接匹配之處,由于我們使用了鏡像,理想情況下,如果系統是完美的,我們應該只得到水平(平行)直線。但遺憾的是,特征匹配算法并不完美,因此會導致錯誤匹配,其中一些用斜線表示。這就是為什么我們需要隨機抽樣一致性 (RANSAC) 這樣的異常值剔除工具。
圖 3:使用 FLANN 在兩幅對稱圖像上表示特征匹配的直線。(來源:SparkFun Electronics)
RANSAC
使用像 RANSAC 這樣的算法可濾除這些不正確的匹配,確保僅使用正確值(正確的匹配)作進一步處理。RANSAC 的工作方式是使用所提供數據的隨機子集構建模型。也就是說,我們將一些隨機點視為內群值(正常值),并嘗試根據這些選定的點匹配所有剩余的點。然后,我們會評估模型與整個數據集的匹配程度。這個過程不斷重復,直到找到一個由成本函數確定的模型,該模型能夠準確描述數據且誤差最小。
特征和數據關聯
在此步驟中,我們采用檢測到的特征及其在空間中的估計位置來創建這些特征的地圖。隨著在后續幀繼續進行該過程,系統會將新特征與地圖的已知元素關聯,并丟棄不確定的特征。
當在后續幀中跟蹤相機運動時,可以根據已知特征以及它們預計隨運動變化的方式來進行預測。不過,計算資源和時間約束(尤其是在實時應用中)給 SLAM 帶來了限制。隨著系統收集更多的特征測量值并更新位置/姿態,環境表示的約束和優化變得至關重要。
位置、姿態和地圖更新
卡爾曼濾波器
隨著 SLAM 過程的深入,會不斷積累噪聲,并在相機捕捉的圖像與其相關運動之間產生不確定性。通過根據觀察到的測量值不斷生成預測、更新并微調模型,卡爾曼濾波器可以減少不同測量值之間的噪聲和不確定性的影響。這有助于創建線性系統模型。在 SLAM 的實際實現中,我們使用擴展卡爾曼濾波器 (EKF),其采用非線性系統,并圍繞平均值對預測和測量值進行線性化處理。EKF 可以通過執行傳感器融合(例如,相機、IMU)整合來自多個傳感器的數據,以提高狀態和地圖估計的準確性。這種數據源的融合有助于獲得更可靠的 SLAM 結果。基于 EKF 的 SLAM 中的狀態向量包括機器人的姿態(位置和方向)和地圖中地標的位置。
關鍵幀選擇
在捕捉的圖像中選擇關鍵幀,可減少處理全部捕捉圖像所需的大量計算。我們選擇的是可以很好地表示環境的幀,并僅將它們用于計算。這種方法又是一次準確性和效率之間的權衡。
通過閉環和重定位來糾正誤差
隨著構建環境模型的過程不斷推進,測量誤差和傳感器漂移會逐漸積累,從而影響生成的地圖。閉環可以在一定程度上緩解這種情況。當系統發現自己正在重新訪問已經構建地圖的區域時,就會發生閉環。通過重新對齊當前地圖與先前建立的同一區域的地圖,SLAM 系統可以糾正累積的誤差。
重定位
當系統不知道其位置和方向 (POSE) 時,需要重定位。此刻,我們需要利用當前可觀察到的特征重新估計姿態。一旦系統成功將當前獲得的特征與可用地圖匹配,我們就可以正常繼續 SLAM 過程。
結語
SLAM 是一邊估計機器人車輛位置一邊繪制未知區域地圖的過程。SLAM 技術包括基于濾波器、基于圖形和基于深度學習(使用神經網絡)的方法。視覺 SLAM 使用相機捕捉圖像、提取特征、匹配特征并濾除不正確的匹配點。該系統通過將新特征與已知元素關聯、使用卡爾曼濾波器更新機器人的位置和姿態、選擇關鍵幀,并通過閉環和重定位糾正誤差來創建地圖。
參考資料
- [Remote Sensing | Free Full-Text | SLAM Overview: From Single Sensor to Heterogeneous Fusion (mdpi.com)]
- [Understanding how V-SLAM (Visual SLAM) works | Kudan global]
- [Feature-based visual simultaneous localization and mapping: a survey | Discover Applied Sciences (springer.com)]
- [Introduction to Visual SLAM: Chapter 1 —Introduction to SLAM | by Daniel Casado | Medium]
- [An Introduction to Key Algorithms Used in SLAM - Technical Articles (control.com)]
- [What Is SLAM (Simultaneous Localization and Mapping) – MATLAB & Simulink - MATLAB & Simulink (mathworks.com)]
- [A survey of state-of-the-art on visual SLAM - ScienceDirect]
審核編輯 黃宇
-
濾波器
+關注
關注
161文章
7860瀏覽量
178931 -
算法
+關注
關注
23文章
4630瀏覽量
93355 -
SLAM
+關注
關注
23文章
426瀏覽量
31930 -
深度學習
+關注
關注
73文章
5513瀏覽量
121550
發布評論請先 登錄
相關推薦
評論