秦曉雙
摘要:隨著機(jī)器人認(rèn)知技術(shù)的發(fā)展,自主機(jī)器人對(duì)任務(wù)的描述正在從物理信息向語(yǔ)義信息轉(zhuǎn)變,這就對(duì)自主機(jī)器人對(duì)環(huán)境的建模描述的精確性和一致性提出了更高的要求。為了解決這一問(wèn)題,機(jī)器人的自主探索協(xié)同定位與建圖(SLAM)自主導(dǎo)航系統(tǒng)設(shè)計(jì)成為當(dāng)今研究熱點(diǎn)。本文設(shè)計(jì)的自主導(dǎo)航系統(tǒng)是在基于ROS操作系統(tǒng)下的智行Mini平臺(tái)實(shí)現(xiàn)的,利用gmapping包,move_base包,amcl包,以及navigation包搭建了一套完整的建圖導(dǎo)航機(jī)器人系統(tǒng),實(shí)現(xiàn)了建圖及自主導(dǎo)航功能。
關(guān)鍵詞:SLAM;自主導(dǎo)航;ROS;建圖
一、前言
現(xiàn)代科技日新月異,人工智能技術(shù)作為科學(xué)技術(shù)的前沿和重要發(fā)展方向,已經(jīng)成為國(guó)內(nèi)外研究機(jī)構(gòu)、高新技術(shù)企業(yè)的熱門研究課題。高智能自主機(jī)器人在軍事、民用和科研等領(lǐng)域的不斷涌現(xiàn)正展現(xiàn)著人工智能技術(shù)的具體發(fā)展。自主機(jī)器人可以在各種環(huán)境的探測(cè)、工廠加工生產(chǎn)、災(zāi)難救援和日常生活服務(wù)等各領(lǐng)域中得到應(yīng)用并發(fā)揮巨大的作用。
在實(shí)際應(yīng)用過(guò)程中,機(jī)器人在執(zhí)行很多任務(wù)的時(shí)候?qū)ζ涔ぷ鳝h(huán)境事先并不知道,即環(huán)境的形狀、大小和障礙物等信息都是未知的。自主機(jī)器人應(yīng)像人一樣具備環(huán)境感知、信息處理、決策判斷和行為執(zhí)行的能力。同時(shí),隨著機(jī)器人認(rèn)知技術(shù)的發(fā)展,自主機(jī)器人對(duì)任務(wù)的描述正在從物理信息向語(yǔ)義信息轉(zhuǎn)變,這就對(duì)自主機(jī)器人對(duì)環(huán)境的建模描述的精確性和一致性提出了更高的要求。為了解決這一問(wèn)題,自主機(jī)器人在陌生的環(huán)境中必須具備自主完成地圖構(gòu)建、定位和自主導(dǎo)航的能力,即機(jī)器人的自主探索協(xié)同定位與建圖(SLAM)。
二、軟件設(shè)計(jì)
2.1 使用gmapping包創(chuàng)建地圖
在ROS中,地圖是一張位圖,表示網(wǎng)絡(luò)被占據(jù)的情況,其中白色像素代表沒(méi)有被占據(jù)的網(wǎng)格,黑色像素代表障礙物,灰色像素代表未知點(diǎn),因此可以使用任意的圖像處理程序處理該位圖。在本系統(tǒng)中,由于配有 Kinect 雙目視覺(jué)傳感器,所以機(jī)器人在其目標(biāo)范圍內(nèi)行動(dòng)時(shí)可以自己創(chuàng)建地圖。為了生成任意具有相同數(shù)據(jù)的測(cè)試地圖供以后不同參數(shù)的gmapping使用,系統(tǒng)使用ROS的 gmapping實(shí)時(shí)定位與繪制地圖(SLAM)節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)會(huì)把從 Kinect傳感器中得到的數(shù)據(jù)整合到一張位圖中。運(yùn)行時(shí)讓機(jī)器人在一個(gè)區(qū)域內(nèi)活動(dòng),同時(shí)記錄測(cè)量數(shù)據(jù)并放入rosbag文件中,然后運(yùn)行SLAM節(jié)點(diǎn)生成一張地圖。
2.2 使用move_base包進(jìn)行路徑規(guī)劃和障礙物躲避
使用 move_base包實(shí)現(xiàn)路徑規(guī)劃和障礙物躲避分為兩步,即首先指定導(dǎo)航目標(biāo)。在指定導(dǎo)航目標(biāo)前,機(jī)器人要提供在指定框架下的目標(biāo)方位,move_base包通過(guò)使用MoveBaseActionGoal 消息指定目標(biāo)。接下來(lái)需要為路徑規(guī)劃設(shè)定參數(shù),在 move_base包節(jié)點(diǎn)運(yùn)行前需要4個(gè)配置文件,這些文件定義了一系列相關(guān)參數(shù),例如越過(guò)障礙物的代價(jià)、機(jī)器人的半徑、路徑規(guī)劃時(shí)要考慮未來(lái)多長(zhǎng)的路、機(jī)器人移動(dòng)的速度等。
2.3 使用amcl包自主定位
amcl包用于讓機(jī)器人在已有的地圖里利用從當(dāng)前機(jī)器人視覺(jué)傳感器中得到的數(shù)據(jù)進(jìn)行定位。當(dāng)amcl包第一次啟動(dòng)時(shí),機(jī)器人需要設(shè)定一個(gè)初始方位,之后amcl 包利用該初始方位確定自己的位置。機(jī)器人初始方位設(shè)定好之后,可以使用“2D Nav Goal”按鈕為機(jī)器人在地圖上指出不同的導(dǎo)航目標(biāo)。必要時(shí),可以使用鼠標(biāo)滾輪放大或者縮小。在機(jī)器人運(yùn)動(dòng)時(shí),機(jī)器人周圍會(huì)圍繞一堆綠色箭頭,這些箭頭代表amcl包返回的方位范圍。當(dāng)機(jī)器人在這個(gè)環(huán)境周圍活動(dòng)時(shí),這堆箭頭可以縮小并作為額外的掃描數(shù)據(jù),讓amcl包修正它對(duì)機(jī)器人方向和位置的估算。
2.4 使用navigation包實(shí)現(xiàn)智行mini的導(dǎo)航功能
導(dǎo)航功能的實(shí)現(xiàn)主要是依靠 navigation 功能包集來(lái)完成的,navigation 是 2D 的導(dǎo)航包集,它通過(guò)接收里程計(jì)數(shù)據(jù)、tf 坐標(biāo)變換樹(shù)以及傳感器數(shù)據(jù),為移動(dòng)機(jī)器人輸出目標(biāo)位置以及安全速度。
導(dǎo)航功能的實(shí)現(xiàn)要有的三個(gè)因素就是地圖、導(dǎo)航的起點(diǎn)、終點(diǎn)目標(biāo),并在導(dǎo)航過(guò)程中不斷根據(jù)里程計(jì)、激光雷達(dá)等傳感器數(shù)據(jù)來(lái)確定自己的位置。在 navigation 導(dǎo)航功能中,首先會(huì)根據(jù)代價(jià)地圖規(guī)劃處起點(diǎn)到終點(diǎn)的路線,然后結(jié)合里程計(jì)信息以及激光雷達(dá)的數(shù)據(jù)判斷當(dāng)前位置并規(guī)劃處當(dāng)前位置附近的局部路線以達(dá)到避障的效果,最終將局部規(guī)劃的路線以速度指令的形式輸出。
三、系統(tǒng)運(yùn)行
在啟動(dòng)手柄控制機(jī)器人來(lái)完成建圖后,要實(shí)現(xiàn)自主導(dǎo)航功能,首先需要打開(kāi)終端,輸入roslaunch zoo_robot robot_lidar.launch啟動(dòng)底盤,然后打開(kāi)新的終端,輸入roslaunch robot_slam navigation.launch運(yùn)行導(dǎo)航功能,然后打開(kāi)新終端,輸入roslaunch robot_slam view_nav.launch,就可以在Rviz下看到機(jī)器人在環(huán)境場(chǎng)景中的一些信息了,如圖1所示。接下來(lái)要通過(guò)2d Nav Goal選擇目標(biāo)點(diǎn)了,這里我們選擇啟動(dòng)腳本,通過(guò)代碼發(fā)布航點(diǎn)。
打開(kāi)新的終端輸入 roslaunch robot_slam navigation_multi_demo.launch,也就是運(yùn)行了一個(gè)名為 navigation_multi_demo.launch 的 python 腳本,之后輸入1確認(rèn),就會(huì)開(kāi)始自動(dòng)發(fā)布航點(diǎn),機(jī)器人就會(huì)自動(dòng)開(kāi)始運(yùn)動(dòng)。
四、總結(jié)
本次設(shè)計(jì)以ROS技術(shù)為基礎(chǔ),使用ROS平臺(tái)對(duì)機(jī)器人軟件系統(tǒng)進(jìn)行搭建,搭建了機(jī)器人的自主導(dǎo)航系統(tǒng)以及地圖創(chuàng)建系統(tǒng),使其能在上位機(jī)控制實(shí)現(xiàn)地圖創(chuàng)建,同時(shí)具有自主探索導(dǎo)航功能。通過(guò)本次設(shè)計(jì),使我對(duì)SLAM自主導(dǎo)航系統(tǒng)設(shè)計(jì)的整個(gè)過(guò)程有了很好的掌握,對(duì)移動(dòng)機(jī)器人有了一定的了解,鞏固了相關(guān)知識(shí)。最大的收獲是對(duì)于課本有了更深刻的了解與認(rèn)識(shí),真正做到了理論與實(shí)踐相結(jié)合,學(xué)以致用。
參考文獻(xiàn):
[1] 鄧志,黎海超. 移動(dòng)機(jī)器人的自主導(dǎo)航技術(shù)的研究綜述[J]. 科技資訊,2016.
[2] 陳金寶,韓冬,聶宏. ROS開(kāi)源機(jī)器人控制基礎(chǔ)[M]. 上海:上海交通大學(xué)出版社,2016.
[3] Joao Santos, Rui P. Rocha. An Evaluation of 2D SLAM Techniques Available in Robot Operating System. IEEE 2013.