對於移動機器人來說,最吸引人的莫過於SLAM,堪稱Moving Robot 皇冠上的明珠。Perception 服務於 SLAM,Motion Plan基於SLAM。SLAM在移動機器人整個問題框架中,起着最為核心的作用。為了專注於Mapping,此章我們假設 Location 是已知的。
1、Metric Map
軌跡規划任務是再Metric Map的基礎上完成的。當然,層次最高的是語意圖,語意圖是未來研究的熱點方向。獲取Metric Map 的難度最大之處在於:1、傳感器噪聲(May be solved by PGM; 2、機器人在移動(Location 問題);
常見的MAP是基於UGV而言的, 使用的地圖是Occupancy Map,與之前在軌跡規划欄目中的圖一樣,以 0 表示無法到達的區域,以 1 表示可以達到的區域。
2、傳感器噪聲問題的Naive Solution
解決傳感器噪聲問題的方法是對傳感器進行建模,其模型為概率模型:
對於給定的觀測,其factor 如上,當連續N次觀測到同一個xy的值時,利用 factor product,即可獲得n次觀測的Joint CPD ,在Joint CPD 上運行MAP算法,即可獲得最終的地圖了。在通解的基礎上,確實是這樣設計算法的,但是我們目前面對的Mapping 問題還太Naive,不需要如此復雜的手段。
此處定義了一個odd,表示發生與否可能性的比值。換言之,就是傳感器出錯的概率比,這是一個可以估計的量。比如傳感器測出有物體的odd是2,沒物體的odd是3.
依據Beyes 公式把Odd展開:
其中,p(m = 1|z)/p(m = 0/z) 表示的是測量完成后 odd 的值,它等於 此次測量值 + 之前的odd。
換言之,我們只要定義好先驗圖與log-odd-meas,就可以了。
3、Mapping Algorithm
所有的東西總是說起來容易做起來難。即使是如此Naive的Map,真正Coding還是很難的。尤其是如何高效的實現Map的更新,此外,機器人每次發出的激光線達上千條,每個位姿都要更新上前個點。對此問題,我設計了並行算法,即使在並行的條件下,生成一次Map也要近20s.
算法流程如下:
1、將激光擊中的點變換到全局坐標系下
2、利用Breshenman 算法,獲取激光通過的路徑
3、獲取Occupied Map 與 Free Map
4、更新Map.
左圖是單次測量的圖,也就是機器人一個位姿的測量結果。顯然,在靠近機器人的地方,噪聲嚴重。右圖是機器人在空間中移動后最終的Map。
4、3D Mapping
對於2維地圖,我們采用 free+occupy 的形式儲存空間中的障礙物。然而有障礙物的地方畢竟還是少數,或者說,地圖是稀疏的。
對於3維數據而言,我們用3維的空間來描述顯然不划算,由其是當空間巨大時。此時我們選擇的地圖,或者說是數據結構是kd-tree 與 OcTree. 此部分內容在點雲相關博客中有過介紹,不贅述。