呂勇,余雷,王詩頌
(蘇州大學機電工程學院,江蘇蘇州,215021)
關鍵字:ROS平臺;移動機器人;避障算法
高等教育是衡量一個國家發展水平的重要標志。隨著社會的快速發展以及國家政策的提出,地方高校需要積極響應并做出改變,培養滿足企業的新型工科人才,在“新工科”背景下進行一流本科專業的建設。我校機電學院的電氣工程及其自動化專業經過不懈的努力,已順利通過中國工程教育專業認證,同時也是教育部卓越工程師教育培養計劃專業、江蘇省一流本科專業以及蘇州大學一流本科專業。
近年來,隨著機器人技術的快速發展,在工業制造、物流快遞以及安防監控等領域的應用日趨普遍。在新工科背景下,并結合高等學校的特點,如何培養出具有創新能力并符合企業需求的高素質人才,成為當前研究的重要課題。機器人技術作為交叉學科的典型代表,涉及了計算機、自動控制、機械以及人工智能等知識,因此對學生的綜合運用能力有比較高的要求。在實驗教學中,要讓學生通過具體的實踐去更好的理解理論知識,并將理論與應用相結合,起到融會貫通的效果。
機器人作為電氣工程及其自動化專業的十分重要的課程之一,從類別來看,其主要分為工業機器人以及服務機器人兩種。本文以服務機器人中的移動機器人[1]作為切入點,基于ROS平臺展開具體的實驗教學方法研究。實驗教學不能僅局限于課堂講授,為了讓學生從復雜的底層代碼閱讀與理解中解放出來,本實驗只需要在軟件平臺上添加新的模塊實現功能。實驗設計依賴ROS的話題機制,以C++語言作為編程語言,在小車turtlebot2上進行例程的實現。
ROS(Robot Operating System)平臺是一個機器人操作平臺,其誕生于斯坦福STAIR項目。作為機器人學習的平臺包含有大量的開源代碼,以及包括TF坐標變換、QT工具箱、RVIZ可視化工具以及GAZEBO仿真平臺在內的大量機器人開發工具。ROS所發售的TURTLEBOT機器人是ROS官方打造的基于ROS的軟硬件學習平臺。ROS很多的開源代碼都是以TURTLRBOT機器人作為硬件平臺實現的。本實驗所搭建的例程實現平臺以TURTLEBOT2機器人為硬件基礎[2,3]。
實驗中還涉及到深度相機,與傳統相機有所不同,深度相機可以捕捉環境的景深信息,因此深度相機可以作為傳感器為gmapping 建圖提供環境信息。而與激光雷達相比,深度相機在建圖準確率與速度上明顯比不上激光雷達,這一點通過深度相機 kinect2和激光雷達velodyne所建的圖中就可以得知。但是,kinect2在行人識別上可以獲得明顯優于激光雷達的效果,深度相機可以直接采用基于深度學習的方法進行人像識別,從而進行針對人的避障。
本實驗采用A*算法進行避障,該算法是一種靜態路網中求解最短路徑的有效方法,也是解決眾多搜索問題的有效算法。當算法中的距離估算值與實際值越接近,相應的搜索速度也越快。在使用A*算法時,會創建兩張表,一張是open表,其中保存未訪問過的節點;另一張是closed表,其中保存已訪問過的節點。我們從起始點出發,查詢與起始點相鄰的點,此時,所有下一個點的啟發值均為1。
在實際實驗過程中,我們指導學生更側重A*算法的應用,在有理解能力的基礎上再深入了解A*算法。為了增加對比效果,在使用的導航包turtlebot-navigation中還包含了其它避障算法,比如dijkstra算法,學生可以通過更改相應的配置文件來實現不同避障算法下的移動機器人自主導航。
Rviz是ROS自帶的三維可視化平臺,以話題的形式讓數據在各例程中進行交流。Rviz相當于一個可以訂閱所有話題的平臺,并按照消息類型將數據可視化,并可以在地圖中發布目標點。該平臺可以方便地圖的構建與自主導航,圖1是利用gmapping在Rviz可視化建圖的具體例子。

圖1 Rviz可視化建圖
在完成建圖以后,我們的移動機器人需要弄清楚自己在地圖中的具體位置,因此我們在實驗中采用了定位軟件包AMCL定位。該軟件包的全稱是Adaptive Monte Carlo Localization,即自適應蒙特卡洛定位,也稱之為模擬法,是一種判斷置信度的方法。由于機器人可能在地圖上的任何位置,因此可以結合傳感器的輸出數據進行分析,概率值最大的那個區域一般就判斷為機器人所在的位置。
在該實驗中,我們主要完成添加障礙物并進行可視化兩項子任務。為了模擬已知環境中忽然出現人體的情況,我們采用添加障礙物的方法進行模擬。添加障礙物實際上是將障礙物發布到“/map”這個節點中去,為了準確地將障礙物發布到地圖中的某一個位置,我們需要使用/clicked_point這個話題機制,并最終以坐標的形式發布出來。由于地圖是以一維數組的形式存儲,在構建的地圖中,只有0和100兩種狀態,分別代表可通行點和障礙物點。因此,在地圖中添加障礙物時,如果知道了這個點的坐標,可以在一維數組中找到對應這個坐標的編號。計算Rviz中所點擊位置對應一維數組中第幾個數的代碼如下所示:

在完成地圖中添加障礙物以后,我們需要將將其在Rviz中進行可視化。事實上,我們并不是為障礙物套上一層可視化的外殼,而是創造障礙物的位置,利用/point_marker這個話題創造一個障礙物點,并添加其膨脹層。為了更清楚的進行觀察,將障礙物點的rgb設置為r=255.0, g=0以及b=0,即為紅色,同時設置該點在x, y方向上的尺度。添加可視化外殼的代碼如下所示:



本實驗利用ROS開源的Kinect+gmapping進行建圖,在建圖過程中,為了便于學生開展實驗,我們并未選取過于復雜的地形,而是在實驗室外的過道內進行建圖,生成的pgm地圖文件如圖2所示。

圖2 走廊建圖生成的pgm文件
在完成建圖后,我們用ROS開源的程序進行導航,再結合我們添加的障礙物功能以及避障功能完成該實驗。實驗流程如圖3所示:首先是建立一張空白地圖,然后添加障礙物,最后設置目標點,移動機器人在自主導航的過程中采用A*算法。

圖3
上述實驗中,設置目標點以后,圖3中的移動機器人[4,5]遵循A*算法稍微繞開障礙物。為了進一步觀察移動機器人遇到障礙物的反應,我們在圖4中記錄完整的避障過程,具體如下:首先,移動機器人與障礙物的距離靠近時,會選擇在一旁等待;其次,等待數秒后,移動機器人重新駛向原定目標點;最后,在成功避開障礙物以后,移動機器人最終達到目標點。

圖4
通過以上的具體實驗,本實驗以ROS平臺為核心,在教學過程中采用了“任務驅動的自主學習”方法,設置了現實中的移動機器人需要避障這一實際問題。在完成實驗目標的過程中,將避障問題又分為四個子任務,學生以小組為單位在仿真平臺上進行動手能力的實際訓練,從而可以拓展學生對機器人相關知識理解的深度與廣度。
此外,本實驗不僅涉及到硬件知識的掌握,比如激光雷達和Kinect相機,還要對相應模塊的添加具有一定的編程能力,還可以引導學生在算法上進行優化,比如傳統的A*算法,使其避障更高效。該實驗從實踐角度鞏固學生在課堂上所學的知識,有利于學生提高動手能力,并為將來就業打下堅實的基礎。