許志明,張秉天,鄒嘉俊,王 鳳,魯鵬程,倪偉傳
(1.中山大學(xué)新華學(xué)院 信息科學(xué)學(xué)院,廣東 廣州 510520;2.中山大學(xué)新華學(xué)院 設(shè)備與實(shí)驗(yàn)室管理處,廣東 廣州 510520)
近年來,智能小車在各方面的應(yīng)用日益廣泛,與之相關(guān)的技術(shù)已在國(guó)內(nèi)外智能小車領(lǐng)域掀起研究熱潮。對(duì)環(huán)境的認(rèn)識(shí)和定位從而實(shí)現(xiàn)自主導(dǎo)航是智能小車智能化的重要標(biāo)志和特征。未知環(huán)境下的即時(shí)定位與地圖構(gòu)建(SLAM)一直是智能小車技術(shù)領(lǐng)域的研究熱點(diǎn)[1-3]。智能移動(dòng)機(jī)器人在自主性地執(zhí)行外部任務(wù)時(shí),往往需要自主導(dǎo)航系統(tǒng)或者定位技術(shù)的輔助,使得機(jī)器人能夠根據(jù)系統(tǒng)地圖提升移動(dòng)至目的地,從而執(zhí)行任務(wù)[4-5]。然而對(duì)于目前常用的定位系統(tǒng),例如GPS,在存在遮擋條件或者在室內(nèi)執(zhí)行任務(wù)時(shí),往往會(huì)出現(xiàn)定位不準(zhǔn),無法識(shí)別區(qū)域位置等問題,這使得機(jī)器人在移動(dòng)過程中無法正確地進(jìn)行判斷,很可能無法移動(dòng)至目的地。
為了解決移動(dòng)機(jī)器人在移動(dòng)至遮蔽環(huán)境或者室內(nèi)時(shí)定位不準(zhǔn)的問題,設(shè)計(jì)了ROS系統(tǒng)的激光SLAM視覺智能勘察小車。該系統(tǒng)采用的激光SLAM搭配視覺攝像頭可以解決室內(nèi)環(huán)境的物體定位及地圖構(gòu)建問題;采用的是開源ROS機(jī)器人操作平臺(tái)來設(shè)計(jì)智能小車的控制系統(tǒng),具備易掌握,易修改,易控制以及功能可擴(kuò)展性強(qiáng)等特點(diǎn),并通過global planner功能為小車規(guī)劃從當(dāng)前位置至目的地的導(dǎo)航路線,從而達(dá)到最優(yōu)化,使其更加適用于現(xiàn)實(shí)生活之中。
實(shí)現(xiàn)一種ROS系統(tǒng)的激光SLAM視覺智能勘察小車,采用了開源機(jī)器人系統(tǒng)ROS[6-7];ROS開源工具擁有非常強(qiáng)大的圖形化模擬環(huán)境,能夠便捷地實(shí)現(xiàn)對(duì)機(jī)器人小車的控制;通過深度攝像頭采集圖像數(shù)據(jù),實(shí)現(xiàn)人體識(shí)別,采用激光雷達(dá)結(jié)合SLAM技術(shù)[8-10],可以實(shí)現(xiàn)測(cè)距、避障,以及室內(nèi)外定位和自主導(dǎo)航功能。
系統(tǒng)的整體框架可以分為應(yīng)用層、導(dǎo)航層、硬件驅(qū)動(dòng)層和硬件層。在硬件層中,以STM32為主控核心,連接其他的驅(qū)動(dòng)和功能模塊外接電路。通過硬件層和硬件驅(qū)動(dòng)層的結(jié)合,來實(shí)現(xiàn)整體系統(tǒng)各功能部件的運(yùn)作。其中導(dǎo)航層主要是通過激光雷達(dá)和深度相機(jī)來實(shí)現(xiàn)自主導(dǎo)航與建圖、避障等功能。通過在上位機(jī)接收該智能小車發(fā)送的數(shù)據(jù),可以查看小車的建圖數(shù)據(jù)及導(dǎo)航數(shù)據(jù)。
本系統(tǒng)的電機(jī)驅(qū)動(dòng)模塊里采用的是Stm32驅(qū)動(dòng)板,采用STM32作為電機(jī)的主控器是考慮到STM32芯片體積小,引腳結(jié)構(gòu)功能全面,并且STM32有官方庫(kù)文件,在進(jìn)行編程時(shí)可以方便地使用其接口函數(shù)。而且使用STM32芯片進(jìn)行開發(fā)的產(chǎn)品可移植性高,便于后期的再使用,STM32的低功耗也是本系統(tǒng)將其作為電機(jī)驅(qū)動(dòng)板的考慮原因之一。由于系統(tǒng)的智能小車所搭載的鋰電池容量有限,為了得到更大的續(xù)航,需要將更多的能耗用于底輪驅(qū)動(dòng)上,因此其他模塊會(huì)盡量考慮節(jié)能問題。
圖1為智能小車的整體外觀結(jié)構(gòu)的設(shè)計(jì)圖,按照已構(gòu)思好的外觀設(shè)計(jì)圖來對(duì)小車各部分硬件進(jìn)行組裝搭配。其中最底層為小車的移動(dòng)底輪與第一層承重板,第一層承重板上面是電機(jī)驅(qū)動(dòng)板,ROS主控板(采用的是樹莓派3B),鋰電池,陀螺儀傳感器。第二層承重板上面搭載激光雷達(dá)。第三層承重板上面搭載深度攝像頭。
圖1 小車的整體設(shè)計(jì)圖
系統(tǒng)的軟件設(shè)計(jì)部分包括ROS控制系統(tǒng)設(shè)計(jì)、上位機(jī)控制界面設(shè)計(jì)、建圖算法等。ROS控制系統(tǒng)設(shè)計(jì)用于設(shè)計(jì)出跨平臺(tái)的機(jī)器人控制系統(tǒng);上位機(jī)采用ROS開發(fā)了簡(jiǎn)易的人機(jī)交互界面,運(yùn)行的上位機(jī)系統(tǒng)是Ubuntu系統(tǒng);而構(gòu)建地圖則是采用的激光SLAM搭配視覺攝像頭來實(shí)現(xiàn)對(duì)室內(nèi)環(huán)境的地圖構(gòu)建。
1.2.1 ROS控制系統(tǒng)設(shè)計(jì)
在智能小車控制系統(tǒng)的設(shè)計(jì)上,采用的是ROS開源機(jī)器人系統(tǒng)設(shè)計(jì)工具。ROS提供了許多易于調(diào)用的功能函數(shù),在設(shè)計(jì)智能小車控制系統(tǒng)時(shí),便于使用這些功能函數(shù)來設(shè)計(jì)智能小車的控制程序,提高了開發(fā)效率。并且采用ROS進(jìn)行設(shè)計(jì),可以設(shè)計(jì)跨平臺(tái)的機(jī)器人控制系統(tǒng),降低了硬件選擇成本。
為了有效創(chuàng)建地圖并進(jìn)行定位和導(dǎo)航[11-12],在智能小車移動(dòng)的過程中,采用激光雷達(dá)可以確定小車在地圖上的位置,實(shí)現(xiàn)定位功能;而對(duì)于小車移動(dòng)路線的導(dǎo)航問題,根據(jù)小車位置、目的地位置及地圖信息,系統(tǒng)自動(dòng)進(jìn)行路徑規(guī)劃,通過global planner功能為小車規(guī)劃從當(dāng)前位置至目的地的導(dǎo)航路線,同時(shí)根據(jù)小車移動(dòng)過程中所采集到的障礙物位置等信息,導(dǎo)航路線會(huì)實(shí)時(shí)更新,不斷修正從而實(shí)現(xiàn)避開障礙物,到達(dá)目的地的路線[13-14]。
1.2.2 控制界面
為了對(duì)智能小車的實(shí)時(shí)移動(dòng)環(huán)境及定位和導(dǎo)航情況進(jìn)行勘測(cè),上位機(jī)采用ROS開發(fā)了簡(jiǎn)易的人機(jī)交互界面,上位機(jī)的運(yùn)行系統(tǒng)為Ubuntu,可以觀察到智能小車在地圖上的位置。
地圖的構(gòu)建則是采用的激光雷達(dá)來實(shí)現(xiàn),其中對(duì)于地圖的構(gòu)建需要通過利用rqt圖形工具來找到滿意的PID值。
在Robot端運(yùn)行下面命令:
$ roslaunch rikirobot bringup.launch
運(yùn)行PID配置節(jié)點(diǎn):
rosrun riki_pid pid_configure
在開發(fā)電腦端執(zhí)行行鍵盤控制命令:
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
打開rqt,通過執(zhí)行下面命令:$rqt
加載pid圖形配置文件Perspective>Import選擇~/catkin_ws/src/riki_pid/riki_pid. perspective
通過上面調(diào)試用戶得到最合適的PID值后,在控制面板上進(jìn)行PID校正,執(zhí)行命令:$ platformio run --target upload
運(yùn)行下面命令:
$cd ~/catkin_ws/src/rikirobot_project/
rikirobot/maps
$ls -a house.pgm house.yaml
圖2是確定PID值后的運(yùn)行結(jié)果。
圖2 檢查地圖效果圖
為了使系統(tǒng)得到的數(shù)據(jù)更為準(zhǔn)確,文中先對(duì)系統(tǒng)的里程計(jì)誤差進(jìn)行分析與標(biāo)定,并通過陀螺儀誤差值來提高智能小車在移動(dòng)過程中所測(cè)量的里程精度,并通過觀察地圖構(gòu)建效果與構(gòu)建時(shí)間,來驗(yàn)證系統(tǒng)的可行性。
傳統(tǒng)方法考慮的是移動(dòng)機(jī)器人的主動(dòng)輪的轉(zhuǎn)動(dòng)角度與位移是一種線性關(guān)系[15],但在實(shí)際的操作中發(fā)現(xiàn)小車在實(shí)際行駛過程中可能存在打滑現(xiàn)象;因此,當(dāng)出現(xiàn)打滑的情況時(shí),這種動(dòng)輪的轉(zhuǎn)動(dòng)角度與位移的線性關(guān)系就不存在了,如果仍然以線性關(guān)系作為標(biāo)準(zhǔn),會(huì)發(fā)生定位誤差。而誤差主要來源兩處:系統(tǒng)性誤差和非系統(tǒng)性誤差。
通過研究,發(fā)現(xiàn)導(dǎo)致誤差來源于負(fù)載大小與負(fù)載重心不一致,同時(shí)除了本身存在的問題外環(huán)境因素也是不可忽略的,例如地面不平導(dǎo)致打滑或者障礙物過多,同樣也會(huì)影響誤差的產(chǎn)生。為了解決該誤差問題,文中采取矯正智能小車的系統(tǒng)參數(shù)的方法。對(duì)于智能小車的陀螺儀誤差,采取使智能小車以不同的角速度(0.2~1.0 rad/s)原地旋轉(zhuǎn)180°,在旋轉(zhuǎn)之后觀測(cè)實(shí)驗(yàn)結(jié)果,對(duì)比里程角度信息和實(shí)際角度誤差;圖3為實(shí)驗(yàn)的誤差結(jié)果。
圖3 陀螺儀誤差
由圖3可以看出,小車的運(yùn)動(dòng)角度誤差隨著角速度的變化同樣呈現(xiàn)非線性變化。根據(jù)實(shí)際情況,為了提高智能小車在移動(dòng)過程中所測(cè)量的里程精度,在該系統(tǒng)中所采取的措施是對(duì)智能小車的里程計(jì)實(shí)行標(biāo)定,其中采取的方法是:里程計(jì)以0.3 m/s的線速度向前移動(dòng),如果位移達(dá)到1 m時(shí),智能小車會(huì)原地旋轉(zhuǎn)90°,不斷采取該方法直至四次,直至智能小車的移動(dòng)軌跡為正方形。
由于前面的測(cè)試是分模塊單獨(dú)測(cè)試,為了保障整體系統(tǒng)校準(zhǔn)及測(cè)試正常,還需要將整體智能小車進(jìn)行運(yùn)行測(cè)試;文中在樹莓派主控板的終端上執(zhí)行slam構(gòu)建地圖,其中智能小車加載地圖成功圖像如圖4所示。
圖4 小車地圖加載
當(dāng)?shù)貓D加載成功時(shí),小車便會(huì)對(duì)周圍環(huán)境進(jìn)行掃描,即可將所經(jīng)過的區(qū)域都進(jìn)行掃描并加入到構(gòu)建的地圖中,并將數(shù)據(jù)上傳回上位機(jī)控制界面,其數(shù)據(jù)延時(shí)時(shí)間為0.2 s,基本可以實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)傳送與地圖的構(gòu)建。
通過觀察圖5、圖6可以看到,系統(tǒng)所構(gòu)建的地圖場(chǎng)景邊界輪廓清晰,與場(chǎng)地環(huán)境基本一樣,說明本次整體的系統(tǒng)測(cè)試成功。
圖5 場(chǎng)景1
開發(fā)了一種ROS系統(tǒng)的激光SLAM視覺智能勘察小車,該智能小車在室內(nèi)及遮蔽環(huán)境下仍然可以達(dá)到一定的定位及導(dǎo)航準(zhǔn)確度。通過開源ROS機(jī)器人操作平臺(tái)來設(shè)計(jì)智能小車的控制系統(tǒng),使得系統(tǒng)具備易修改、易控制等特點(diǎn);采用激光雷達(dá)SLAM,使其在室內(nèi)或遮蔽環(huán)境下相比采用傳統(tǒng)雷達(dá)SLAM或視覺SLAM具有更高的定位精度與抗干擾性。當(dāng)然,該系統(tǒng)存在上位機(jī)與智能小車的通信距離有限的問題,當(dāng)智能小車與控制終端的距離超過300 M的wifi有效距離時(shí),會(huì)出現(xiàn)信號(hào)收發(fā)較差的情況。這將作為日后的研究方向,對(duì)系統(tǒng)進(jìn)行進(jìn)一步優(yōu)化,使其更加適用。