吳凱,劉潔,張晶晶,李軍,朱方明
(杭州師范大學 信息科學與技術學院,浙江 杭州 311121)
移動機器人集環境感知、動態決策與規劃、行為控制與執行等多種功能于一體,在軍事偵察、掃雷排險、防核化污染等危險與惡劣環境以及民用的物品搬運等方面具有廣闊的應用前景。輪式移動機器人即智能小車,因其構造簡單、控制相對方便以及工作效率高等因素,成為移動機器人研究領域的重要分支,受到人們的普遍關注。
巡線是智能小車控制行動路徑的方法之一。采用紅外檢測電路采集路徑信息可以較好地實現自動巡線。傳統智能小車通常采用較為單一的傳感器來采集跡線信息,容易導致信息采集不完整,小車偏離預定路線等,基于多傳感器協同的方式,可以完成小車對跡線和障礙物的探測。本文設計了一種基于STM32 單片機的巡線小車系統,采用七路灰度傳感器采集灰度值,采用雙H 橋電機驅動模塊對電機進行驅動,通過兩側的電機轉速差調整和控制小車的姿態,從而實現巡線功能,并保持較快的運行速度。
巡線小車的系統結構如圖1所示,主要分為主控制器模塊、灰度傳感器模塊、電機模塊和電源模塊四部分。小車的巡線主要通過對灰度傳感器采集的數據進行分析,并由主控制器進行處理,最后通過調節兩側車輪的速度差來實現巡線的功能。

圖1 系統結構圖
系統硬件設計框圖如圖2所示,包括主控制器、灰度傳感器、電機驅動板、電機、電源和穩壓模塊等。其中,電源和穩壓模塊組成電源模塊,電機驅動板和電機則組成電機模塊。電源通過穩壓模塊LM2596S 將12 V 電壓降至5 V,給主控制器單片機供電,電機驅動板由電源直接供電。主控制器輸出PWM 波給電機驅動板,用于控制電機轉速和方向。灰度傳感器用于識別白線所在位置和偏移角度,并由主控制器進行讀取分析,通過讀取傳感器的數值對電機的速度進行調整。

圖2 系統硬件設計框圖
主控制器采用的是STM32F103ZET6,該款單片機采用主流的Cortex 內核,擁有72 MHz 的主頻以及豐富的外設,具有三個精度為12 位的ADC 和8 路定時器,并且搭載了DMA 模塊以方便數據的搬運處理。
系統利用灰度傳感器來對小車路徑進行采集,而STM32 的高速運算及ADC 采集能力為此提供了保障,同時通過STM32 所提供的DMA 功能,可以有效地將灰度傳感器的數據采集到CPU 中并對其進行處理。通過對STM32的通用定時器進行配置可以有效地輸出PWM 波,設置比較值對PWM 的占空比進行調節,并由通用I/O 口輸出電平對電機驅動板進行控制,從而實現對電機轉速以及方向的調節。
傳感器模塊采用的是七路灰度傳感器,用來采集路面的灰度信息。灰度傳感器是一種模擬傳感器,主要由一個發光二極管和一個光敏電阻組成,由于不同的檢測面對光的反射程度不同,反射至光敏電阻的光線強度也不同,通過光敏電阻的光照特性,即隨著光照的增強,光敏電阻的阻值變小,可以實現對不同的檢測面顏色深淺的檢測。由于場地為黑底白線,所以采用灰度傳感器可以滿足系統功能需求。
灰度傳感器的電路原理圖如圖3所示,其中LED1 照射地面,同時光敏二極管接收地面的反光,在電阻R2 上獲得分壓輸出。若采用模擬輸出模式,則將該輸出電壓直接接到主控制器;若采用數字輸出模式,則將模擬電壓接入比較器進行比較,比較器的另一端由電源在電位器RP1 的分壓獲得。通過對電位器RP1 的調節,可以實現對線路的識別。最后,比較運放的輸出通過一個上拉電阻接入主控制器。設計采用數字輸出的模式,通過在軟件中設置閾值來實現對線路的識別。不僅調節方便且對環境的適應性強,免去了不同環境下需要調節電位器的麻煩。

圖3 灰度傳感器電路原理圖
在小車的正前方放置傳感器模塊,便于提前對小車的行進方向進行調整。同時在車的兩側也各裝有一個單路的灰度傳感器,用于判斷場地中的十字路口。
電機驅動電路采用ZS-H1B 模塊,該模塊為雙H 橋直流有刷電機驅動方式,采用兩片的半橋驅動芯片和低內阻的N溝道MOSFET 進行驅動,可以對電機進行有效控制。控制信號主要有三類,兩路電機使能信號,兩路方向控制信號和兩路PWM 輸出。控制信號的真值表如表1所示。

表1 電機控制信號真值表
系統電源電路的設計采用了LM2596S 芯片,實現對輸入電壓的降壓及穩壓。輸入為鋰電池,其輸出電壓和電池容量分別為12.6 V 和2 200 mAH。接入電源模塊后通過電位器對輸出的電壓大小進行調節,并通過數碼管顯示。
小車采用兩種供電方式。其中,主控制板及傳感器模塊采用5 V 供電,電機則采用12 V 供電。電機的12 V 電壓由電池直接供給,主控制板和傳感器的供電由電池通過穩壓模塊后的輸出供給。為了供電方便,采用一塊轉接板對各電路進行供電。
系統主程序流程圖如圖4所示,主程序開始運行后,先對小車進行初始化,之后就開始讀取傳感器的數值,當檢測到出現異常情況,就對小車進行修正,若為正常情況就讓小車直行。最后返回讀取的傳感器值,如此循環往復。

