鄧春蘭,應(yīng)必仕,銀錦國,朱 君
(廣西師范大學(xué) 電子工程學(xué)院,桂林541004)
機器視覺領(lǐng)域的快速發(fā)展,開源模塊層出不窮[1]。OpenMV 具有成本低、性能高并且其內(nèi)部采用OV7725攝像頭芯片等優(yōu)點。本文將開源的OpenMV[2]模塊協(xié)同STM32 單片機應(yīng)用于智能小車,它主要由控制器、傳感器、攝像頭等元器件制造而成。在給定路線下,小車行駛在路上,攝像頭能根據(jù)路況實時采集、更新行駛過程中車體與車道標(biāo)識線的距離,通過一系列處理后將信息傳遞給單片機,若此時行駛路徑發(fā)生偏移,就能在短時間內(nèi)由控制器采用PID 算法回歸正常,通過測量障礙物的距離及時做出避開障礙物的準(zhǔn)備。此研究方向是基于OpenMV 機器視覺模塊作為圖像采集與處理平臺,通過STM32F103RCT6單片機控制智能小車,能按照規(guī)定的路線行駛,能夠自動循跡,遇到障礙物時可自動避障。另外,本文設(shè)計的智能小車以3D 打印[3]的車模為載體,然后和小車的其它部件連接。
L298N 作為驅(qū)動芯片[6],通過STM32F103RCT6單片機控制,從而實現(xiàn)對小車速度的精確控制。本設(shè)計是一輛4 輪車,一個電機驅(qū)動一個輪,因此需要使用4 個電機驅(qū)動,本設(shè)計采用的驅(qū)動模塊型號為L298N,一個L298N 可以控制2 個電機正反轉(zhuǎn),因此本設(shè)計使用2 塊L298N 控制4 個電機,從而改變小車的運動狀態(tài)。該模塊在經(jīng)過初始化后,根據(jù)紅外和超聲波模塊的信號判斷是否循跡并且是否有障礙物,若沒有則保持原狀態(tài)不變,如果有障礙物則接收來自使能端的PWM 波進(jìn)行循跡或是避障運動。編碼電機的起動和調(diào)速性好,通過PWM控制調(diào)速,過載能力較強,受電磁場干擾??;自身帶有編碼器,可以通過PID 反饋給控制器電機的運行狀態(tài)。
藍(lán)牙模塊的功能是作為手機與小車之間的橋梁通信,通過藍(lán)牙模塊可以將檢測的溫濕度數(shù)據(jù)傳回手機應(yīng)用上,實現(xiàn)對環(huán)境溫濕度數(shù)據(jù)的實時監(jiān)測以及對小車向前和向后、左轉(zhuǎn)和右轉(zhuǎn)的運動狀態(tài)控制,設(shè)計中重要的一個環(huán)節(jié)。考慮到設(shè)計方案,手機藍(lán)牙控制要使智能小車反應(yīng)靈敏、通訊穩(wěn)定并且可靠,HC05 能夠更好地控制小車和溫濕度數(shù)據(jù)傳輸。
溫濕度檢測模塊[7]是為了實時監(jiān)測采集環(huán)境中的溫濕度數(shù)據(jù),采集到的數(shù)據(jù)給單片機再通過藍(lán)牙傳輸模塊顯示到手機APP 上。DHT11 采用溫濕度傳感和數(shù)字模塊采集技術(shù),可靠性與抗干擾能力極高。DHT11 擁有低功耗、小體積的特點,并且采用單線制串行接口,從而更容易集成。以至于它的信號可以傳輸?shù)?0 m 以上,因此本設(shè)計選用DHT11 作為溫濕度檢測器。
方案1:利用電機的速度差轉(zhuǎn)向
差速轉(zhuǎn)向指的是小車通過控制左右驅(qū)動輪的轉(zhuǎn)速實現(xiàn)轉(zhuǎn)向,當(dāng)車輛在左右拐彎時車輪的軌線都是呈現(xiàn)圓弧狀,如果汽車正在左轉(zhuǎn)彎時,其圓弧的圓心點在左側(cè),在固定時間不變的時候,左側(cè)輪子走的軌跡要比右側(cè)輪子走的軌跡要短,因此為了解決這個差異問題,左側(cè)輪子速度就要調(diào)慢一點,右邊輪子速度就要調(diào)快一點,采用不同的轉(zhuǎn)速來解決運動距離的差異問題。它具有超寬的調(diào)速區(qū)間、控制功率相對較小等一系列優(yōu)點。
基于OpenMV 的小車模擬系統(tǒng)硬件電路部分以STM32F103RCT6 作為核心控制器,由小車模型、電源模塊、OpenMV 模塊、電機驅(qū)動模塊、藍(lán)牙模塊等共同組成。
STM32F103RCT6 控制器是采用Cortex-M3 基礎(chǔ)型MCU72 MHz CPU,Cortex-M3 內(nèi)核是一個32位的處理器,其寄存器、數(shù)據(jù)路徑、存儲器接口等都是32 位。還采用哈佛結(jié)構(gòu),因此擁有獨立的數(shù)據(jù)總線和指令總線,使得數(shù)據(jù)訪問與取址不相沖突。當(dāng)數(shù)據(jù)訪問時,指令總線就不再被占用,數(shù)據(jù)總線和指令總線可以在同一個存儲器空間[4]。
小車框架是小車的重要結(jié)構(gòu),它決定著小車的體積與集成度以及耐壓能力,本設(shè)計采用具有高強度、低成本、可循環(huán)使用的新型生物塑料聚乳酸(PLA)進(jìn)行3D 打印小車。聚乳酸(PLA)是一種新型的生物降解材料,也具有優(yōu)異的生物降解性,即使在使用兩三年過后都能完全被土壤中微生物降解,轉(zhuǎn)化生成二氧化碳和水,不污染環(huán)境。其次,采用3D 打印小車,首先通過三維設(shè)計軟件設(shè)計小車的結(jié)構(gòu)框架,這種通過三維設(shè)計的方法就可以按照設(shè)計者的想法完完整整的設(shè)計出來,然后在利用3D 打印技術(shù),制造出智能車結(jié)構(gòu)框架,此方法制造出來的小車外形美觀、體積小。
電源模塊是給整個小車系統(tǒng)供電,為保證小車工作穩(wěn)定,采用電壓為+12.6 V 的12680 型鋰電池進(jìn)行供電。將電池電壓降壓、穩(wěn)壓到+5 V 后給單片機系統(tǒng)及其它模塊供電;穩(wěn)壓模塊則是提供穩(wěn)定高精度電壓,輸出+5 V 直流電壓和+12 V 直流電壓。
OpenMV 攝像頭模塊的核心是STM32F765CPU,集成OV7725 攝像頭芯片,運用Python 編程能高效地實現(xiàn)核心機器視覺算法,實現(xiàn)OpenMV 模塊的機器視覺的功能[5]。其中,采用攝像頭拍攝設(shè)計跑道上的雙黑線并通過機器視覺算法分析得出小車與雙黑線中線的偏轉(zhuǎn)角度,實現(xiàn)車道保持功能;也可以采用攝像頭識別跑道上的交通燈信息,并將實時的交通燈狀態(tài)通過串口上傳至主控器,主控制器根據(jù)攝像頭模塊上傳的數(shù)據(jù)作出判斷,從而控制小車的速度與啟停狀態(tài)。
方案2:利用舵機轉(zhuǎn)向
通過輸入一個周期性的脈沖信號來控制舵機,此周期性脈沖信號的低電平時間應(yīng)在10 ms~25 ms之間,而高電平時間通常在2 ms~3 ms 之間,因此不嚴(yán)謹(jǐn),所以導(dǎo)致使用舵機在小角度轉(zhuǎn)彎時靈敏度并不高。
考慮到舵機小角度轉(zhuǎn)彎靈敏度低的問題,因此采用電機的速度差轉(zhuǎn)向。
PID 是一種很常見的控制算法[8],就是“比例、積分、微分”。不同組合形式適用于不同系統(tǒng)的控制原理,從而使偏差趨于零[9]。控制算法如圖1所示,計算公式為


