呂勇,余雷,王詩頌
(蘇州大學(xué)機(jī)電工程學(xué)院,江蘇蘇州,215021)
關(guān)鍵字:ROS平臺(tái);移動(dòng)機(jī)器人;避障算法
高等教育是衡量一個(gè)國家發(fā)展水平的重要標(biāo)志。隨著社會(huì)的快速發(fā)展以及國家政策的提出,地方高校需要積極響應(yīng)并做出改變,培養(yǎng)滿足企業(yè)的新型工科人才,在“新工科”背景下進(jìn)行一流本科專業(yè)的建設(shè)。我校機(jī)電學(xué)院的電氣工程及其自動(dòng)化專業(yè)經(jīng)過不懈的努力,已順利通過中國工程教育專業(yè)認(rèn)證,同時(shí)也是教育部卓越工程師教育培養(yǎng)計(jì)劃專業(yè)、江蘇省一流本科專業(yè)以及蘇州大學(xué)一流本科專業(yè)。
近年來,隨著機(jī)器人技術(shù)的快速發(fā)展,在工業(yè)制造、物流快遞以及安防監(jiān)控等領(lǐng)域的應(yīng)用日趨普遍。在新工科背景下,并結(jié)合高等學(xué)校的特點(diǎn),如何培養(yǎng)出具有創(chuàng)新能力并符合企業(yè)需求的高素質(zhì)人才,成為當(dāng)前研究的重要課題。機(jī)器人技術(shù)作為交叉學(xué)科的典型代表,涉及了計(jì)算機(jī)、自動(dòng)控制、機(jī)械以及人工智能等知識(shí),因此對(duì)學(xué)生的綜合運(yùn)用能力有比較高的要求。在實(shí)驗(yàn)教學(xué)中,要讓學(xué)生通過具體的實(shí)踐去更好的理解理論知識(shí),并將理論與應(yīng)用相結(jié)合,起到融會(huì)貫通的效果。
機(jī)器人作為電氣工程及其自動(dòng)化專業(yè)的十分重要的課程之一,從類別來看,其主要分為工業(yè)機(jī)器人以及服務(wù)機(jī)器人兩種。本文以服務(wù)機(jī)器人中的移動(dòng)機(jī)器人[1]作為切入點(diǎn),基于ROS平臺(tái)展開具體的實(shí)驗(yàn)教學(xué)方法研究。實(shí)驗(yàn)教學(xué)不能僅局限于課堂講授,為了讓學(xué)生從復(fù)雜的底層代碼閱讀與理解中解放出來,本實(shí)驗(yàn)只需要在軟件平臺(tái)上添加新的模塊實(shí)現(xiàn)功能。實(shí)驗(yàn)設(shè)計(jì)依賴ROS的話題機(jī)制,以C++語言作為編程語言,在小車turtlebot2上進(jìn)行例程的實(shí)現(xiàn)。
ROS(Robot Operating System)平臺(tái)是一個(gè)機(jī)器人操作平臺(tái),其誕生于斯坦福STAIR項(xiàng)目。作為機(jī)器人學(xué)習(xí)的平臺(tái)包含有大量的開源代碼,以及包括TF坐標(biāo)變換、QT工具箱、RVIZ可視化工具以及GAZEBO仿真平臺(tái)在內(nèi)的大量機(jī)器人開發(fā)工具。ROS所發(fā)售的TURTLEBOT機(jī)器人是ROS官方打造的基于ROS的軟硬件學(xué)習(xí)平臺(tái)。ROS很多的開源代碼都是以TURTLRBOT機(jī)器人作為硬件平臺(tái)實(shí)現(xiàn)的。本實(shí)驗(yàn)所搭建的例程實(shí)現(xiàn)平臺(tái)以TURTLEBOT2機(jī)器人為硬件基礎(chǔ)[2,3]。
實(shí)驗(yàn)中還涉及到深度相機(jī),與傳統(tǒng)相機(jī)有所不同,深度相機(jī)可以捕捉環(huán)境的景深信息,因此深度相機(jī)可以作為傳感器為gmapping 建圖提供環(huán)境信息。而與激光雷達(dá)相比,深度相機(jī)在建圖準(zhǔn)確率與速度上明顯比不上激光雷達(dá),這一點(diǎn)通過深度相機(jī) kinect2和激光雷達(dá)velodyne所建的圖中就可以得知。但是,kinect2在行人識(shí)別上可以獲得明顯優(yōu)于激光雷達(dá)的效果,深度相機(jī)可以直接采用基于深度學(xué)習(xí)的方法進(jìn)行人像識(shí)別,從而進(jìn)行針對(duì)人的避障。
本實(shí)驗(yàn)采用A*算法進(jìn)行避障,該算法是一種靜態(tài)路網(wǎng)中求解最短路徑的有效方法,也是解決眾多搜索問題的有效算法。當(dāng)算法中的距離估算值與實(shí)際值越接近,相應(yīng)的搜索速度也越快。在使用A*算法時(shí),會(huì)創(chuàng)建兩張表,一張是open表,其中保存未訪問過的節(jié)點(diǎn);另一張是closed表,其中保存已訪問過的節(jié)點(diǎn)。我們從起始點(diǎn)出發(fā),查詢與起始點(diǎn)相鄰的點(diǎn),此時(shí),所有下一個(gè)點(diǎn)的啟發(fā)值均為1。
在實(shí)際實(shí)驗(yàn)過程中,我們指導(dǎo)學(xué)生更側(cè)重A*算法的應(yīng)用,在有理解能力的基礎(chǔ)上再深入了解A*算法。為了增加對(duì)比效果,在使用的導(dǎo)航包turtlebot-navigation中還包含了其它避障算法,比如dijkstra算法,學(xué)生可以通過更改相應(yīng)的配置文件來實(shí)現(xiàn)不同避障算法下的移動(dòng)機(jī)器人自主導(dǎo)航。
Rviz是ROS自帶的三維可視化平臺(tái),以話題的形式讓數(shù)據(jù)在各例程中進(jìn)行交流。Rviz相當(dāng)于一個(gè)可以訂閱所有話題的平臺(tái),并按照消息類型將數(shù)據(jù)可視化,并可以在地圖中發(fā)布目標(biāo)點(diǎn)。該平臺(tái)可以方便地圖的構(gòu)建與自主導(dǎo)航,圖1是利用gmapping在Rviz可視化建圖的具體例子。
圖1 Rviz可視化建圖
在完成建圖以后,我們的移動(dòng)機(jī)器人需要弄清楚自己在地圖中的具體位置,因此我們?cè)趯?shí)驗(yàn)中采用了定位軟件包AMCL定位。該軟件包的全稱是Adaptive Monte Carlo Localization,即自適應(yīng)蒙特卡洛定位,也稱之為模擬法,是一種判斷置信度的方法。由于機(jī)器人可能在地圖上的任何位置,因此可以結(jié)合傳感器的輸出數(shù)據(jù)進(jìn)行分析,概率值最大的那個(gè)區(qū)域一般就判斷為機(jī)器人所在的位置。
在該實(shí)驗(yàn)中,我們主要完成添加障礙物并進(jìn)行可視化兩項(xiàng)子任務(wù)。為了模擬已知環(huán)境中忽然出現(xiàn)人體的情況,我們采用添加障礙物的方法進(jìn)行模擬。添加障礙物實(shí)際上是將障礙物發(fā)布到“/map”這個(gè)節(jié)點(diǎn)中去,為了準(zhǔn)確地將障礙物發(fā)布到地圖中的某一個(gè)位置,我們需要使用/clicked_point這個(gè)話題機(jī)制,并最終以坐標(biāo)的形式發(fā)布出來。由于地圖是以一維數(shù)組的形式存儲(chǔ),在構(gòu)建的地圖中,只有0和100兩種狀態(tài),分別代表可通行點(diǎn)和障礙物點(diǎn)。因此,在地圖中添加障礙物時(shí),如果知道了這個(gè)點(diǎn)的坐標(biāo),可以在一維數(shù)組中找到對(duì)應(yīng)這個(gè)坐標(biāo)的編號(hào)。計(jì)算Rviz中所點(diǎn)擊位置對(duì)應(yīng)一維數(shù)組中第幾個(gè)數(shù)的代碼如下所示:
在完成地圖中添加障礙物以后,我們需要將將其在Rviz中進(jìn)行可視化。事實(shí)上,我們并不是為障礙物套上一層可視化的外殼,而是創(chuàng)造障礙物的位置,利用/point_marker這個(gè)話題創(chuàng)造一個(gè)障礙物點(diǎn),并添加其膨脹層。為了更清楚的進(jìn)行觀察,將障礙物點(diǎn)的rgb設(shè)置為r=255.0, g=0以及b=0,即為紅色,同時(shí)設(shè)置該點(diǎn)在x, y方向上的尺度。添加可視化外殼的代碼如下所示:
本實(shí)驗(yàn)利用ROS開源的Kinect+gmapping進(jìn)行建圖,在建圖過程中,為了便于學(xué)生開展實(shí)驗(yàn),我們并未選取過于復(fù)雜的地形,而是在實(shí)驗(yàn)室外的過道內(nèi)進(jìn)行建圖,生成的pgm地圖文件如圖2所示。
圖2 走廊建圖生成的pgm文件
在完成建圖后,我們用ROS開源的程序進(jìn)行導(dǎo)航,再結(jié)合我們添加的障礙物功能以及避障功能完成該實(shí)驗(yàn)。實(shí)驗(yàn)流程如圖3所示:首先是建立一張空白地圖,然后添加障礙物,最后設(shè)置目標(biāo)點(diǎn),移動(dòng)機(jī)器人在自主導(dǎo)航的過程中采用A*算法。
圖3
上述實(shí)驗(yàn)中,設(shè)置目標(biāo)點(diǎn)以后,圖3中的移動(dòng)機(jī)器人[4,5]遵循A*算法稍微繞開障礙物。為了進(jìn)一步觀察移動(dòng)機(jī)器人遇到障礙物的反應(yīng),我們?cè)趫D4中記錄完整的避障過程,具體如下:首先,移動(dòng)機(jī)器人與障礙物的距離靠近時(shí),會(huì)選擇在一旁等待;其次,等待數(shù)秒后,移動(dòng)機(jī)器人重新駛向原定目標(biāo)點(diǎn);最后,在成功避開障礙物以后,移動(dòng)機(jī)器人最終達(dá)到目標(biāo)點(diǎn)。
圖4
通過以上的具體實(shí)驗(yàn),本實(shí)驗(yàn)以ROS平臺(tái)為核心,在教學(xué)過程中采用了“任務(wù)驅(qū)動(dòng)的自主學(xué)習(xí)”方法,設(shè)置了現(xiàn)實(shí)中的移動(dòng)機(jī)器人需要避障這一實(shí)際問題。在完成實(shí)驗(yàn)?zāi)繕?biāo)的過程中,將避障問題又分為四個(gè)子任務(wù),學(xué)生以小組為單位在仿真平臺(tái)上進(jìn)行動(dòng)手能力的實(shí)際訓(xùn)練,從而可以拓展學(xué)生對(duì)機(jī)器人相關(guān)知識(shí)理解的深度與廣度。
此外,本實(shí)驗(yàn)不僅涉及到硬件知識(shí)的掌握,比如激光雷達(dá)和Kinect相機(jī),還要對(duì)相應(yīng)模塊的添加具有一定的編程能力,還可以引導(dǎo)學(xué)生在算法上進(jìn)行優(yōu)化,比如傳統(tǒng)的A*算法,使其避障更高效。該實(shí)驗(yàn)從實(shí)踐角度鞏固學(xué)生在課堂上所學(xué)的知識(shí),有利于學(xué)生提高動(dòng)手能力,并為將來就業(yè)打下堅(jiān)實(shí)的基礎(chǔ)。