機器人想要在未知的環境中實現自主移動、自主避障就必須知道自己在哪「定位」,環境中有什麼障礙物、周圍是什麼情況「建圖」等。SLAM就是幫助機器人實現定位與地圖構建功能的一種方案或技術。SLAM的全稱為Simultaneous Localization And Mapping即「同時定位與地圖構建」。它最早用於軍事核潛艇中的海底定位。最近幾年由於機器人、無人機、自動駕駛、AI以及VR和AR技術的發展,SLAM技術逐漸被人們熟知,因為SLAM技術是這些領域的核心與難點。
SLAM的實現方式有很多種,也有大量的硬體平臺可供選擇,比如思嵐科技的SLAMWARE,整套硬體平臺嵌入SLAM技術,配合自家產的雷射雷達以及ROS中的導航功能包可實現室內機器人的自主定位與導航。SLAM是一個概念而不是一個單一的算法,SLAM過程有很多步驟組成,包括地標提取、數據關聯、狀態估計、狀態更新以及地標更新等。並且每一個部分都可以由不同的算法來實現。其中EKF (Extended Kalman Filter)即擴展卡爾曼濾波即是一種實現SLAM過程的方法。
SLAM可以用於二維空間運動也可以用於三維空間運動,像目前流行的AR領域、無人機自主避障領域等即是SLAM的三維空間使用實例。
完成SLAM首先需要一個機器人移動平臺,可以藉助無人機,或者移動機器人來實現。移動機器人平臺一般選擇輪式,有全向移動方式或者兩輪移動方式。從輪子的轉動圈數可以大致估計機器人的運動裡程,但是這種方式通常是不準確的,因此還需要其他的測距設備來輔助完成機器人的位置估計。比如IMU慣性導航模塊以及雷射雷達測距設備等,當然還包括其他的單目、雙目等視覺傳感器設備。
雷射雷達可以掃描環境中的障礙物,通過SLAM過程生成帶有地標信息的環境地圖,提供給機器人。因為雷射雷達精度高、輸出效率高、不需要太多的計算過程,所以應用廣泛。但是雷射雷達並不便宜,並且雷射雷達不會檢測到玻璃這種透明的障礙物,也不能用於水下,因為水會阻礙光的傳輸,因此雷射雷達也有一定的應用場合限制。
視覺SLAM計算量很大,並且很容易受光照度的影響。但是近幾年隨著硬體性能的提升,視覺SLAM也得到快速的發展和應用。在大型的室外無人駕駛過程中一般同時選擇視覺傳感器、毫米波雷達、多線雷射雷達、IMU、GPS等多傳感器組合完成,並且車身周圍配備多臺同類型傳感器實現汽車對周圍環境的自動感知。
SLAM過程由若干步驟完成,其主要目的是利用環境來更新機器人的位置信息。大致過程包括地標提取、數據關聯、狀態估計、狀態更新以及地標更新等。
單純的依賴機器人的運動來估計其位置的方式是不準確的,因為機器人的裡程計通常存在一定的誤差。通常藉助雷射雷達等測距設備來獲取環境信息後與裡程計信息融合從而更準確的獲取機器人的位置。這裡通常有很多種方法實現,EKF即是常見的一種SLAM實現方式。EKF是SLAM的核心,它持續的對機器人的位置和周圍環境信息進行估計,通過迭代運算,較為準確的估計出機器人的位置。
下圖是SLAM的簡單過程描述:
機器人運動時,它的位置發生變化,機器人將裡程計觀測的信息以及雷射雷達獲取的地標信息進行關聯,EKF將當前觀測的位置、機器人的運動位置進行綜合運算,估計出機器人的準確位置信息。
通過幾張圖我們詳細的看一下位置估計的過程:
我們用一個三角形表示機器人,五角星表示地標;圖1中機器人首先通過雷射雷達測量地標相對於自身的距離和角度信息;圖2中機器人開始向前移動,到達一個新位置;機器人首先根據裡程計或運動方程預測它當前所處的位置;到達圖3中的位置後,機器人會通過雷射雷達重新測量各個地標相對於機器人的位置和角度信息。這個測量得到的距離和角度顯然不一定和機器人根據運動方程所估計的位置重合,並且機器人更傾向於相信通過雷射雷達測量得到的位置和角度信息;在圖4中我們用實線三角形表示的機器人位置,用虛線三角形表示機器人通過運動方程估計的位置;顯然兩個位置不重合,機器人這個時候通過EKF綜合預測和測量進行機器人真實位置的估計,圖5中的實線三角形表示通過EKF運算後估計出的位置;
機器人通常依賴裡程計來獲取自身運動狀態的估計,一般通過輪子的轉動圈數來實現,在和雷射雷達數據進行融合時必須要保證兩個數據信息的時間同步性,否則會造成狀態的錯誤估計;地標必須具備很強的區分性並易於觀測。地標太少不容易被觀察,並且地標不能隨意變動,一般選取靜止的物體作為觀測地標。
下面貼一張使用cartographer技術實現的SLAM實例,詳細可參考:https://github.com/googlecartographer/cartographer
SLAM技術隨著AI技術的發展逐漸被人們所熟知,2D的雷射雷達SLAM技術目前較為成熟,有很多實際的應用。視覺SLAM領域仍然存在很多問題,仍然有很大的研究和改進的空間。比如無人駕駛中的多傳感器數據融合、數據關聯的優化、迴環檢測機制以及重定位精度等問題。視覺SLAM也許是將來的重點研究領域和發展方向。
水平有限,歡迎指正交流。
SLAM學習資源匯總
STM32到底如何與ROS進行通信
打造一個強大的ROS開發IDE
ROS下使用MPU6050慣性測量模塊
嵌入式軟體開發的發展路線
誰的人生不迷茫
ROS通信模型之深度分析
新版 <李雷與韓梅梅> 深度好文
深度解析卡爾曼濾波在IMU中的使用
看完別人的故事,走回自己的路
打磨編程技術 提高職場認知
「尚程功夫」
如果覺得文章不錯,歡迎轉發給更多的人