魯 翔,彭緒富,2
(1.湖北師范大學 計算機與信息工程學院,湖北 黃石 435002;2.湖北師范大學 文理學院,湖北 黃石 435000)
隨著科學技術的發(fā)展,人工智能的興起,移動機器人迅速發(fā)展[1],目前,機器人已經(jīng)廣泛應用在工業(yè)、農(nóng)業(yè)、醫(yī)療、服務、軍事、娛樂日常生活等多個領域,甚至在危險、骯臟和枯燥的環(huán)境中也有很好的應用[2]。然而在很多情況下,機器人工作空間的信息都是未知的,比如在礦井檢測、深海探索、危險救援[3]等工作環(huán)境下,人類無法進入其中探測情況,所以需要移動機器人進入對其進行探測,構(gòu)建出環(huán)境的地圖。只有在具備了先驗地圖的情況下,才能進行相應的導航、路徑規(guī)劃、避障和其他操作[4]?,F(xiàn)在大多數(shù)的建圖算法,例如Hector SLAM、Karto SLAM和Cartographer[5,6]等,都是通過人工手動、使用鍵盤或者游戲桿進行控制機器人移動,通過激光雷達掃描地圖進行構(gòu)建地圖[7]。在面對大而復雜的環(huán)境中,會比較消耗人力物力,因此機器人的自主探索建圖至關重要[8]。
本文提出一種基于邊界探索的自主探索建圖算法,結(jié)合了Frontier_exploration和Gmapping算法,機器人操作系統(tǒng)(Robot Operating System,ROS)下實現(xiàn)指定區(qū)域建圖,分別通過仿真和實驗驗證了該算法建圖效果良好。
從ROS系統(tǒng)出發(fā),實現(xiàn)指定區(qū)域建圖,主要實現(xiàn)運用Gmapping算法和Frontier_exploration算法進行定位建圖與邊界探索,通過move_base包發(fā)布命令實現(xiàn)機器人移動。
ROS是運行在Ubuntu等主操作系統(tǒng)上的次級操作系統(tǒng),具有分布式的開源軟件架構(gòu),支持C++、Python等多種編程語言,集成了用于機器人視覺開發(fā)的OpenCV庫,擁有SLAM地圖構(gòu)建和導航功能包。ROS可以使用標準化機器人描述格式(URDF)建立自己的機器人模型,也可以使用Gazebo仿真軟件,建立理想的模擬環(huán)境,在模擬環(huán)境中,驅(qū)動機器人進行避障,路徑規(guī)劃,地圖構(gòu)建和導航等仿真實驗[9]。
Frontier_exploration全稱Frontier-based exploration,基于邊界探索方法,由Yamauchi[10]首次提出,核心思想是移動機器人根據(jù)目前已知的環(huán)境信息,通過傳感器掃描周圍環(huán)境找尋未知區(qū)域和空閑區(qū)域的交界處(即邊界),來獲取更多環(huán)境信息[11]。Frontier_exploration算法通過證據(jù)柵格的方式來表示地圖。根據(jù)傳感器獲得的信息,判斷當前環(huán)境是否被占用,可以將所有的區(qū)域分為:未知區(qū)域、空閑區(qū)域、障礙區(qū)域。三種區(qū)域地圖顯示如圖1:
圖1 區(qū)域比較圖(黑色部分代表障礙區(qū)域,灰色部分代表未知區(qū)域,白色部分代表空閑區(qū)域)
帶有F標志的處于未知區(qū)域和空白區(qū)域的交界處,為邊界區(qū)域,機器人通過選擇邊界長度大于自身閾值且距離最近的邊界區(qū)域,來進行下一步的探索[12]。
Gmapping是基于濾波SLAM框架的常用開源SLAM[13,14]算法。由于Gmapping算法可以實時構(gòu)建地圖,在構(gòu)建小場景地圖所需的計算量較小且精度較高[15],本文實驗環(huán)境為室內(nèi)環(huán)境,因此采用該算法作為實驗定位與建圖算法。
move_base是ROS下關于機器人路徑規(guī)劃的中心樞紐。它通過訂閱激光雷達、map地圖、amcl的定位等數(shù)據(jù),然后規(guī)劃出全局和局部路徑,再將路徑轉(zhuǎn)化為機器人的速度信息,最終實現(xiàn)機器人導航。
結(jié)合Frontier_exploration算法、Gmapping算法實現(xiàn)指定區(qū)域建圖,建圖流程如圖2所示:
圖2 建圖流程圖
1)結(jié)合rviz可視化界面,指定機器人要探索的目標區(qū)域(注:目標區(qū)域為一個封閉圖形)。
2)開始使用Gmapping算法定位與構(gòu)建局部地圖,探索檢測未知區(qū)域和空閑區(qū)域的交界處,作為邊界。
3)設置一個閾值,閾值一般設置為機器人的直徑,判斷檢測到邊界的長度與閾值大小,如果邊界長度小于閾值,則為無效邊界,放棄該邊界并記錄;如果邊界長度大于閾值,則將該邊界加入待探索邊界組。
4)在待探索邊界組中,采取距離最近原則探索邊界,使用move_base包控制移動機器人,在探索該邊界的同時更新地圖,再繼續(xù)移動機器人,查看是否仍有未探索的邊界,若有,則返回第二步繼續(xù)進行,直至再無未探索邊界后,建圖完成。
采用基于兩輪差速驅(qū)動的Turtlebot3平臺,如圖3所示。硬件搭配有華夫板底盤、基于Arduino的開源控制板OpenCR、樹莓派3B+、存儲卡、計算機、編碼器、IMU(慣性測量單元)、360°激光傳感器LiDAR等器件。
圖3 Turtlebot3機器人
分別在計算機和樹莓派3B+上安裝Ubuntu16.04系統(tǒng)和Ubuntu mate16.04 系統(tǒng),配上相應版本的ROS Kinetic Kame系統(tǒng),通過SSH服務使得計算機與樹莓派進行信息交互。指定區(qū)域建圖算法建圖時,通過接收激光傳感器掃描環(huán)境信息數(shù)據(jù)、里程計數(shù)據(jù)和IMU數(shù)據(jù),實現(xiàn)初步地圖建立與定位,通過rviz可視化軟件指定建圖區(qū)域,通過move_base包發(fā)布速度指令通過OpenCR電路板發(fā)布到機器人底盤,從而控制機器人移動和建圖。
基于Gazebo仿真平臺,建立了一個如圖4右側(cè)的仿真環(huán)境,仿真環(huán)境為一個六邊形加九個圓柱組成,分別對Gmapping算法和本文提出的指定區(qū)域建圖算法進行模擬仿真,圖4和圖5分別展示了兩種算法建圖的過程,Gmapping算法通過鍵盤控制機器人移動掃描環(huán)境建圖,后者通過rviz可視化軟件,運行Publish Point來給定探索區(qū)域進行建圖,建圖完成后兩種算法保存的地圖對比如圖6所示,建圖所需時間如表1所示。
圖4 Gmapping算法建圖
圖5 指定區(qū)域建圖算法建圖
表1 兩種算法建圖時間對比分析
圖6 兩種算法仿真建圖結(jié)果對比
對比仿真建圖的結(jié)果和建圖所需時間對比,在環(huán)境地圖較規(guī)則的時候,本文提出的指定區(qū)域建圖算法和常用的Gmapping算法建圖效果無差別,然而本算法建圖時間更短,而且只用給定一個初始探索的區(qū)域,后續(xù)建圖便不需要人手工控制,更方便。
在此搭建一個總尺寸為4×4m小型實驗環(huán)境,如圖7所示,為了排除人為走動對建圖的影響,實際機器人探索建圖的環(huán)境為紅線以上的部分。
圖7 實驗環(huán)境地圖
兩種算法建圖過程和仿真,對比圖8中兩種算法結(jié)果,可以看出兩種算法對環(huán)境建圖效果大致上都能滿足后續(xù)導航的需要,而本算法建圖時間更短,但是在障礙物細小且過多的情況下,建圖效果不如Gmapping算法,在這些地方容易出現(xiàn)自轉(zhuǎn)不前等情況。
圖8 兩種算法實驗建圖結(jié)果對比
本文提出了一種基于邊界探索的指定區(qū)域建圖算法,從仿真和實際環(huán)境下,對比Gmapping算法建圖效果,兩種算法都能夠完整地探索環(huán)境并建立地圖。在較為寬敞且規(guī)則的環(huán)境下,本文算法在建圖效率更好。Gmapping算法因為在人為控制下,速度過快或者過慢都會影響建圖的效果,有時需要多次探索重復的地方,本文算法則不會出現(xiàn)該問題。但是在過于復雜且障礙物過多的情況下,本文算法建圖效果略差,且有時會在原地打轉(zhuǎn),這也是后續(xù)需要優(yōu)化的重點之一。