吳凱,劉潔,張晶晶,李軍,朱方明
(杭州師范大學(xué) 信息科學(xué)與技術(shù)學(xué)院,浙江 杭州 311121)
移動(dòng)機(jī)器人集環(huán)境感知、動(dòng)態(tài)決策與規(guī)劃、行為控制與執(zhí)行等多種功能于一體,在軍事偵察、掃雷排險(xiǎn)、防核化污染等危險(xiǎn)與惡劣環(huán)境以及民用的物品搬運(yùn)等方面具有廣闊的應(yīng)用前景。輪式移動(dòng)機(jī)器人即智能小車,因其構(gòu)造簡(jiǎn)單、控制相對(duì)方便以及工作效率高等因素,成為移動(dòng)機(jī)器人研究領(lǐng)域的重要分支,受到人們的普遍關(guān)注。
巡線是智能小車控制行動(dòng)路徑的方法之一。采用紅外檢測(cè)電路采集路徑信息可以較好地實(shí)現(xiàn)自動(dòng)巡線。傳統(tǒng)智能小車通常采用較為單一的傳感器來(lái)采集跡線信息,容易導(dǎo)致信息采集不完整,小車偏離預(yù)定路線等,基于多傳感器協(xié)同的方式,可以完成小車對(duì)跡線和障礙物的探測(cè)。本文設(shè)計(jì)了一種基于STM32 單片機(jī)的巡線小車系統(tǒng),采用七路灰度傳感器采集灰度值,采用雙H 橋電機(jī)驅(qū)動(dòng)模塊對(duì)電機(jī)進(jìn)行驅(qū)動(dòng),通過(guò)兩側(cè)的電機(jī)轉(zhuǎn)速差調(diào)整和控制小車的姿態(tài),從而實(shí)現(xiàn)巡線功能,并保持較快的運(yùn)行速度。
巡線小車的系統(tǒng)結(jié)構(gòu)如圖1所示,主要分為主控制器模塊、灰度傳感器模塊、電機(jī)模塊和電源模塊四部分。小車的巡線主要通過(guò)對(duì)灰度傳感器采集的數(shù)據(jù)進(jìn)行分析,并由主控制器進(jìn)行處理,最后通過(guò)調(diào)節(jié)兩側(cè)車輪的速度差來(lái)實(shí)現(xiàn)巡線的功能。
圖1 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)硬件設(shè)計(jì)框圖如圖2所示,包括主控制器、灰度傳感器、電機(jī)驅(qū)動(dòng)板、電機(jī)、電源和穩(wěn)壓模塊等。其中,電源和穩(wěn)壓模塊組成電源模塊,電機(jī)驅(qū)動(dòng)板和電機(jī)則組成電機(jī)模塊。電源通過(guò)穩(wěn)壓模塊LM2596S 將12 V 電壓降至5 V,給主控制器單片機(jī)供電,電機(jī)驅(qū)動(dòng)板由電源直接供電。主控制器輸出PWM 波給電機(jī)驅(qū)動(dòng)板,用于控制電機(jī)轉(zhuǎn)速和方向。灰度傳感器用于識(shí)別白線所在位置和偏移角度,并由主控制器進(jìn)行讀取分析,通過(guò)讀取傳感器的數(shù)值對(duì)電機(jī)的速度進(jìn)行調(diào)整。
圖2 系統(tǒng)硬件設(shè)計(jì)框圖
主控制器采用的是STM32F103ZET6,該款單片機(jī)采用主流的Cortex 內(nèi)核,擁有72 MHz 的主頻以及豐富的外設(shè),具有三個(gè)精度為12 位的ADC 和8 路定時(shí)器,并且搭載了DMA 模塊以方便數(shù)據(jù)的搬運(yùn)處理。
系統(tǒng)利用灰度傳感器來(lái)對(duì)小車路徑進(jìn)行采集,而STM32 的高速運(yùn)算及ADC 采集能力為此提供了保障,同時(shí)通過(guò)STM32 所提供的DMA 功能,可以有效地將灰度傳感器的數(shù)據(jù)采集到CPU 中并對(duì)其進(jìn)行處理。通過(guò)對(duì)STM32的通用定時(shí)器進(jìn)行配置可以有效地輸出PWM 波,設(shè)置比較值對(duì)PWM 的占空比進(jìn)行調(diào)節(jié),并由通用I/O 口輸出電平對(duì)電機(jī)驅(qū)動(dòng)板進(jìn)行控制,從而實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)速以及方向的調(diào)節(jié)。
傳感器模塊采用的是七路灰度傳感器,用來(lái)采集路面的灰度信息?;叶葌鞲衅魇且环N模擬傳感器,主要由一個(gè)發(fā)光二極管和一個(gè)光敏電阻組成,由于不同的檢測(cè)面對(duì)光的反射程度不同,反射至光敏電阻的光線強(qiáng)度也不同,通過(guò)光敏電阻的光照特性,即隨著光照的增強(qiáng),光敏電阻的阻值變小,可以實(shí)現(xiàn)對(duì)不同的檢測(cè)面顏色深淺的檢測(cè)。由于場(chǎng)地為黑底白線,所以采用灰度傳感器可以滿足系統(tǒng)功能需求。
灰度傳感器的電路原理圖如圖3所示,其中LED1 照射地面,同時(shí)光敏二極管接收地面的反光,在電阻R2 上獲得分壓輸出。若采用模擬輸出模式,則將該輸出電壓直接接到主控制器;若采用數(shù)字輸出模式,則將模擬電壓接入比較器進(jìn)行比較,比較器的另一端由電源在電位器RP1 的分壓獲得。通過(guò)對(duì)電位器RP1 的調(diào)節(jié),可以實(shí)現(xiàn)對(duì)線路的識(shí)別。最后,比較運(yùn)放的輸出通過(guò)一個(gè)上拉電阻接入主控制器。設(shè)計(jì)采用數(shù)字輸出的模式,通過(guò)在軟件中設(shè)置閾值來(lái)實(shí)現(xiàn)對(duì)線路的識(shí)別。不僅調(diào)節(jié)方便且對(duì)環(huán)境的適應(yīng)性強(qiáng),免去了不同環(huán)境下需要調(diào)節(jié)電位器的麻煩。
圖3 灰度傳感器電路原理圖
在小車的正前方放置傳感器模塊,便于提前對(duì)小車的行進(jìn)方向進(jìn)行調(diào)整。同時(shí)在車的兩側(cè)也各裝有一個(gè)單路的灰度傳感器,用于判斷場(chǎng)地中的十字路口。
電機(jī)驅(qū)動(dòng)電路采用ZS-H1B 模塊,該模塊為雙H 橋直流有刷電機(jī)驅(qū)動(dòng)方式,采用兩片的半橋驅(qū)動(dòng)芯片和低內(nèi)阻的N溝道MOSFET 進(jìn)行驅(qū)動(dòng),可以對(duì)電機(jī)進(jìn)行有效控制??刂菩盘?hào)主要有三類,兩路電機(jī)使能信號(hào),兩路方向控制信號(hào)和兩路PWM 輸出??刂菩盘?hào)的真值表如表1所示。
表1 電機(jī)控制信號(hào)真值表
系統(tǒng)電源電路的設(shè)計(jì)采用了LM2596S 芯片,實(shí)現(xiàn)對(duì)輸入電壓的降壓及穩(wěn)壓。輸入為鋰電池,其輸出電壓和電池容量分別為12.6 V 和2 200 mAH。接入電源模塊后通過(guò)電位器對(duì)輸出的電壓大小進(jìn)行調(diào)節(jié),并通過(guò)數(shù)碼管顯示。
小車采用兩種供電方式。其中,主控制板及傳感器模塊采用5 V 供電,電機(jī)則采用12 V 供電。電機(jī)的12 V 電壓由電池直接供給,主控制板和傳感器的供電由電池通過(guò)穩(wěn)壓模塊后的輸出供給。為了供電方便,采用一塊轉(zhuǎn)接板對(duì)各電路進(jìn)行供電。
系統(tǒng)主程序流程圖如圖4所示,主程序開(kāi)始運(yùn)行后,先對(duì)小車進(jìn)行初始化,之后就開(kāi)始讀取傳感器的數(shù)值,當(dāng)檢測(cè)到出現(xiàn)異常情況,就對(duì)小車進(jìn)行修正,若為正常情況就讓小車直行。最后返回讀取的傳感器值,如此循環(huán)往復(fù)。
圖4 系統(tǒng)主程序流程圖
當(dāng)小車左右兩側(cè)的傳感器位于線上時(shí),則表示小車處在十字路口。程序判讀出小車位于十字路口之后,小車開(kāi)始執(zhí)行轉(zhuǎn)彎。小車轉(zhuǎn)彎主要采用兩側(cè)車輪進(jìn)行相反方向的旋轉(zhuǎn),以實(shí)現(xiàn)小車的原地旋轉(zhuǎn)。當(dāng)前方的傳感器模塊最外側(cè)的傳感器檢測(cè)到黑線時(shí),小車轉(zhuǎn)動(dòng)速度減慢,直至最中央的傳感器檢測(cè)到黑線,小車停止,轉(zhuǎn)彎結(jié)束。系統(tǒng)采用了兩段式的轉(zhuǎn)彎,可以較好地提高轉(zhuǎn)彎的精準(zhǔn)度和成功率。
為了實(shí)現(xiàn)小車前往方格場(chǎng)地的任意白線交叉點(diǎn)的功能,我們主要采用兩個(gè)程序?qū)π≤囘M(jìn)行控制,一個(gè)是方向選擇程序,另一個(gè)是路徑選擇程序。為了更好地表示場(chǎng)地的任意點(diǎn)位和移動(dòng)路徑,將小車出發(fā)點(diǎn)設(shè)為原點(diǎn),并設(shè)置一個(gè)坐標(biāo)軸,橫坐標(biāo)為X,縱坐標(biāo)為Y(小車朝向正前方視為與+Y 軸方向一致),前往任意坐標(biāo)點(diǎn)所要走的線路可以分為橫向移動(dòng)量和縱向移動(dòng)量。路徑采用數(shù)組(橫坐標(biāo))和數(shù)組(縱坐標(biāo))進(jìn)行表示,例如,向前4格,再向右4格,可以表示為:(0,0),(0,4),(4,4)。用數(shù)組表示即為[2]={0,0,4},[2]={0,4,4}。
基于坐標(biāo)的路徑選擇程序,主要用于計(jì)算當(dāng)前位置和下一個(gè)位置的橫向距離diff或縱向距離diff。一般diff和diff其中一個(gè)為0,最后將距離填入方向選擇函數(shù)。
方向選擇程序有兩個(gè)輸入?yún)?shù),分別為橫向距離diff和縱向距離diff。程序中用mode 表示車輛的朝向,1 表示車頭朝前,3 表示車頭朝右,5 為車頭朝后,7 則為車頭朝左。當(dāng)小車車頭朝前,即mode=1 時(shí),若diff=0,diff=(≠0),則小車執(zhí)行走格子程序GO_Grid(),其中,代表小車向前走N 格。若diff=(>0),diff=0,則代表小車下一個(gè)目標(biāo)點(diǎn)位于小車右側(cè)個(gè)格子的位置,小車就會(huì)先執(zhí)行右轉(zhuǎn)程序GO_Right(),然后再向前走格。由于執(zhí)行了右轉(zhuǎn)程序,導(dǎo)致車頭轉(zhuǎn)向右側(cè),所以將車輛朝向標(biāo)志mode 設(shè)為3。通過(guò)多次執(zhí)行類似操作,就可以實(shí)現(xiàn)小車按照任意路徑到達(dá)場(chǎng)地的指定位置。
循跡子程序流程圖如圖5所示,主要用于走給定數(shù)量的方格。依靠前置灰度傳感器來(lái)實(shí)時(shí)調(diào)整車輛以實(shí)現(xiàn)直行的穩(wěn)定。傳感器讀取灰度值,主控制器通過(guò)ADC 對(duì)灰度值進(jìn)行采集,并將ADC 數(shù)值用DMA 進(jìn)行搬運(yùn),實(shí)現(xiàn)傳感器數(shù)值的快速讀取,減少對(duì)CPU 資源的占用。傳感器按從左到右的順序分別賦值為-8,-4,-2,0,2,4,8。當(dāng)傳感器檢測(cè)到白線時(shí),傳感器的數(shù)值就為對(duì)應(yīng)的數(shù)值,當(dāng)檢測(cè)到黑色時(shí)就為0。
圖5 循跡子程序流程圖
將各路傳感器數(shù)據(jù)之和設(shè)為變量,如圖5所示。在行進(jìn)過(guò)程中對(duì)數(shù)值進(jìn)行判斷,若數(shù)值大于0,則表示右側(cè)傳感器位于線上,車輛偏向左,所以調(diào)整車輛向右偏轉(zhuǎn)。數(shù)值越大,調(diào)整的幅度也越大。當(dāng)數(shù)值小于0 時(shí),則表示左側(cè)傳感器位于線上,車輛偏右,需要調(diào)整車輛向左偏轉(zhuǎn),根據(jù)數(shù)值的大小,來(lái)調(diào)節(jié)小車偏轉(zhuǎn)的幅度。當(dāng)數(shù)據(jù)為0 時(shí),則表示小車處于正常直行狀態(tài)。
測(cè)試場(chǎng)地如圖6所示,主要為貼有白色循線的黑色方格場(chǎng)地。集成開(kāi)發(fā)環(huán)境為Keil5。前期采用分模塊測(cè)試方法,首先對(duì)電機(jī)的驅(qū)動(dòng)及速度調(diào)節(jié)進(jìn)行測(cè)試,然后對(duì)灰度傳感器模塊進(jìn)行測(cè)試。電機(jī)的驅(qū)動(dòng)主要是PWM 波及控制信號(hào)的輸出。采用14.4 kHz 的PWM 輸出,改變占空比大小以實(shí)現(xiàn)對(duì)電機(jī)的速度調(diào)控,驅(qū)動(dòng)成功后,對(duì)兩側(cè)電機(jī)速度差進(jìn)行矯正。在占空比為26%的情況下,左輪慢0.2%。
圖6 測(cè)試場(chǎng)地
傳感器模塊的測(cè)試,首先對(duì)傳感器與地面的高度進(jìn)行調(diào)節(jié)。對(duì)不同的高度,在場(chǎng)地的不同位置多次采集取平均,如表2所示,隨著傳感器高度的提高,傳感器的/數(shù)值普遍提高,且由于STM32ADC 采集的最大值為4 096,高度過(guò)高會(huì)使黑白之間的差別過(guò)小,導(dǎo)致無(wú)法實(shí)現(xiàn)區(qū)分黑白功能。
表2 傳感器高度與A/D 值關(guān)系
其次傳感器的數(shù)據(jù)通過(guò)ADC 進(jìn)行采集,并設(shè)置一個(gè)閾值對(duì)采入的數(shù)據(jù)進(jìn)行二值化。為了調(diào)試便利,將傳感器的A/D 值通過(guò)串口屏進(jìn)行顯示。對(duì)場(chǎng)地的不同區(qū)域進(jìn)行測(cè)試,采集黑色區(qū)域與白色區(qū)域的/值,經(jīng)過(guò)取平均值后,設(shè)置合適的閾值采入的數(shù)據(jù)二值化。
后期采用整體測(cè)試方法,對(duì)巡線穩(wěn)定性進(jìn)行測(cè)試,通過(guò)小車的持續(xù)運(yùn)作,觀察小車運(yùn)行穩(wěn)定性;并設(shè)計(jì)不同復(fù)雜程度的線路對(duì)小車進(jìn)行測(cè)試用以驗(yàn)證小車面對(duì)復(fù)雜情況的處理能力。
小車在有白色循線的黑色方格場(chǎng)地進(jìn)行測(cè)試,分別按“日”字形,左右轉(zhuǎn)繞圈路線進(jìn)行20 次繞圈測(cè)試。最后測(cè)試結(jié)果顯示,出錯(cuò)率約5%。表明小車的出錯(cuò)概率較小,工作穩(wěn)定性高。另外,系統(tǒng)可以通過(guò)調(diào)整灰度傳感器的閾值來(lái)實(shí)現(xiàn)對(duì)巡線線路的快速區(qū)分,對(duì)不同環(huán)境的適應(yīng)性強(qiáng)。
本文設(shè)計(jì)的基于STM32 單片機(jī)的巡線小車系統(tǒng),選用了七路灰度傳感器采集灰度值,并用雙H 橋電機(jī)驅(qū)動(dòng)模塊對(duì)電機(jī)進(jìn)行驅(qū)動(dòng)實(shí)現(xiàn)了巡線以及路徑選擇、前往場(chǎng)景特定位置等功能。小車整體結(jié)構(gòu)簡(jiǎn)單,工作穩(wěn)定性高,能夠適應(yīng)不同環(huán)境快速準(zhǔn)確地巡線與自主行駛?;诰W(wǎng)格線的巡線方式,可以方便地應(yīng)用到倉(cāng)庫(kù),快遞中轉(zhuǎn)站等便于布線且物品整齊排放的場(chǎng)所實(shí)現(xiàn)貨物的搬運(yùn)及存放。對(duì)不同重量的貨物搬運(yùn),系統(tǒng)還可以通過(guò)改變小車的尺寸和規(guī)模來(lái)實(shí)現(xiàn),應(yīng)用前景廣闊。