寫在前面首先打個(gè)廣告。SLAM研究者交流QQ群:254787961。歡迎各路大神和小白前來交流。 看了前面三篇博文之后,是不是有同學(xué)要問:博主你扯了那么多有用沒用的東西,能不能再給力一點(diǎn),拿出一個(gè)我們能實(shí)際上手玩玩的東西啊?沒錯(cuò),接下來我們就帶著大家,實(shí)際地跑一下視覺SLAM里的那些經(jīng)典程序,給大家一個(gè)直觀的印象——因此博文就叫"視覺SLAM實(shí)戰(zhàn)"啦。這些程序包括:
如果你有什么建議,可以發(fā)我的郵件或來群里交流。當(dāng)然,我是邊跑邊寫博客,而不是一口氣調(diào)通再稀里嘩啦寫的。所以呢,最后跑的程序可能會(huì)和現(xiàn)在的計(jì)劃有些出入啦。好了,廢話不多說,先來介紹下實(shí)驗(yàn)器材。 實(shí)驗(yàn)器材1. 硬件 說好的SLAM,沒有機(jī)器人怎么行?老板,先給我來三份! 這種機(jī)器人是Turtlebot的一個(gè)改裝版本:Viewbot。Turtlebot的詳情請(qǐng)參見:http://wiki./Robots/TurtleBot/。 Viewbot是上海物景公司做的改裝版本,包括可以裝些額外的傳感器,以及把原來的黑色底板變成透明底板什么的,用起來和turtlebot大同小異,價(jià)格1W+。為了避免做廣告的嫌疑我就不放鏈接了。用這個(gè)機(jī)器人的好處,是ROS有直接對(duì)應(yīng)的包,不用你自己寫。一句話即可打開傳感器讀數(shù)據(jù),再一句話就可遙控它,方便省事。 機(jī)器人的主要部件就是它的底座和上頭的Kinect啦。座子自帶慣導(dǎo),可以估計(jì)自己的位置;Kinect么,大家都知道了,不多講。事實(shí)上今天要跑的rgbd-slam-v2不需要座子,只要一臺(tái)kinect就能動(dòng)起來。我們用不著那么多機(jī)器人,只用一個(gè)就行啦(就是貼了標(biāo)簽?zāi)桥_(tái))。 2. 軟件 軟件方面只需一臺(tái)筆記,放在機(jī)器上跑程序。我用的是一臺(tái)華碩的ubuntu,裝了mac主題包真是山寨氣十足?。?/p> 具體的軟件配置后面會(huì)細(xì)說。 3. 環(huán)境 環(huán)境嘛就是我的實(shí)驗(yàn)室,這個(gè)也不細(xì)說了。 SLAM程序RGB-D-SLAM-V2程序是由F. Endres大大寫的。論文見[1]。為什么首先選這個(gè)程序呢?因?yàn)樗脑碓谖覀兦懊娴牟┛椭薪榻B過了。它是一個(gè)基于深度相機(jī)、Pose graph (圖優(yōu)化)的程序,后端用的是g2o。另一方面,它的代碼直接兼容 ROS hydro版,基本不用配置就可以運(yùn)行,非常方便。下面我們一步步地教大家運(yùn)行這個(gè)程序:
不著急,先從README看起:"RGBDSLAMv2 is based on the ROS project, OpenCV, PCL, OctoMap, SiftGPU and more – thanks!" 你還在等什么?裝裝裝!好在這些東西在Ubuntu下安裝,就是幾句話搞定的事。 ROS hydro安裝指南: http://wiki./cn/hydro/Installation/Ubuntu (加ppa源后直接安裝) Linux OpenCV安裝指南:http://blog.sciencenet.cn/blog-571755-694742.html (從源代碼編譯) PCL:http://www./downloads/linux.html (加ppa后安裝) 后面幾個(gè)嘛,裝不裝就看心情了,即使沒有裝,rgbd-slam-v2也能運(yùn)行起來。 3. 裝完之后,看"Installation from scratch"一欄,基本照著做一遍即可。作者把命令都給出來了,我就不貼了。裝完之后,rgbdslam就在你的ros包里啦。 4. 把機(jī)器人的Kinect usb口插進(jìn)電腦,運(yùn)行 roslaunch rgbdslam openni+rgbdslam.launch,就能看到一個(gè)漂亮的界面了。 可以看出作者真的挺用心,居然做了UI。像我這樣的懶人絕對(duì)不可能做UI的……不談這些,底下的兩個(gè)圖就是Kinect當(dāng)前采到的彩色圖與深度圖,而上面則是3D在線點(diǎn)云圖(可以用鼠標(biāo)轉(zhuǎn)視角)?,F(xiàn)在,程序還在待機(jī)狀態(tài),敲下Enter會(huì)采集單幀數(shù)據(jù),而敲下空白鍵則會(huì)連續(xù)采集。 此外,程序的參數(shù)可以在openni+rgbdslam.launch文件中調(diào)整。例如特征點(diǎn)類型呀(支持SIFT,SURF,ORB,SIFTGPU),最大特征數(shù)量等等。 運(yùn)行程序現(xiàn)在,我們連上Turtlebot的遙控端: roslaunch turtlebot_bringup minimal.launch (啟動(dòng)底座) roslaunch turtlebot_teleop keyboard_teleop.launch (啟動(dòng)遙控) 按下rgbd-slam-v2的空白鍵,讓機(jī)器人四處走起來。UI的狀態(tài)欄會(huì)顯示程序的運(yùn)行狀態(tài),我看到過的有 正在提取特征、加入新Frame,等等。如果它成功匹配上,上圖的點(diǎn)云就會(huì)更新,并且會(huì)跟著機(jī)器人轉(zhuǎn)動(dòng)。 我讓小車在實(shí)驗(yàn)室的一個(gè)角上轉(zhuǎn)了幾圈。它把中間放置的一堆箱子(實(shí)際上是垃圾)都掃出來了。當(dāng)你覺得滿意后,再按下Space鍵,停止程序。然后從菜單中選出需要保存的東西:機(jī)器人的軌跡,最終點(diǎn)云圖,等等。軌跡是一個(gè)txt文件,而點(diǎn)云圖則一個(gè)pcd,在安裝PCL之后調(diào)用pcl_viewer即可查看。 別看上面像是打了碼一樣的,最后出的點(diǎn)云圖可是高清無碼的: 軌跡方面,用Matlab寫個(gè)腳本plot一下即可: 可以看到軌跡上出現(xiàn)了斷層,實(shí)際上是機(jī)器人轉(zhuǎn)的比較快,算法跟丟了,然而之后又通過回環(huán)檢測(cè)給找了回來。 評(píng)價(jià)最后,總結(jié)一下這個(gè)實(shí)驗(yàn)吧。 Rgbd-slam-v2是14年論文里提到的算法。它整合了SLAM領(lǐng)域里的各種技術(shù):圖像特征、回環(huán)檢測(cè)、點(diǎn)云、圖優(yōu)化等等,是一個(gè)非常全面且優(yōu)秀的程序。它的UI做的也很漂亮,你可以在它的源代碼上繼續(xù)開發(fā)。作者也提供了數(shù)據(jù)集供研究者們測(cè)試。 缺點(diǎn):在美觀之外,由于要提特征(SIFT很費(fèi)時(shí))、渲染點(diǎn)云,這些事情是很吃資源的,導(dǎo)致算法實(shí)時(shí)性不太好。有時(shí)你會(huì)發(fā)現(xiàn)它卡在那兒不動(dòng)了,不得不等它一小會(huì)。機(jī)器人如果走的太快,很容易跟丟。于是我的機(jī)器人就真的像只烏龜一樣慢慢地在地板上爬了……一旦轉(zhuǎn)頭快了,軌跡基本就斷掉了。此外,程序采集關(guān)鍵幀的頻率很高,稍微一會(huì)就采出幾十個(gè)幀,不太適合做長(zhǎng)時(shí)間的SLAM。最后合出來的點(diǎn)云有300W+個(gè)點(diǎn),我用網(wǎng)格濾波之后才能勉強(qiáng)顯示出來。
參考文獻(xiàn) [1]. Endres et al, 3D Mapping with an RGB-D camera, TRO, 2014. |
|