徐雨桐 趙金鵬 靳文庸 千承輝
(吉林大學(xué) 儀器科學(xué)與電氣工程學(xué)院,長(zhǎng)春 130061)
目前,機(jī)器人作為緩解社會(huì)壓力、推動(dòng)民生科技的關(guān)鍵技術(shù),早已成為人類的伙伴[1-2]。其中服務(wù)型機(jī)器人可實(shí)現(xiàn)智能控制中的多方面應(yīng)用,例如采用SLAM(Simultaneous Localization And Mapping)技術(shù)進(jìn)行建圖,利用蒙特卡羅定位算法進(jìn)行定位,調(diào)用OpenCV 技術(shù)進(jìn)行場(chǎng)景識(shí)別等。但因這些技術(shù)對(duì)硬件要求較高,程序可移植性和兼容性較差,且當(dāng)面對(duì)陌生環(huán)境時(shí)需手動(dòng)操作鍵盤建圖,故不適合進(jìn)行二次開發(fā)。如果在系統(tǒng)中加入控制器與傳感器數(shù)據(jù)采集模塊,就需要匹配操作系統(tǒng)協(xié)調(diào)并保證各個(gè)子程序的正常運(yùn)行,控制和交互信息的有效傳遞,以及異常和錯(cuò)誤的及時(shí)處理等,否則很難實(shí)現(xiàn)復(fù)雜的應(yīng)用[3-4]。
筆者利用光電傳感器返回的信號(hào)模擬鍵盤控制信號(hào),結(jié)合SLAM 技術(shù)實(shí)現(xiàn)機(jī)器人自主建圖功能,采用模塊化編程的思想設(shè)計(jì)實(shí)現(xiàn)多個(gè)輸入輸出接口,提高機(jī)器人系統(tǒng)的兼容性、擴(kuò)展性和程序可移植性,設(shè)計(jì)可搭載攝像頭和聲音傳感器等多個(gè)模塊的自適應(yīng)倉庫值守機(jī)器人。
自適應(yīng)值守機(jī)器人系統(tǒng)整體結(jié)構(gòu)如圖1 所示,系統(tǒng)供電采用24~26 V 鋰電池,由上位機(jī)(微處理器和STM32 控制器)、下位機(jī)(運(yùn)動(dòng)控制)、信號(hào)采集模塊(激光雷達(dá)、陀螺儀和光電傳感器等)、電源模塊(電源供給和電壓顯示)、通信模塊(遠(yuǎn)端顯示及無線通信)和外搭載模塊(聲音及圖像檢測(cè))等6 個(gè)硬件模塊組成。
圖1 系統(tǒng)整體結(jié)構(gòu)Fig.1 The overall structure of system
圖1 中,i5 微處理器內(nèi)裝配ROS(Robot Operating System)操作系統(tǒng),配有無線網(wǎng)卡、USB、HDMI(High Definition Multimedia Interface)等接口;系統(tǒng)由二維激光雷達(dá)和九軸姿態(tài)傳感器完成導(dǎo)航,STM32處理器采集光電傳感器信號(hào)輔助完成自主建圖;電源模塊提供給上下位機(jī)模塊匹配的電源,可實(shí)時(shí)監(jiān)測(cè)電壓值并顯示;攝像頭模塊支持物聯(lián)網(wǎng)云平臺(tái)使用,可實(shí)時(shí)回傳機(jī)器人周圍景像;聲音檢測(cè)模塊監(jiān)測(cè)周圍音量并輸出相應(yīng)的電壓值,支持物聯(lián)網(wǎng)云平臺(tái)實(shí)時(shí)監(jiān)測(cè)是否有異常響聲;三輪全向底盤的電機(jī)采用帶編碼器的直流電機(jī),輪子采用麥克納姆輪,控制機(jī)器人360?平面運(yùn)動(dòng)。值守機(jī)器人系統(tǒng)通過傳感器獲取機(jī)器人姿態(tài)信息和周圍環(huán)境信息,搭載攝像頭、噪聲采集等多種監(jiān)測(cè)傳感器,通過算法實(shí)現(xiàn)自主建圖、導(dǎo)航、自主回歸和遠(yuǎn)程監(jiān)控等功能。
采用Arduino 控制器進(jìn)行機(jī)器人底盤控制,利用麥克納姆輪實(shí)現(xiàn)機(jī)器人的穩(wěn)定、全向運(yùn)動(dòng),其運(yùn)動(dòng)模型如圖2a 所示。Arduino 控制器具有豐富的標(biāo)準(zhǔn)化接口,支持SPI(Serial Peripheral Interface)、IIC(Inter-Integrated Circuit)和RS232 等通信方式,以規(guī)范的標(biāo)準(zhǔn)庫和豐富的功能包提高程序的可擴(kuò)展性和可移植性。
圖2 三輪全向底盤運(yùn)動(dòng)模型Fig.2 Three-wheel all-directional chassis motion model
圖2 中A、B、C 代表機(jī)器人的3 個(gè)輪子,坐標(biāo)系均為位置坐標(biāo)系。機(jī)器人X方向和Y方向的速度分量,以及運(yùn)動(dòng)的方向角為
其中Va,Vb,Vc分別為A,B,C 3 個(gè)輪子的速度,機(jī)器人行進(jìn)過程中的坐標(biāo)變換關(guān)系如圖2b 所示[5]。機(jī)器人在真實(shí)參考框架XOY下的終點(diǎn)位姿
該系統(tǒng)主要采用i5 微處理器運(yùn)行上位機(jī)軟件,軟件結(jié)構(gòu)如圖3 所示。具體功能及其實(shí)現(xiàn)方式如表1所示。上位機(jī)主要基于Ubuntu 環(huán)境進(jìn)行ROS 操作系統(tǒng),三維可視化平臺(tái)Rviz 顯示所建地圖、機(jī)器人位置等信息,遠(yuǎn)程控制軟件Teamviewer 將Rviz 所顯示信息傳送到遠(yuǎn)端顯示器,實(shí)現(xiàn)遠(yuǎn)程實(shí)時(shí)監(jiān)控。
圖3 上位機(jī)軟件結(jié)構(gòu)Fig.3 PC software structure
表1 功能實(shí)現(xiàn)對(duì)應(yīng)表Tab.1 Function realization corresponding table
該機(jī)器人涉及到的SLAM 技術(shù)的框架如圖4 所示。首先對(duì)從里程計(jì)、激光雷達(dá)以及IMU(Inertial Measurement Unit)獲得的數(shù)據(jù)進(jìn)行信息處理,其中里程計(jì)數(shù)據(jù)用于對(duì)激光雷達(dá)由于移動(dòng)而產(chǎn)生的數(shù)據(jù)畸變進(jìn)行校正。然后利用傳感器獲得的數(shù)據(jù)計(jì)算當(dāng)前幀與之前用特征點(diǎn)緩存成的小地圖之間的位置關(guān)系,完成前端配準(zhǔn),再利用運(yùn)動(dòng)觀測(cè)方程進(jìn)行后端非線性優(yōu)化。
圖4 SLAM 框架Fig.4 SLAM framework
其中運(yùn)動(dòng)觀測(cè)方程為[6-7]
其中xk為相機(jī)的位姿,uk為輸入數(shù)據(jù),yj為路標(biāo),zj,k為圖像上的像素位置,wk,vk,j均為噪聲項(xiàng)。SLAM框架采用回環(huán)檢測(cè)消除積累誤差,提高系統(tǒng)的穩(wěn)健性和精度,最終實(shí)現(xiàn)建圖功能。
采用光電傳感器和STM32 控制器實(shí)現(xiàn)沿右側(cè)墻壁行進(jìn)和避障的功能,STM32 與i5 微處理器采用串口通信方式連接,i5 微處理器讀取控制信息,利用Python 中的virtkey 庫進(jìn)行鍵盤模擬,實(shí)現(xiàn)控制機(jī)器人建圖,即機(jī)器人自主建圖[8-9]。其中光電傳感器和機(jī)器人狀態(tài)對(duì)應(yīng)表如表2 所示。
表2 狀態(tài)對(duì)應(yīng)表Tab.2 State correspondence table
表2 中K1 為正前方光電傳感器,K2 為右前方光電傳感器,K4 為正右方光電傳感器,K5 為右后方光電傳感器,光電傳感器為0 時(shí)表示檢測(cè)到障礙物,為1 時(shí)表示未檢測(cè)到障礙物。
由遠(yuǎn)端監(jiān)控Rviz 界面以觀察建圖效果,檢驗(yàn)值守機(jī)器人的性能[10]。圖5a 為手動(dòng)建立,圖5b 為機(jī)器人自主建立。圖5 中數(shù)據(jù)顯示機(jī)器人位置等狀態(tài)信息,較粗的軌跡為近期機(jī)器人走過的路線,較細(xì)的軌跡為規(guī)劃將要走的路徑。經(jīng)對(duì)比測(cè)試,自適應(yīng)值守機(jī)器人自主建圖與手動(dòng)建圖的相似度達(dá)95%以上,滿足系統(tǒng)技術(shù)指標(biāo)要求。
圖5 Rviz 建圖界面Fig.5 Rviz drawing interface
機(jī)器人外觀如圖6 所示。機(jī)器人多次回到原點(diǎn)時(shí)系統(tǒng)通過Rviz 顯示的坐標(biāo)如表3 所示,其中理想坐標(biāo)值為(-0.130 00,0.010 87,0.000 00)。表3 中的誤差換算成以m 為單位時(shí)均小于0.3 m。
表3 定位誤差Tab.3 Positioning error
圖6 機(jī)器人外觀Fig.6 Robot appearance
圖6 中1 為電壓顯示模塊,2 為激光雷達(dá),3 為STM32,4 為電源模塊,5 為總開關(guān),6 為i5 微處理器,7 為九軸陀螺儀,8 為光電傳感器,9 為Arduino,10 為電池。
由于需要考慮到激光雷達(dá)的精度以及掃描速度問題,機(jī)器人的行進(jìn)速度為0.3 m/s。筆者對(duì)不同面積的倉庫(機(jī)器人建圖過道寬度不超過16 m)進(jìn)行巡邏測(cè)試,每個(gè)面積數(shù)的地圖重復(fù)測(cè)試10 次以上,得出在一定范圍內(nèi)的平均時(shí)間,結(jié)果如表4 所示。
表4 巡邏測(cè)試結(jié)果Tab.4 Patrol test results
雖然該測(cè)試的面積相對(duì)較小,但結(jié)果證明該機(jī)器人在功能上完全可以實(shí)現(xiàn)倉庫巡邏,而當(dāng)搭載容量更大的電池時(shí)將可以實(shí)現(xiàn)更大面積倉庫的巡邏。
筆者設(shè)計(jì)的自適應(yīng)值守機(jī)器人實(shí)現(xiàn)了自主建圖、自主導(dǎo)航、避障、回歸原點(diǎn)、異響監(jiān)測(cè)和機(jī)器人當(dāng)前位置狀態(tài)及環(huán)境信息實(shí)時(shí)回傳等功能,為機(jī)器人提出了一種新的自主建圖的方法,使其對(duì)陌生環(huán)境具有一定的感知和適應(yīng)能力。該系統(tǒng)具有良好的擴(kuò)展性和可移植性,可針對(duì)不同需求進(jìn)行適合的二次開發(fā)。