圖1 PID 控制原理圖Fig.1 Schematic diagram of PID control
本設(shè)計電機PID 調(diào)節(jié)主要為了實現(xiàn)小車在車道保持行駛時的控制其運動方向和速度,即保持小車前進(jìn)方向與車道中線的偏轉(zhuǎn)角為0°。PID 控制器的輸出值是控制編碼電機運行的PWM 信號,即PID 控制器輸出的PWM 信號會控制編碼電機運行。設(shè)定小車正常直線運動時的PWM 閾值,當(dāng)小車轉(zhuǎn)彎時,根據(jù)OpenMV 模塊拍攝處理并返回至主控制器的小車偏轉(zhuǎn)角在與最初設(shè)定的值做差可得PID調(diào)節(jié)的輸入偏差值,保證左右車輪實現(xiàn)差速轉(zhuǎn)彎,從而保證小車順利通過彎道。
采用OpenMV 測距[10],如圖2所示。Apix是固定的像素,Bpix是攝像頭中球所占的像素(直徑的像素),Lm是長度,a是視角的一半,Rm是球真實的半徑,L′為焦距。

圖2 OpenMV 測距原理圖Fig.2 OpenMV ranging principle diagram
由左邊的攝像頭的幾何關(guān)系可得:

由式(2)和式(3)可得:

由圖2 右邊真實的圖可得:

將式(5)帶入式(4)可得最終式子為

式(6)體現(xiàn)的是攝像頭里的像素和實際長度成反比,簡化就L′離等于一個常數(shù)比上直徑的像素。
本文采用OpenMV,不僅可以測得障礙物的距離,還可以測量障礙物的大小,具有一舉兩得的功能,并且具有高集成度和準(zhǔn)確性,因此本設(shè)計采用OpenMV 測距。
按照上述設(shè)計方案,完成的循跡避障智能小車控制系統(tǒng)模型,在規(guī)定時間內(nèi)需要從指定位置出發(fā),能夠?qū)崿F(xiàn)循跡避障功能,經(jīng)過多次改變測試環(huán)境,本次設(shè)計能夠?qū)崿F(xiàn)通過藍(lán)牙控制小車的運動狀態(tài),能夠?qū)崟r監(jiān)測環(huán)境中的溫濕度數(shù)據(jù)并將其顯示到手機APP 上,監(jiān)測到的溫濕度數(shù)據(jù)基本準(zhǔn)確,也能通過手機APP 控制小車前進(jìn)、后退、左移和右移。
本設(shè)計采用OpenMV 攝像頭對給定道路標(biāo)識雙黑線進(jìn)行識別,保證小車能夠在規(guī)定范圍內(nèi)安全前行。廣角攝像頭主要負(fù)責(zé)車道保持功能(即雙黑線循跡),將獲得的軌跡進(jìn)行處理,可以得到該軌跡的偏離角度,然后通過偏轉(zhuǎn)角的判斷,給主控制器發(fā)送轉(zhuǎn)向信號,左轉(zhuǎn)或右轉(zhuǎn),小車則進(jìn)行PID 調(diào)節(jié),實現(xiàn)車道保持功能。攝像頭采集的圖像如圖3所示。

圖3 攝像頭采集圖像Fig.3 Image captured by camera
OpenMV 攝像頭在對采集到的圖像進(jìn)行處理時主要采用膨脹腐蝕處理[11]和二值化處理[12],處理結(jié)果如圖4 和圖5所示。

圖4 膨脹處理Fig.4 Expansion treatment

圖5 二值化處理Fig.5 Binarization processing
OpenMV 攝像頭采集到的圖像包含目標(biāo)物體、噪聲和背景等,如果要想從這種多值化的數(shù)字圖像中提取準(zhǔn)確的路徑,就需要設(shè)定一個閾值Y,相當(dāng)于一個分割線,采集到的圖像數(shù)據(jù)被分成小于Y和大于Y兩個的像素群。將小于Y的像素群的像素值自定義為白色,則大于Y的像素群的像素值自定義為黑色。
膨脹則是將與物體接觸的全部背景點合并到該物體中,使邊界向外部擴張的過程,能夠用來填補物體中的空洞;被看作膨脹的對偶運算的是腐蝕,腐蝕是一種消除邊界點的方法,使邊界在向內(nèi)部收縮的過程,能夠用來消除無意義且小的物體,因此會使得二值圖像減小一圈。
將手機藍(lán)牙打開,另一邊小車上打開電源開關(guān)和藍(lán)牙開關(guān),藍(lán)牙模塊[13]指示燈閃爍,手機連接到藍(lán)牙后,指示燈變成雙閃,在手機上按鍵發(fā)送控制信號,小車能夠按照設(shè)置按鍵的指令進(jìn)行向前、向后、向前左、向前右、向后左、向后右的動作變換。用濕潤的手指捏住溫濕度傳感器,觀察到手機APP 端溫度數(shù)據(jù)明顯升高,從28 ℃變到了31 ℃,濕度從76%變到了95%。測試過程和數(shù)據(jù)如圖6 和圖7所示。