圖4 系統主程序流程圖
當小車左右兩側的傳感器位于線上時,則表示小車處在十字路口。程序判讀出小車位于十字路口之后,小車開始執行轉彎。小車轉彎主要采用兩側車輪進行相反方向的旋轉,以實現小車的原地旋轉。當前方的傳感器模塊最外側的傳感器檢測到黑線時,小車轉動速度減慢,直至最中央的傳感器檢測到黑線,小車停止,轉彎結束。系統采用了兩段式的轉彎,可以較好地提高轉彎的精準度和成功率。
為了實現小車前往方格場地的任意白線交叉點的功能,我們主要采用兩個程序對小車進行控制,一個是方向選擇程序,另一個是路徑選擇程序。為了更好地表示場地的任意點位和移動路徑,將小車出發點設為原點,并設置一個坐標軸,橫坐標為X,縱坐標為Y(小車朝向正前方視為與+Y 軸方向一致),前往任意坐標點所要走的線路可以分為橫向移動量和縱向移動量。路徑采用數組(橫坐標)和數組(縱坐標)進行表示,例如,向前4格,再向右4格,可以表示為:(0,0),(0,4),(4,4)。用數組表示即為[2]={0,0,4},[2]={0,4,4}。
基于坐標的路徑選擇程序,主要用于計算當前位置和下一個位置的橫向距離diff或縱向距離diff。一般diff和diff其中一個為0,最后將距離填入方向選擇函數。
方向選擇程序有兩個輸入參數,分別為橫向距離diff和縱向距離diff。程序中用mode 表示車輛的朝向,1 表示車頭朝前,3 表示車頭朝右,5 為車頭朝后,7 則為車頭朝左。當小車車頭朝前,即mode=1 時,若diff=0,diff=(≠0),則小車執行走格子程序GO_Grid(),其中,代表小車向前走N 格。若diff=(>0),diff=0,則代表小車下一個目標點位于小車右側個格子的位置,小車就會先執行右轉程序GO_Right(),然后再向前走格。由于執行了右轉程序,導致車頭轉向右側,所以將車輛朝向標志mode 設為3。通過多次執行類似操作,就可以實現小車按照任意路徑到達場地的指定位置。
循跡子程序流程圖如圖5所示,主要用于走給定數量的方格。依靠前置灰度傳感器來實時調整車輛以實現直行的穩定。傳感器讀取灰度值,主控制器通過ADC 對灰度值進行采集,并將ADC 數值用DMA 進行搬運,實現傳感器數值的快速讀取,減少對CPU 資源的占用。傳感器按從左到右的順序分別賦值為-8,-4,-2,0,2,4,8。當傳感器檢測到白線時,傳感器的數值就為對應的數值,當檢測到黑色時就為0。

圖5 循跡子程序流程圖
將各路傳感器數據之和設為變量,如圖5所示。在行進過程中對數值進行判斷,若數值大于0,則表示右側傳感器位于線上,車輛偏向左,所以調整車輛向右偏轉。數值越大,調整的幅度也越大。當數值小于0 時,則表示左側傳感器位于線上,車輛偏右,需要調整車輛向左偏轉,根據數值的大小,來調節小車偏轉的幅度。當數據為0 時,則表示小車處于正常直行狀態。
測試場地如圖6所示,主要為貼有白色循線的黑色方格場地。集成開發環境為Keil5。前期采用分模塊測試方法,首先對電機的驅動及速度調節進行測試,然后對灰度傳感器模塊進行測試。電機的驅動主要是PWM 波及控制信號的輸出。采用14.4 kHz 的PWM 輸出,改變占空比大小以實現對電機的速度調控,驅動成功后,對兩側電機速度差進行矯正。在占空比為26%的情況下,左輪慢0.2%。

圖6 測試場地
傳感器模塊的測試,首先對傳感器與地面的高度進行調節。對不同的高度,在場地的不同位置多次采集取平均,如表2所示,隨著傳感器高度的提高,傳感器的/數值普遍提高,且由于STM32ADC 采集的最大值為4 096,高度過高會使黑白之間的差別過小,導致無法實現區分黑白功能。

表2 傳感器高度與A/D 值關系
其次傳感器的數據通過ADC 進行采集,并設置一個閾值對采入的數據進行二值化。為了調試便利,將傳感器的A/D 值通過串口屏進行顯示。對場地的不同區域進行測試,采集黑色區域與白色區域的/值,經過取平均值后,設置合適的閾值采入的數據二值化。
后期采用整體測試方法,對巡線穩定性進行測試,通過小車的持續運作,觀察小車運行穩定性;并設計不同復雜程度的線路對小車進行測試用以驗證小車面對復雜情況的處理能力。
小車在有白色循線的黑色方格場地進行測試,分別按“日”字形,左右轉繞圈路線進行20 次繞圈測試。最后測試結果顯示,出錯率約5%。表明小車的出錯概率較小,工作穩定性高。另外,系統可以通過調整灰度傳感器的閾值來實現對巡線線路的快速區分,對不同環境的適應性強。
本文設計的基于STM32 單片機的巡線小車系統,選用了七路灰度傳感器采集灰度值,并用雙H 橋電機驅動模塊對電機進行驅動實現了巡線以及路徑選擇、前往場景特定位置等功能。小車整體結構簡單,工作穩定性高,能夠適應不同環境快速準確地巡線與自主行駛。基于網格線的巡線方式,可以方便地應用到倉庫,快遞中轉站等便于布線且物品整齊排放的場所實現貨物的搬運及存放。對不同重量的貨物搬運,系統還可以通過改變小車的尺寸和規模來實現,應用前景廣闊。