一篇文章讀懂myAGV如何建圖導(dǎo)航
myAGV 大象首款移動機器人,采用競賽級麥克納姆輪,全包裹金屬車架;ROS開發(fā)平臺內(nèi)置兩種slam算法,滿足建圖、導(dǎo)航方向的學(xué)習(xí);提供豐富的擴展接口,可搭載my系列機械臂,實現(xiàn)移動抓取,完成更多應(yīng)用。
1、工業(yè)級高品質(zhì)外觀
1.1麥克納姆輪:
麥克納姆輪的搭載,能夠讓myAGV進行全向運動,可以實現(xiàn)橫向運動,做到原地轉(zhuǎn)圈運動,向目的地前進的時候能夠省去很多不必要的路徑。
1.2可拆卸
帶有金屬框架的全包裹式設(shè)計使 myAGV 更加緊湊和堅固。內(nèi)置樹莓派4B和分體式結(jié)構(gòu),能夠自主拆卸,能在外形/主板上自行設(shè)計創(chuàng)作出屬于自己獨一無二的小車
2、強大建圖導(dǎo)航功能
2.1實時建圖
目前myAGV使用中需要進行SLAM建圖,因為移動機器人想要實現(xiàn)自主行走,核心在于實現(xiàn)自主定位導(dǎo)航,在自主定位導(dǎo)航技術(shù)中會涉及到定位、建圖、路徑規(guī)劃等問題,而地圖構(gòu)建的好壞將直接影響myAGV的行走路徑。 myAGV想要到達某個目的地,需要和人類繪制地圖一樣,描述環(huán)境、認識環(huán)境的過程主要就是依靠地圖。下面對myAGV小車使用的兩種建圖算法進行介紹。
2.1.1 gmapping算法
GMapping是一種高效的粒子濾波器,是一個基于2D激光雷達使用RBPF(Rao-Blackwellized Particle Filters)算法完成二維柵格地圖構(gòu)建的SLAM算法。Gmapping可以實時構(gòu)建室內(nèi)地圖,在構(gòu)建小場景地圖所需的計算量較小且精度較高。
操作:
先將小車放置在需要建圖環(huán)境中的一個合適起始點位上,因為開啟launch文件將會開啟小車的IMU傳感器及odom里程計,人為的移動小車將造成小車建圖失真。
先打開SLAM掃描文件,
運行命令:
cd myagv_ros
source ./devel/setup.bash
roslaunch myagv_odometry myagv_active.launch
然后打開gmapping建圖文件,操控小車在所需要的空間里行走一圈,
運行命令
roslaunch myagv_navigation myagv_slam_laser.launch
看到圖像中建立出所需要的空間的時候就可以保存地圖了
運行命令保存建出的地圖:
rosrun map_server map_saver
2.1.2cartographer算法
cartographer是一套基于圖優(yōu)化的SLAM算法。
cartographer算法主要運用了Submap這一概念,每當(dāng)或得一次laser scan的數(shù)據(jù)后,便與當(dāng)前最近建立的Submap去進行匹配,使這一幀的laser scan數(shù)據(jù)插入到Submap上最優(yōu)的位置。在不斷插入新數(shù)據(jù)幀的同時該Submap也得到了更新。一定量的數(shù)據(jù)組合成為一個Submap,當(dāng)不再有新的scan插入到Submap時,就認為這個submap已經(jīng)創(chuàng)建完成,接著會去創(chuàng)建下一個submap,具體過程如下圖。
圖來自csdn
所有創(chuàng)建完成的submap以及當(dāng)前的laser scan都會用作回環(huán)檢測的scan matching。如果當(dāng)前的scan和所有已創(chuàng)建完成的submap在距離上足夠近,則進行回環(huán)檢測。完成回環(huán)檢測后完成建圖。
(Submap :子圖,將一小塊區(qū)域雷達掃描的范圍(scan)形成一張子圖)
cartographer算法建圖的過程跟gmapping算法建圖的過程一樣,先是打開雷達,再開啟cartographer算法文件,去操控小車在所要建立的區(qū)域中行走,完成建圖。
很多人可能都會有疑惑,建圖明明一種算法就好了,為什么要介紹兩種建圖的算法呢?
我們來比較一下兩種算法就能解決這個疑惑了。
Gmapping可以實時構(gòu)建室內(nèi)地圖,在構(gòu)建小場景地圖所需的計算量較小且精度較高。 而相比Cartographer在構(gòu)建小場景地圖時,Gmapping不需要太多的粒子并且沒有回環(huán)檢測,因此計算量小于Cartographer,而精度并沒有差太多。在構(gòu)建小場景地圖的時候,gmapping和cartographer相比,前者不僅速度快也能夠建造高精度的地圖,而在地圖的擴大gmapping需要的粒子數(shù)量多了容易把內(nèi)存撐爆。而后者恰好可以解決地圖擴大的問題,建圖的效果還能夠非常好(上圖處在同一地形的建圖)。
2.2地圖導(dǎo)航
上一步在我們建好的地圖中,我們可以讓小車在地圖里自動導(dǎo)航到某一個目的地。這都源于ROS的navigation功能包。
navigation中的move_base:
圖來自csdn
global planner:
根據(jù)給定的目標(biāo)位置進行總體路徑的規(guī)劃.
在ROS的導(dǎo)航中,首先會通過全局路徑規(guī)劃,計算出機器人到目標(biāo)位置的全局路線。這一功能是navfn這個包實現(xiàn)的。navfn通過Dijkstra最優(yōu)路徑的算法,計算costmap上的最小花費路徑,作為機器人的全局路線。
local planner:
據(jù)附近的障礙物進行躲避路線規(guī)劃。
本地的實時規(guī)劃是利用base_local_planner包實現(xiàn)的。該包使用Trajectory Rollout 和Dynamic Window approaches算法計算機器人每個周期內(nèi)應(yīng)該行駛的速度和角度(dx,dy,dtheta velocities)。
base_local_planner這個包通過地圖數(shù)據(jù),通過算法搜索到達目標(biāo)的多條路經(jīng),利用一些評價標(biāo)準(zhǔn)(是否會撞擊障礙物,所需要的時間等等)選取最優(yōu)的路徑,并且計算所需要的實時速度和角度。
接下來介紹一下我們復(fù)現(xiàn)的過程:
一開始我們得確定myagv的位置,用到了ros中的acml去定位。(在地圖中確定myagv所在的位置)
( 白色:myAGV ;紅色點點:小車現(xiàn)在位置掃描出的激光點云;藍色:是激光雷達局部地圖膨脹生成的膨脹地圖 ;綠色:是姿態(tài)數(shù)組 手動定位的時候綠色會進行收斂 直至團狀 )
原地轉(zhuǎn)幾圈完成定位后就可以開始進行自動導(dǎo)航了
當(dāng)我們點擊“2D Nav Goal”,再點擊地圖上我們想要到達的點位,小車便會向著目標(biāo)點位出發(fā),同時還可以在rviz中看到起點到目標(biāo)點位間有一條小車的規(guī)劃路徑,小車會沿著路線運動到目標(biāo)點位。
2.3 PS2手柄控制
作為一個移動機器人怎能沒有手柄控制呢!
我們開發(fā)了ps2手柄控制myAGV,這樣myAGV就可以自由的運動,實現(xiàn)更多的可能
下面是我們手柄控制的時序圖提供一點思路給大家,能夠手柄上做更多的開發(fā)。
最后,如果你擁有這樣一輛小車你會做些什么?在它分體式結(jié)構(gòu)可拆卸的小車,你能夠給它改裝成什么樣子的AGV,是給他的車上加上一些武器去作為一輛戰(zhàn)斗車,還是改裝成搭載各種各樣的機器充滿未來感?
感謝你們的觀看,如果有什么好的意見請留言!
上面就是我們對小車的初步介紹,后續(xù)會介紹myAGV搭載我們my系列的機械臂。