胡俊立 楊光
【摘 要】導(dǎo)航系統(tǒng)是移動機(jī)器人系統(tǒng)中的關(guān)鍵組成部分,主要包括地圖構(gòu)建、定位和路徑規(guī)劃3個部分。近年來,關(guān)于機(jī)器人導(dǎo)航系統(tǒng)的研究越來越多,但這些研究大都集中在底層控制器結(jié)構(gòu)和算法上,對上層控制軟件的研究少之又少。文章從解決機(jī)器人導(dǎo)航定位的實際問題出發(fā),利用Kinect雙目視覺傳感器獲得三維點云數(shù)據(jù),并使用ROS下的工具包move_base、gmapping和amcl設(shè)計了一套機(jī)器人導(dǎo)航方案,并在樣機(jī)上進(jìn)行了實驗測試。
【關(guān)鍵詞】ROS;路徑規(guī)劃;導(dǎo)航系統(tǒng)
【中圖分類號】TP242 【文獻(xiàn)標(biāo)識碼】A 【文章編號】1674-0688(2018)07-0072-02
近年來,關(guān)于機(jī)器人導(dǎo)航系統(tǒng)的研究越來越多,但這些研究大都集中在底層控制器結(jié)構(gòu)和算法上,對上層控制軟件的研究少之又少。本文從解決機(jī)器人導(dǎo)航定位的實際問題出發(fā),利用Kinect雙目視覺傳感器獲得三維點云數(shù)據(jù),并使用ROS下的工具包move_base、gmapping和amcl設(shè)計了一套機(jī)器人導(dǎo)航方案,并在樣機(jī)上進(jìn)行了實驗測試。
1 系統(tǒng)結(jié)構(gòu)
導(dǎo)航系統(tǒng)由Kinect2雙目視覺傳感器、主控計算機(jī)和TurtleBot3(Burger)機(jī)器人開發(fā)平臺組成。Kinect2是“微軟”在2010發(fā)布的一款體感外設(shè),它是一種雙目視覺傳感器,主要由紅外攝像機(jī)、紅外深度攝像頭、彩色攝像頭、麥克風(fēng)陣列及仰角控制電機(jī)組成,借助于“微軟”強(qiáng)大的技術(shù)力量,它可以完成即時動態(tài)捕捉、影像辨識、麥克風(fēng)輸入、語音辨識、社群互動等功能。使用Kinect可以獲得三維點云數(shù)據(jù),一方面這些數(shù)據(jù)可以用來創(chuàng)建二維環(huán)境地圖,另一方面只要對這些數(shù)據(jù)進(jìn)行適當(dāng)處理就能建立描述三維場景的地圖。在Kinect出現(xiàn)之前,只能使用航拍飛行器或者三維掃描激光測距儀獲取環(huán)境的三維場景圖,使導(dǎo)航系統(tǒng)的成本大大增加。而Kinect中的紅外攝像機(jī)、紅外深度攝像頭等傳感器的使用將會使機(jī)器人導(dǎo)航系統(tǒng)的成本大大下降。主控計算機(jī)采用ThinkPadX1筆記本電腦,采用英特爾酷睿i5-8250U處理器,操作系統(tǒng)安裝的是Ubuntu14.04,ROS版本選擇ROS Indigo版本。通過RS232串口與TurtleBot3搭載的DSP通信,通過USB接口與Kinect2通信。在實際測試中,直接選擇安裝好相應(yīng)版本ROS的Ubuntu鏡像。TurtleBot3是iRobot公司生產(chǎn)的兩輪移動機(jī)器人,該機(jī)器人作為機(jī)器人編程開發(fā)的一個基礎(chǔ)平臺,開發(fā)者可以直接使用TurtleBot3自帶的軟、硬件,根據(jù)平臺的軟、硬件接口即可開發(fā)出所需的功能。
ROS是面向機(jī)器人的開源操作系統(tǒng),它能夠提供類似傳統(tǒng)操作系統(tǒng)的諸多功能,如硬件抽象、底層設(shè)備控制、進(jìn)程間消息傳遞和程序包管理等。此外,它還提供相關(guān)工具和庫,用于獲取、編譯、編輯代碼及在多個計算機(jī)之間運行程序完成分布式計算。本文選用ROS作為導(dǎo)航系統(tǒng)開發(fā)的軟件平臺。作為一種開源機(jī)器人操作系統(tǒng),它提供了多種工具程序和庫,用于編寫運行多機(jī)整合的程序。ROS的首要設(shè)計目標(biāo)是在機(jī)器人開發(fā)領(lǐng)域提高代碼復(fù)用率。ROS是一種分布式處理框架,這種框架名為Nodes。這使得可執(zhí)行文件可以單獨設(shè)計,并且在運行時松散耦合。這些過程可以封裝到數(shù)據(jù)包Package和堆棧Stacks中,以便于共享和分發(fā)。ROS還支持代碼庫的聯(lián)合系統(tǒng),使協(xié)作也能分發(fā)。這種從文件系統(tǒng)級別到社區(qū)一級的設(shè)計使獨立決定發(fā)展和實施工作成為可能。這些功能都由ROS的基礎(chǔ)工具來實現(xiàn)。ROS的運行框架是使用一種ROS通信模塊實現(xiàn)模塊間P2P的松耦合和網(wǎng)絡(luò)連接處理架構(gòu),它執(zhí)行若干種類型的通信,包括基于服務(wù)的同步RPC(遠(yuǎn)程過程調(diào)用)通信、基于TOPIC的異步數(shù)據(jù)流通信及參數(shù)服務(wù)器上的實時性。
2 導(dǎo)航系統(tǒng)設(shè)計
在設(shè)計導(dǎo)航系統(tǒng)時,主要使用到了ROS的3個工具包:move_base、gmapping和amcl。其中,move_base包用于讓機(jī)器人在指定的框架內(nèi)移動到目標(biāo)位置;gmapping包用于從Kinect雙目視覺傳感器采集到的數(shù)據(jù)來繪制地圖;amcl包用于在當(dāng)前地圖內(nèi)定位機(jī)器人。
2.1 使用move_base包進(jìn)行路徑規(guī)劃和障礙物躲避
move_base包實現(xiàn)了一個完成指定導(dǎo)航目標(biāo)的ROS行為,在move_base包中包含了base_local_planner,在為機(jī)器人尋路的時候,base_local_planner結(jié)合了從全局和本地地圖得到的距離測量數(shù)據(jù)?;谌值貓D的路徑規(guī)劃是在機(jī)器人向下一個目的地出發(fā)前開始的,這個過程中會考慮到已知的障礙物和被標(biāo)記成未知的區(qū)域,要使機(jī)器人實際動起來,本地路徑規(guī)劃模塊會監(jiān)聽傳回來的傳感器數(shù)據(jù),并選擇合適的線速度和角速度讓機(jī)器人走完全局路徑規(guī)劃上的當(dāng)前段。上位機(jī)將會顯示本地的路徑規(guī)劃模塊是如何隨著時間推移而不斷做出調(diào)整的。使用move_base包實現(xiàn)路徑規(guī)劃和障礙物躲避分為兩步,即首先指定導(dǎo)航目標(biāo)。在指定導(dǎo)航目標(biāo)前,機(jī)器人要提供在指定框架下的目標(biāo)方位,move_base包通過使用MoveBaseActionGoal消息指定目標(biāo)。接下來需要為路徑規(guī)劃設(shè)定參數(shù),在move_base包節(jié)點運行前需要4個配置文件,這些文件定義了一系列相關(guān)參數(shù),例如越過障礙物的代價、機(jī)器人的半徑、路徑規(guī)劃時要考慮未來多長的路、機(jī)器人移動的速度等。
2.2 使用gmapping包創(chuàng)建地圖
在ROS中,地圖是一張位圖,表示網(wǎng)絡(luò)被占據(jù)的情況,其中白色像素代表沒有被占據(jù)的網(wǎng)格,黑色像素代表障礙物,灰色像素代表未知點,因此可以使用任意的圖像處理程序處理該位圖。在本系統(tǒng)中,由于配有Kinect雙目視覺傳感器,所以機(jī)器人在其目標(biāo)范圍內(nèi)行動時可以自己創(chuàng)建地圖。為了生成任意具有相同數(shù)據(jù)的測試地圖供以后不同參數(shù)的gmapping使用,系統(tǒng)使用ROS的gmapping實時定位與繪制地圖(SLAM)節(jié)點,這個節(jié)點會把從Kinect傳感器中得到的數(shù)據(jù)整合到一張位圖中。運行時讓機(jī)器人在一個區(qū)域內(nèi)活動,同時記錄測量數(shù)據(jù)并放入rosbag文件中,然后運行SLAM節(jié)點生成一張地圖。
2.3 使用amcl包導(dǎo)航和定位
amcl包用于讓機(jī)器人在已有的地圖里利用從當(dāng)前機(jī)器人視覺傳感器中得到的數(shù)據(jù)進(jìn)行定位。當(dāng)amcl包第一次啟動時,機(jī)器人需要設(shè)定一個初始方位,之后amcl包利用該初始方位確定自己的位置。為了設(shè)定初始方位,在RViz可視化工具中點擊“2D Pose Estimate”,然后在地圖上單擊機(jī)器人的位置,當(dāng)按下鼠標(biāo)左鍵時會出現(xiàn)一個巨大的綠色箭頭,移動鼠標(biāo)使箭頭方向和機(jī)器人方向一致,最后松開鼠標(biāo)。機(jī)器人初始方位設(shè)定好之后,可以使用“2D Nav Goal”按鈕為機(jī)器人在地圖上指出不同的導(dǎo)航目標(biāo)。必要時,可以使用鼠標(biāo)滾輪放大或者縮小。在機(jī)器人運動時,機(jī)器人周圍會圍繞一堆綠色箭頭,這些箭頭代表amcl包返回的方位范圍。當(dāng)機(jī)器人在這個環(huán)境周圍活動時,這堆箭頭可以縮小并作為額外的掃描數(shù)據(jù),讓amcl包修正它對機(jī)器人方向和位置的估算。
為了驗證所涉及的導(dǎo)航系統(tǒng)能夠?qū)崿F(xiàn)在未知環(huán)境下的定位與導(dǎo)航功能,筆者對機(jī)器人的障礙物躲避能力進(jìn)行了測試。在距離目標(biāo)一定距離外啟動機(jī)器人,在機(jī)器人運動路徑前方放置障礙物。測試過程中,機(jī)器人會按照規(guī)劃的路徑繞過障礙物,然后繼續(xù)向目標(biāo)移動。
3 結(jié)語
本文基于開源機(jī)器人操作系統(tǒng)ROS,利用Kinect雙目視覺傳感器獲得三維點云數(shù)據(jù),并使用ROS下的工具包move_base、gmapping和amcl設(shè)計了一套機(jī)器人導(dǎo)航方案,并在樣機(jī)上進(jìn)行了實驗測試。本文為機(jī)器人導(dǎo)航系統(tǒng)的研究提供了一條切實可行的思路和方案,在此方案的基礎(chǔ)上可以進(jìn)行更復(fù)雜的應(yīng)用研究。
參 考 文 獻(xiàn)
[1]蔣浩然,陳軍,王虎,等.移動機(jī)器人自動導(dǎo)航技術(shù)研究進(jìn)展[J].西北農(nóng)林科技大學(xué)學(xué)報:自然科學(xué)版,2011,39(12):207-213.
[2]白亮亮,平雪良,仇恒坦,等.分布式室內(nèi)移動機(jī)器人的定位與導(dǎo)航[J].輕工機(jī)械,2016,34(4):54-57.
[3]鄧志,黎海超.移動機(jī)器人的自動導(dǎo)航技術(shù)的研究綜述[J].科技資訊,2016,14(33):142-144.
[4]陳金寶,韓冬,聶宏,等.ROS開源機(jī)器人控制基礎(chǔ)[M].上海:上海交通大學(xué)出版社,2016.
[責(zé)任編輯:鐘聲賢]