智能服務機器人正成為行業的風口浪尖,從清掃機器人開始,家庭陪伴機器人、送餐機器人等陸續進入公眾視線。
在討論這類機器人是否能解決實際問題時,自主定位導航技術作為機器人智能化的第一步正不斷引起行業內的重視。同時,作為自主定位導航技術的重要突破口,SLAM技術也成為關注焦點。
正如圖中所示,機器人自主定位導航技術中包括定位、地圖創建與路徑規劃(運動控制),而SLAM本身只是完成機器人的定位和地圖創建,二者有所區別。
那么,SLAM技術究竟是如何實現的?它有哪些難點?機器人如何實現路徑規劃和自動導航?到底什么樣的掃地機器人才算智能?
這些問題,小編將為你一一解答,帶領大家了解機器人自主移動的秘密。
今天,我們先從SLAM說起。
SLAM是同步定位與地圖構建(SimultaneousLocalizationAndMapping)的縮寫,最早由HughDurrant-Whyte和JohnJ.Leonard提出。
其實,SLAM更像是一個概念而不是一個算法,它本身包含許多步驟,其中的每一個步驟均可以使用不同的算法實現。主要用于解決移動機器人在未知環境中運行時即時定位與地圖構建的問題。
當你身處異地,怎么準確找到想去的地方?在戶外迷路時,怎么找到回家的路?沒錯,我們有導航軟件和戶外地圖。
和人類繪制地圖一樣,機器人描述環境、認識環境的過程主要就是依靠地圖。它利用環境地圖來描述其當前環境信息,并隨著使用的算法與傳感器差異采用不同的地圖描述形式。
機器人學中地圖的表示方法有四種:柵格地圖、特征地圖、直接表征法以及拓撲地圖。
柵格地圖
機器人對環境地圖的描述的方式最常見的為柵格地圖(Gridmap)或者稱為OccupancyMap。柵格地圖就是把環境劃分成一系列柵格,其中每一柵格給定一個可能值,表示該柵格被占據的概率。
這種地圖看起來和人們所認知的地圖沒什么區別,它最早由NASA的AlbertoElfes在1989年提出,在火星探測車上就用到過,其本質是一張位圖圖片,但其中每個「像素」則表示了實際環境中存在障礙物的概率分布。
一般來說,采用激光雷達、深度攝像頭、超聲波傳感器等可以直接測量距離數據的傳感器進行SLAM時,可以使用該地圖。這種地圖也可以通過距離測量傳感器、超聲波(早期)、激光雷達(現在)繪制出來。
特征點地圖
特征點地圖,是用有關的幾何特征(如點、直線、面)表示環境,常見于vSLAM(視覺SLAM)技術中。
相比柵格地圖,這種地圖看起來就不那么直觀了。它一般通過如GPS、UWB以及攝像頭配合稀疏方式的vSLAM算法產生,優點是相對數據存儲量和運算量比較小,多見于最早的SLAM算法中。
直接表征法
直接表征法中,省去了特征或柵格表示這一中間環節,直接用傳感器讀取的數據來構造機器人的位姿空間。
上圖就是直接記錄了屋子內天花板畫面的圖像地圖。這種方法就像衛星地圖一樣,直接將傳感器原始數據通過簡單處理拼接形成地圖,相對來說更加直觀。
拓撲地圖
拓撲地圖,是一種相對更加抽象的地圖形式,它把室內環境表示為帶結點和相關連接線的拓撲結構圖,其中結點表示環境中的重要位置點(拐角、門、電梯、樓梯等),邊表示結點間的連接關系,如走廊等。這種方法只記錄所在環境拓撲鏈接關系,這類地圖一般是由前幾類地圖通過相關算法提取得到。
比如掃地機器人要進行房間清掃的時候,就會建立這樣的拓撲地圖:
小結
在機器人技術中,SLAM的地圖構建通常指的是建立與環境幾何一致的地圖。
一般算法中建立的拓撲地圖只反映了環境中的各點連接關系,并不能構建幾何一致的地圖,因此,這些拓撲算法不能被用于SLAM。
直接表征法類似衛星地圖,它是直接使用傳感器(一般是圖像傳感器)構建得到。這種方法的信息冗余度最大,對于數據存儲是很大的挑戰,同時,機器人要從中提取出有用的數據也要耗費一番周折,因此在實際應用中很少使用。
特征點地圖又是另一個極端,雖然數據量少,但是它往往不能反應所在環境的一些必須的信息,比如環境中障礙物的位置。vSLAM技術中,多采用這種地圖來解決機器人定位問題。想讓機器人進行自主避障和路徑規劃,還需要額外配置距離傳感器,如激光雷達、超聲波來完成。
柵格地圖,或者OccupancyMap(占據地圖)恰好介于其中,一方面它能表示空間環境中的很多特征,機器人可以用它來進行路徑規劃,另一方面,它又不直接記錄傳感器的原始數據,相對實現了空間和時間消耗的最優。因此,柵格地圖是目前機器人所廣泛應用的地圖存儲方式。
思嵐科技的SLAMWARE系統內部也采用這種地圖方式。
當你打開手機中的導航軟件,在選擇前往目的地的最佳路線之前,首先要做的動作是什么呢?沒錯,就是定位。我們要先知道自己在地圖中的位置,才可以進行后續的路徑規劃。
在機器人實時定位問題中,由于通過機器人運動估計得到的機器人位置信息通常具有較大的誤差,我們還需要使用測距單元得到的周圍環境信息更正機器人的位置。
目前,常見的測距單元包括激光測距、超聲波測距以及圖像測距三種。其中,憑借激光良好的指向性和高度聚焦性,激光雷達已經成為移動機器人的核心傳感器,同時它也是目前最可靠、最穩定的定位技術。
自1988年被提出以來,SLAM的理論研究發展十分迅速。在實際應用時,除配備激光雷達外,還需要機器人具有IMU(慣性測量單元)、里程計來為激光雷達提供輔助數據,這一過程的運算消耗是巨大的,傳統上需要PC級別的處理器,這也成為限制SLAM廣泛應用的瓶頸之一。
那么,實現SLAM的過程中,都會遇到哪些坑呢?
SLAM實現過程中的難點
SLAM主要解決機器人的實時定位與自動建圖問題,那么,在實際應用時,SLAM究竟是如何實現的呢?在實現過程中有哪些難點?
這是一個完整的SLAM和導航系統的主要架構圖:
其中,SLAM核心過程包括3個步驟,第一步稱為預處理。我們知道,激光雷達和其他雷達設備一樣,某一個時刻只能獲取它所在位置的環境信息。
這就是我們所說的點云,它只能反映機器人所在環境中的一個部分。第一步預處理就是對激光雷達原始數據進行優化,剔除一些有問題的數據,或者進行濾波。
第二步是匹配,也就是說把當前這一個局部環境的點云數據在已經建立地圖上尋找到對應的位置,這個步驟非常關鍵。
這個是ICP的點云匹配算法,用于實現匹配。說這個過程關鍵,就是因為它的好壞,直接影響了SLAM構建地圖的精度。這個過程和我們玩拼圖游戲有點類似,就是在已經拼好的畫面中找到相似之處,確定新的一個拼圖該放在哪里。
在SLAM過程中,需要將激光雷達當前采集的點云(紅色部分)匹配拼接到原有地圖中。
如果不進行匹配過程,所構建的地圖可能就亂成一團,變成這樣。
在這個部分完畢以后,就進行第三步,地圖融合,也就是將這一輪來自激光雷達的新數據拼接到原始地圖當中,最終完成地圖的更新。
就像這個圖一樣,這個過程是永遠伴隨SLAM過程的。
數據融合和簡單的貼圖是有很大的差異的。因為實際上傳感器描繪的世界存在一定的誤差,或者正巧在這個時間環境有了變化,例如機器人旁邊闖入了一只小貓。
因此,實際要進行的過程會更加復雜,需要用很多概率算法,并采用濾波的方式進行融合。將上述這個過程逐次執行,就最終產生了我們看到的柵格地圖。