圖6 改變溫濕度前Fig.6 Before changing the temperature and humidity

圖7 改變溫濕度后Fig.7 After changing the temperature and humidity
速度是影響智能車速度快慢的一個重要因素。在限時的比賽中,首先速度控制必須配合方向控制,即在直道或類似直道時,應(yīng)該將PWM 波提到最高,讓通過主電機的電流達(dá)到最大,從而讓智能小車以最快的速度行駛;當(dāng)進(jìn)入彎道時,應(yīng)該根據(jù)彎道的曲率大小,適當(dāng)?shù)妮^低小車的基礎(chǔ)速度,使得小車不容易沖出賽道,對于該基礎(chǔ)速度的設(shè)定,采用PID 控制,以小車與中線的偏差大小為輸入,以速度的設(shè)定量為輸出,實現(xiàn)不同賽道類型下的自主速度調(diào)整。
小車轉(zhuǎn)彎采用差速轉(zhuǎn)向PID 算法,相比舵機轉(zhuǎn)向其靈活性提高了很多。小車?yán)貌钏匐姍C實現(xiàn)轉(zhuǎn)彎,其原理是利用兩個電機的轉(zhuǎn)速不同構(gòu)成轉(zhuǎn)速差。
采用紅外模塊進(jìn)行避障[14],將5 個紅外線光電傳感器分別裝在車體前方的左中右位置,左邊和右邊各2 個,中間1 個。當(dāng)車左邊的傳感器檢測到障礙物時,主控制器控制右輪電機停止左輪轉(zhuǎn)動,車向右方轉(zhuǎn)向,當(dāng)車右邊的傳感器檢測到障礙物時,主控制器控制左輪電機停止轉(zhuǎn)動,車向左方轉(zhuǎn)向,當(dāng)前面有障礙物時規(guī)定車右轉(zhuǎn)。如表1~表3所示。

表1 小車一定時間內(nèi)避障個數(shù)Tab.1 Number of obstacles avoided by car in a certain period of time

表3 小車避障效果Tab.3 Obstacle avoidance effect of car
從表1 中可以看出隨著時間增加,如果小車速度不變,障礙物等距離放置,小車避障的能力維持在一個相對穩(wěn)定的范圍內(nèi)。
從表2 中的數(shù)據(jù)可以看出,小車測距時間隨著距離的邊長而增加。當(dāng)距離從0.1 m 增加至0.6 m時,測距所花的時間相差不大,當(dāng)超過0.6 m 后,測距所花時間變化較大。因此,當(dāng)測距距離小于0.6 m時,小車的OPenMV 測距效果較好。

表2 小車測距效果Tab.2 Ranging effect of trolley
從表3 中的數(shù)據(jù)可得小車?yán)@過的障礙物個數(shù)與距離的關(guān)系,當(dāng)初始距離過小或過大時避障效果都比較小,是因為距離過小,小車反應(yīng)時間太短來不急就會直接撞到障礙物;距離過大時,小車朝著終點開去就會錯過障礙物。可以看出,當(dāng)初始距離近似為0.5 m 時,小車的避障能力最好。
本文采用的基于OpenMV 以STM32F103RCT6為主控制器設(shè)計的機器視覺的智能小車,采用3D打印技術(shù)并選用PLA 材質(zhì)打印小車有效地解決了小車設(shè)計制造框架的普通性、提高效率、降低消耗的問題。實現(xiàn)了從標(biāo)記的指定位置出發(fā),使用OpenMV 攝像頭模塊系統(tǒng)進(jìn)行圖像和數(shù)據(jù)采集,通過OpenMV 測距,從而得到障礙物的位置信號。能對小車行進(jìn)速度與方向的控制、避障等。還實現(xiàn)通過藍(lán)牙模塊通信協(xié)議檢測溫濕度數(shù)據(jù),以及控制小車的行駛方向。本設(shè)計前期也采用DT50 激光傳感器進(jìn)行測距,但也需要OpenMV 進(jìn)行數(shù)據(jù)采集,然后進(jìn)行一系列的卡爾曼濾波、中值濾波等方式來去除噪聲信號,算法處理較為復(fù)雜,因此最終方案就直接采用集成度高的OpenMV 進(jìn)行測距。本設(shè)計已經(jīng)通過多次實驗驗證,具有靈敏度高、穩(wěn)定性強等特點,在未來智能小車會融合多個專業(yè)領(lǐng)域。