一蹂楣、機(jī)器人地圖
機(jī)器人地圖一般分為三種類型:柵格地圖讯蒲,拓?fù)涞貓D,特征地圖
1墨林、柵格地圖
柵格地圖,在物流信息技術(shù)中有所涉獵酌呆,其就是構(gòu)建一個個“小方塊”搔耕,利用顏色信息來區(qū)分的地圖的位置信息隙袁。在機(jī)器人建圖中,柵格地圖容易構(gòu)建梨睁,表示且保存位置的唯一娜饵,對于短路徑的規(guī)劃方便坡贺;但柵格地圖的路徑規(guī)劃效率不高划咐,空間浪費(fèi)(柵格的分辨率不依賴于環(huán)境的復(fù)雜度)并且也需要精確的機(jī)器人位置估計,其對于物體識別的人機(jī)交互問題效果不好褐缠。
2政鼠、拓?fù)涞貓D
是指地圖學(xué)中一種統(tǒng)計地圖,一種保持點與線相對位置關(guān)系正確而不一定保持圖形形狀與面積、距離队魏、方向正確的抽象地圖公般。
對于使用gmapping建圖,所構(gòu)建的是二維柵格地圖胡桨。
二官帘、gmapping與SLAM
對于建圖,SLAM (simultaneous localization and mapping),也稱為CML (Concurrent Mapping and Localization), 我們從名字就可以得知昧谊,其包含機(jī)器人的定位與地圖的構(gòu)建兩部分刽虹,或者說并發(fā)建圖與定位。對于這個問題的模型呢诬,就是如果將一個機(jī)器人放入未知環(huán)境中的未知位置涌哲,是否有辦法讓機(jī)器人一邊移動一邊逐步描繪出此環(huán)境完全的地圖(完全的地圖是指不受障礙行進(jìn)到房間可進(jìn)入的每個角落尚镰,也就是熟知地圖的障礙點)阀圾。定位與建圖相輔相成、互相影響狗唉。
首先初烘,構(gòu)建地圖要知道機(jī)器人的精確位姿,精確定位又需要給定的地圖做參考分俯。先講已知精確位姿(坐標(biāo)和朝向)的地圖創(chuàng)建肾筐,機(jī)器人位置已知,通過激光雷達(dá)掃描到環(huán)境特征缸剪,即障礙物距離局齿。可通過機(jī)器人坐標(biāo)和朝向以及障礙物距離計算出障礙物的坐標(biāo)橄登,采用bresenham直線段掃面算法抓歼,障礙物所處的柵格標(biāo)注為occupy讥此,機(jī)器人所處的柵格與障礙物所處的柵格之間畫直線,直線所到之處都為free谣妻。當(dāng)然每個柵格并不是簡單的非0即1萄喳,柵格的占據(jù)可用概率表示,若某一個柵格在激光束a掃描下標(biāo)識為occupy蹋半,在激光束b掃描下也標(biāo)識為occupy他巨,那該柵格的占據(jù)概率就變大,反之减江,則變小染突。這樣,機(jī)器人所處的環(huán)境就可以通過二維柵格地圖來表征辈灼。
三份企、實現(xiàn)gmapping功能包的條件
1、一臺安裝了ROS并運(yùn)行虛擬機(jī)的筆記本(或者其它的平臺)巡莹。
對于ROS環(huán)境司志,所需要的ROS功能包有激光雷達(dá)的ROS功能包,gmapping功能包降宅,機(jī)器人的驅(qū)動包骂远,3個功能包都運(yùn)行起來后需要編譯節(jié)點連接,從而構(gòu)建地圖腰根。當(dāng)然激才,如果運(yùn)行順利,還可以插入一個按鍵额嘿,利用ROS包用來控制機(jī)器人的移動贸营。
2、一臺激光雷達(dá)
(未研究)在國內(nèi)岩睁,現(xiàn)階段激光雷達(dá)的效果也不錯,能達(dá)到運(yùn)行要求揣云。
對于建圖捕儒,機(jī)器人應(yīng)該能檢測深度信息與里程計信息。
3邓夕、以上都是之前學(xué)習(xí)的內(nèi)容刘莹。但是除此以外,還必要一臺機(jī)器人或者機(jī)器車焚刚,如irobot create或者turtlesim点弯,此平臺是必須的。
在這之前矿咕,除了在仿真環(huán)境里運(yùn)行建圖功能以外抢肛,一直沒考慮到的問題是狼钮,是否只有小車才能承載激光雷達(dá)建圖,用其他的工具是否可以捡絮。答案是不可以熬芜,因為運(yùn)行g(shù)ampping包需要里程計信息,也就是這個包需要知道你的機(jī)器人相對于你的開始位置運(yùn)動了多少福稳,轉(zhuǎn)了多少角度等信息才可用進(jìn)行地圖的構(gòu)建涎拉,里程計的信息是必須的,一般機(jī)器人的ROS驅(qū)動程序里都會包含的圆,一般的里程計信息由車輪的轉(zhuǎn)速編碼器得到鼓拧。
四、ROS中的gmapping功能包
slam-gmapping節(jié)點接收傳感器/激光掃描信息并構(gòu)建地圖越妈〖玖可以通過ROS主題或服務(wù)檢索地圖。
1叮称、訂閱
gmapping訂閱的其實非常簡單种玛,只有兩種?
tf (tf/tfMessage)?
(需要進(jìn)行激光,基準(zhǔn)和測距的相關(guān)框架轉(zhuǎn)換)
?scan (sensor_msgs/LaserScan)?
(激光掃描從中創(chuàng)建地圖)
2瓤檐、發(fā)布
(1) map_metadata(nav_msgs / MapMetaData)?
從此主題獲取地圖數(shù)據(jù)赂韵,將其鎖定并定期更新。
(2) map(nav_msgs / OccupancyGrid)?
從此主題獲取地圖數(shù)據(jù)挠蛉,將其鎖定并定期更新
(3) ?entropy (std_msgs / Float64)?
機(jī)器人姿態(tài)分布的熵的估計值(較高的值表示較大的不確定性)祭示。
3、 服務(wù)
dynamic_map(nav_msgs / GetMap)?
調(diào)用此服務(wù)以獲取地圖數(shù)據(jù)谴古。
五质涛、gmapping參數(shù)
gmapping功能包采用粒子濾波算法。(待研究)
其中關(guān)鍵的參數(shù)為:
1. particles (int, default: 30) 這個參數(shù)決定gmapping算法中的粒子數(shù)掰担,因為gmapping使用的是粒子濾波算法汇陆,粒子在不斷地迭代更新,所以選取一個合適的粒子數(shù)可以讓算法在保證比較準(zhǔn)確的同時有較高的速度带饱。
2. minimumScore (float, default: 0.0) 最小匹配得分毡代,這個參數(shù)很重要,它決定了對激光的一個置信度勺疼,越高說明對激光匹配算法的要求越高教寂,激光的匹配也越容易失敗而轉(zhuǎn)去使用里程計數(shù)據(jù),而設(shè)的太低又會使地圖中出現(xiàn)大量噪聲执庐,所以需要好好調(diào)整酪耕。
六、launch文件
啟動節(jié)點:node pkg="gmapping" type="slam_gmapping" name="slam_gmapping" output="screen"
移動初始值(距離):param name="lstep" value="0.05”/
移動初始值(角度):param name="astep" value="0.05"/
param name="lskip" value="0"/(!--為0,表示所有的激光都處理轨淌,盡可能為零迂烁,如果計算壓力過大看尼,可以改成1--)