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