從視覺SLAM建立的稠密圖到能夠讓移動機器人可以通過運動規劃而進行自主導航的2維地圖之間還需要做什麼?
用通過視覺SLAM方法,得到的基本上就是相機軌跡、關鍵幀信息、稀疏或者稠密的地圖點。
如果用來做移動機器人導航的話還遠遠不夠,無非也就是能按著之前走過的軌跡再跑一遍。要得到可以用來讓移動機器人自己規劃路徑的地圖還需要做很多操作,但具體需要做哪些工作呢?求諸位大神解答!謝謝!
如果是二維的規劃的話,其實很簡單的。
對於 Path Planning,其實就需要兩個信息:定位、地圖。
利用視覺 SLAM 可以解決機器人的定位問題,剩下的就是怎麼將稠密地圖轉換成規劃使用的地圖了。
對於平面的二維規劃,A* 基本是夠了,所以我們就針對 A* 演算法來說。
A* 一般是在二維柵格地圖上進行規劃的,所以我們要做三件事:降維、膨脹、柵格化。
- 降維
這個其實不難,視覺 SLAM 得到的稠密地圖相當於是有一個 3D 的點雲數據,我們只需要用一個規則轉換成 2D,有點雲的位置就是不可行區域(障礙物),用兩個不同的數值表示障礙物與可行區域即可:
障礙物的確定可以是將所有高度的障礙物疊加,也可以根據機器人尺寸選擇一定高度範圍的障礙物疊加,或者其他方法。
- 膨脹
因為機器人有一定尺寸,所以需要將障礙物進行一定膨脹,(其實是工作空間到C空間的轉變)
- 柵格化
這個就更簡單了,直接按照一定解析度(如 2cm)劃分網格,然後,利用四連通或八連通的準則連接成 graph,直接在上面跑 A* 即可。
當然,如果你是用 ROS 的 Navigation,那麼後兩步不需要你自己做,ROS 已經幫你做好了。
占坑 有時間答
從perception 到 planning 之間,差的通常是我們說的「地圖」。啰嗦一點解釋就是,怎麼把在perception 模塊(或者說mapping)里的輸出的地圖形式,轉變為一個可以並且方便做planning 的地圖形式(數據結構)。
ok, 對於planning 而言,通常說的「方便」的地圖形式,就是occupancy grid,在2d 或3d 甚至更好維度,把機器人configuration space離散化,這對於planning里的前端:path finding來說是最簡單,方便的。
進一步地,可以使用octo map 用八叉樹這種數據結構作為地圖的儲存形式,可以起到節省space cost的作用。可以使用voronin decomp 等一些抽象的topology的地圖形式。可以使用elevation map等等。
亦或者,不用任何需要「後處理」的數據結構,直接基於無序點雲(這是一種常用於mapping,卻對planning 不直觀的地圖形式,因為點與點之間無序),可不可以作path finding呢?答案也是可以的。在3d space里(無人機)可以參見我主頁里的第一篇paper。對於2d space(terrain travelling 如無人車),可以參見eth asl組的driving on pointclouds一文。兩者雖只差了一個維度但是方法和思路安全不同。
答到這裡我覺得這個問題我算是回答完了。如果是室內(點雲量並不是非常非常龐大),我覺得可以考慮用octomap把點雲地圖轉換成3d柵格地圖(grid map),這樣的話就很好做碰撞檢測和導航了吧。
推薦閱讀:
※三維模型重建可以怎樣用於機器人導航。?
※大家怎麼看META新發布的META2 AR眼鏡?
※如何評價零零無限科技的產品 Hover Camera 及其前景?
※機器人、自動控制、無人機等領域,有哪些不錯的講義(notes)?
※希望使用激光雷達實現3D SLAM,使用什麼3D激光掃描儀比較好?
TAG:機器人 | 計算機視覺 | 同時定位和地圖構建SLAM |