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