譚 浩,陽 清,李江婷,張嘉麟
(湖南理工學(xué)院 機(jī)械工程學(xué)院,岳陽 414006)
隨著計算機(jī)技術(shù)不斷向智能化發(fā)展,嵌入式設(shè)備也更多應(yīng)用在生活和工作領(lǐng)域中,基于無線通信的嵌入式自主導(dǎo)航系統(tǒng)的研究需求顯得尤為迫切。ROS 全稱為Robot Operating System,是一款優(yōu)秀的機(jī)器人操作系統(tǒng)[1],ROS 平臺以節(jié)點的思維方式對各個模塊進(jìn)行開發(fā),能夠簡化操作流程,提高開發(fā)效率。運用ROS 移動機(jī)器人在生產(chǎn)生活中進(jìn)行開發(fā)能夠降低人力成本,提高生產(chǎn)的科技化和自動化,尤其是超市、商場等場所都需要一個可自主移動的視頻遙控監(jiān)控系統(tǒng),也就需要視頻監(jiān)控與機(jī)器人技術(shù)的智能結(jié)合。
本文研究的智能小車,基于ROS 平臺采用了上位機(jī)+下位機(jī)的控制模式,在全局路徑和局部路徑分別采用D*算法和動態(tài)窗口算法,利用GPS 和激光雷達(dá)等模塊進(jìn)行路徑規(guī)劃設(shè)計研究,可以在構(gòu)建地圖的基礎(chǔ)上實現(xiàn)自主導(dǎo)航和避障。同時,本設(shè)計采用了基于物聯(lián)網(wǎng)的遠(yuǎn)程遙控模塊,實現(xiàn)手機(jī)端,PC 端數(shù)據(jù)共享,可以遠(yuǎn)程進(jìn)行人機(jī)交互,從而替代人工執(zhí)行相應(yīng)的任務(wù),提高科技化水平,降低人工成本。
此控制系統(tǒng)在軟件上采用“Ubuntu+ROS”的控制方式,在模式上采用“上位機(jī)+下位機(jī)”的控制模式。Ubuntu 是一種完全基于Linux 的操作系統(tǒng),在此平臺上可以享有很多開源的資源,對于技術(shù)的學(xué)習(xí)和開發(fā)有顯著作用,也能夠勝任常規(guī)的文字處理和系統(tǒng)編程,ROS 是機(jī)器人編程的系統(tǒng)框架,如圖1所示,在這個框架上可以把很多零散的部件結(jié)合起來,進(jìn)行模塊節(jié)點之間的通信。在“Ubuntu+ROS”平臺上,機(jī)器人的決策、計算、控制算法可以更好地組織和運行。監(jiān)控平臺選擇集成化的視頻監(jiān)控設(shè)備,這是一款基于螢石云平臺無線監(jiān)控器,在手機(jī)或者電腦上登錄APP 就能實時進(jìn)行監(jiān)控[2]。
圖1 巡邏車平臺架構(gòu)圖Fig.1 Patrol vehicle platform architecture diagram
上位機(jī)硬件部分:樹莓派運動控制器,激光雷達(dá),攝像頭。
下位機(jī)硬件部分:STM32 系列運動控制器,WiFi模塊,帶編碼器的直流電機(jī),超聲波,陀螺儀,里程計。
本設(shè)計的硬件結(jié)構(gòu)框架如圖2 所示。上位機(jī)由樹莓派系列開發(fā)板作為整套系統(tǒng)的數(shù)據(jù)處理中心,負(fù)責(zé)接收激光雷達(dá)的數(shù)據(jù)和STM32 反饋的數(shù)據(jù),通過Ubuntu 系統(tǒng)實現(xiàn)ROS 的實時通訊,下位機(jī)由STM32 系列開發(fā)板作為核心控制中心,負(fù)責(zé)與上位機(jī)通信,進(jìn)行數(shù)據(jù)傳輸,實現(xiàn)對陀螺儀,超聲波,電機(jī),里程計傳感器等模塊的數(shù)據(jù)收集與處理[3],同時通過WiFi 模塊將巡邏車感知的各項數(shù)據(jù)上傳到電腦或手機(jī),在手機(jī)PC 端上也能實時監(jiān)控周圍環(huán)境,當(dāng)需要人為介入控制時,可以通過手機(jī)APP 和電腦PC 端遠(yuǎn)程控制。
圖2 硬件結(jié)構(gòu)框架圖Fig.2 Hardware architecture diagram
樹莓派作為整個系統(tǒng)的大腦,需要連接激光雷達(dá)和下位機(jī)的各個模塊。如圖3 所示,數(shù)據(jù)采集處理模塊將采集的數(shù)據(jù),傳遞到SLAM 模塊進(jìn)行SLAM建圖,SLAM 建圖依賴于ROS 平臺的Gmapping 功能包,在Gmapping 功能包中能對巡邏車進(jìn)行定位和建圖[4],在對各個模塊的數(shù)據(jù)融合建圖后,通過自動導(dǎo)航模塊中Navigatin 下發(fā)到各個控制節(jié)點,對下位機(jī)下達(dá)指令進(jìn)行自主導(dǎo)航。
圖3 導(dǎo)航模塊簡圖Fig.3 Navigation module diagram
Gmapping 功能包主要包括訂閱智能機(jī)器人的深度數(shù)據(jù)、IMU 數(shù)據(jù)和里程計數(shù)據(jù)等,如果需要進(jìn)行對一些重要數(shù)據(jù)的選擇,還可以生成一個基于概率的二維柵格圖,而Gmapping 功能主要基于Fast-Slam,F(xiàn)astSlam 是把Slam 分解成機(jī)器人定位和建圖的過程,其中FastSlam 的最主要特點為粒子濾波[5]。粒子濾波是一個非參數(shù)濾波,因為粒子也就是數(shù)據(jù),通過對這些數(shù)據(jù)的近似或后驗分布,粒子數(shù)據(jù)數(shù)量越多,狀態(tài)中的一個部分就被數(shù)據(jù)填充的越密集[5]。在FastSlam 里,粒子濾波是對機(jī)器人的路徑進(jìn)行計算,為每一個粒子規(guī)劃地圖。本設(shè)計采用“激光雷達(dá)+Gmapping”方式,其主要優(yōu)點在于計算數(shù)據(jù)量小、精度高、環(huán)境影響因素小。
Navigation 功能主要包括運用ROS 機(jī)器人的傳感器數(shù)據(jù)、里程計信息數(shù)據(jù)和Gmapping 地圖數(shù)據(jù)的反饋進(jìn)行自主導(dǎo)航。Navigation 導(dǎo)航分為全局規(guī)劃和局部規(guī)劃兩部分,分別由Navigation 的全局規(guī)劃器進(jìn)行全局規(guī)劃的最短路徑設(shè)定和局部規(guī)劃器進(jìn)行局部最優(yōu)路徑的設(shè)定,全局規(guī)劃的路線模式選擇為拓?fù)渎肪€,靠節(jié)點與節(jié)點之間的連接關(guān)系進(jìn)行路徑規(guī)劃(通過D* 算法進(jìn)行路徑的規(guī)劃),局部規(guī)劃的路線模式建立柵格地圖進(jìn)行局部路徑設(shè)定,從而實現(xiàn)機(jī)器人的局部避障[6]。其中全局規(guī)劃將生成的全局地圖分段發(fā)送給局部規(guī)劃器,局部規(guī)劃器在收到全局規(guī)劃器的數(shù)據(jù)后結(jié)合自己的局部規(guī)劃算法,轉(zhuǎn)化成控制指令控制小車向預(yù)設(shè)的目標(biāo)點運動。
STM32F103 有豐富的外設(shè)接口,強大的運行算法,支持多種通訊方式,能夠及時接收和處理各個模塊傳遞的數(shù)據(jù)。例如,如圖4 所示為MPU6050模塊原理圖,其內(nèi)部融合了三軸陀螺儀,三軸加速度計和1 個數(shù)字運動器,可使用J2 CON2 口連接到STM32F103 控制芯片,以SPI 通訊方式傳輸數(shù)據(jù),下位機(jī)在得到數(shù)據(jù)后上傳到上位機(jī),在上位機(jī)進(jìn)行數(shù)據(jù)融合算法,如圖5 所示。
Serial 庫是ROS 自帶的進(jìn)行串口通訊的庫,在本設(shè)計中主要應(yīng)用于上位機(jī)ROS 設(shè)備與下位機(jī)單片機(jī)的通訊。Serial 是一種標(biāo)準(zhǔn)的通訊協(xié)議,主要進(jìn)行ROS 設(shè)備與非ROS 設(shè)備的通訊,它為非ROS 設(shè)備提供了ROS 節(jié)點和話題服務(wù)的發(fā)布/訂閱功能,讓非ROS 設(shè)備適用于ROS 的節(jié)點通訊的模式[7],在系統(tǒng)中無需在上位機(jī)編程就能夠輕松進(jìn)行上位機(jī)與下位機(jī)的通訊和數(shù)據(jù)交互,提高了系統(tǒng)數(shù)據(jù)傳輸和通訊效率,同時降低了開發(fā)難度。
結(jié)合實際情況研究,當(dāng)巡邏車出現(xiàn)故障或者路線錯誤時就需要人為介入糾正,所以結(jié)合物聯(lián)網(wǎng)的研究增加了遠(yuǎn)程遙控模塊。如圖6 所示,遠(yuǎn)程遙控的WiFi 模塊直接與下位機(jī)進(jìn)行串口通信,STM32反饋的各模塊數(shù)據(jù)可以通過WiFi 模塊上傳到阿里云物聯(lián)網(wǎng)平臺,在該平臺通過訂閱話題(Topic),用手機(jī)或者PC 端訂閱對應(yīng)的話題(Topic)后就可以實時觀測到各模塊數(shù)據(jù),同時可以用APP 或PC 端訂閱Topic 發(fā)布指令,主機(jī)PC 或手機(jī)移動端向機(jī)器人遠(yuǎn)程下發(fā)機(jī)器人導(dǎo)航的目標(biāo)位置坐標(biāo)[x,y,θ],其中x 與y 分別為機(jī)器人在環(huán)境地圖中的橫坐標(biāo)與縱坐標(biāo)[8],θ 為機(jī)器人到達(dá)至目標(biāo)位置時的姿態(tài)角。當(dāng)機(jī)器人到達(dá)目標(biāo)位置后,上位機(jī)以話題消息的形式與下位機(jī)進(jìn)行通訊,下位機(jī)通過電機(jī)工作驅(qū)動從而遠(yuǎn)程控制巡邏車。
圖6 下位機(jī)框架Fig.6 Lower computer framework
自主導(dǎo)航的實現(xiàn)一般分為3 個部分:①環(huán)境地圖的建立,在ROS 系統(tǒng)中可運行Gmapping 節(jié)點得到;②路徑規(guī)劃的設(shè)定,運行Move_base 可以實現(xiàn);③底盤控制,運行My_robot 節(jié)點實現(xiàn)控制。
實現(xiàn)自主導(dǎo)航的具體步驟如下所述:ROS 機(jī)器人通過SSH 命令連接到PC(在Ubuntu 上與開發(fā)版連接需要添加橋接模式),在Ubuntu 上第一次新建終端,導(dǎo)航到建立好的地圖文件“~/ros_ws/src/th/maps”,查看地圖文件,新建第二個終端,運行導(dǎo)航節(jié)點“roslaunch robot mickx4_amcl.launch”,終端出現(xiàn)啟動信息,新建第三個終端,運行move_base 節(jié)點,然后打開Rviz 可視化界面,在Rviz 的左側(cè)訂閱話題導(dǎo)入相應(yīng)的數(shù)據(jù)(圖7(a)),此時ROS 機(jī)器人自主導(dǎo)航所需的數(shù)據(jù)已經(jīng)全部導(dǎo)入。點擊“2D new goal”,在地圖上選擇目標(biāo)點,Rviz 界面會出現(xiàn)紅色箭頭和綠色箭頭,其中紅色箭頭表示全局規(guī)劃的目標(biāo)點和姿態(tài)位姿信息,綠色箭頭表示局部規(guī)劃的工作路徑(圖7(b))。局部規(guī)劃器主要是避障、優(yōu)化速度等功能的實現(xiàn),確保生成局部最優(yōu)路徑[9]。在實驗過程中,一旦選定了目標(biāo)點,Move_base 中的全局規(guī)劃器會自動生成一條最優(yōu)路徑。
圖7 Rviz 可視化實驗結(jié)果Fig.7 Rviz visualization experimental results
本設(shè)計在封閉和開放的環(huán)境下進(jìn)行實驗論證,結(jié)果表明該設(shè)計能夠很好地進(jìn)行自主導(dǎo)航,在人機(jī)交互的控制模式下該設(shè)計能積極響應(yīng)遠(yuǎn)程指令,在指令結(jié)束后也可按照原定路徑自主行進(jìn),具有良好的自主導(dǎo)航性能,對移動機(jī)器人適應(yīng)未知復(fù)雜環(huán)境作業(yè)有著重要參考價值,提高了巡邏的智能化發(fā)展水平,節(jié)省了人力資源,降低了人工成本。在系統(tǒng)設(shè)計方面,開發(fā)人員還需要提高機(jī)器人的智能化水平,提高巡檢效率,在周圍環(huán)境發(fā)生異常時能夠及時感應(yīng),并向控制中心發(fā)出警報。