韓改寧,蘇靜池,張瑞斌
(咸陽師范學院計算機學院,陜西咸陽 712000)
隨著社會的發展,人們對生活的便利性要求越來越高,如外賣、快遞的配送等。智能小車是當代汽車的模型縮減,技術水平發展良好,融合了各種跨學科的工科知識[1-4]。智能小車基于傳統意義上的車載系統,將一些先進的、智能的、實用的科技運用到小車上,使其具有智能化。可以廣泛應用于配送和無人駕駛等許多方面。
該文系統主要是通過相關設備實現對一些路面環境的實時監控,數據采集設備不斷采集數據,對數據進行分析、預測,決策小車的行駛狀態。系統主要解決的問題包括以下方面:
1)在樹莓派上搭建環境,如Python 環境和一些相關的庫。
2)利用TensroFlow 搭建合適的卷積神經網絡。
3)制作合適的紅綠燈數據集。
4)進行圖像信息采集,并對其進行處理分析及預測。
5)進行前方障礙物檢測。
6)對采集的數據進行分析,決策小車行駛狀態,如左轉、右轉、前進、后退。
系統的目標是通過攝像頭采集圖像,使用OpenCV 對圖像進行處理,實現循跡功能,通過訓練深度學習模型對圖像進行預測,實現紅綠燈識別功能,通過紅外避障模塊實現避障功能。
該文設計是在Anaconda、VNC viewer 等軟件開發環境和樹莓派、紅外避障傳感器、USB 攝像頭等硬件平臺的基礎上實現的。
該文設計應用到的硬件有樹莓派、紅外避障傳感器、USB 攝像頭、步進電機、電源,硬件結構圖如圖1 所示。

圖1 硬件結構圖
2.1.1 樹莓派4B
Raspberry Pi 中文名為“樹莓派”,為學習編程而設計,體積很小,音頻、視頻等功能通通皆有,可以說是“麻雀雖小,五臟俱全”[2]。樹莓派4B 的內存升級到了4 GB,引入了USB 3.0,支持雙屏4 kB 輸出,CPU 和GPU 的速度也更快[5-8]。具有2.4/5.0 GHz雙頻無線LAN,藍牙5.0/BLE,千兆以太網,USB3.0和PoE 功能。
2.1.2 其他元器件
攝像頭模塊進行實時圖片采集,并實時將影像通過USB 傳輸給樹莓派。紅外避障傳感器不斷檢測前方是否有障礙物,并將信息通過串口傳給樹莓派。電機負責小車的行駛,一共四塊,通過樹莓派進行控制。
2.1.3 小車總體展示
智能小車實物圖包括主控板、攝像頭、驅動輪和紅外傳感器等,主要用于小車的避障、循跡和紅綠燈識別,小車實物圖如圖2 所示。

圖2 智能小車實物圖
該文設計是以樹莓派4B 為核心的控制和數據傳輸設備,代碼要在樹莓派4B 上運行就需要合適的軟件環境。
1)配置Python 環境
安裝基本驅動,命令如下:
安裝庫virtualenv,該庫用來創建虛擬環境,命令如下:
創建虛擬環境,命令如下:
2)安裝TensorFlow
激活虛擬環境,命令如下:
安裝TensorFlow,這一步需要先下載TensorFlow 鏡像文件,命令如下:
對于避障功能,需要在循跡期間發射紅外線,然后通過接收到反射回來的紅外線信號計算距離,其次要能夠調節障礙物判斷的距離標準,如果前方有障礙物,指示燈就會亮,并將信號發送給單片機,再由單片機決策后退、左轉、右轉或者繞行。
在循跡過程中,當前方無障礙時,紅外避障傳感器向樹莓派發送0 信號,當前方有障礙時,紅外避障傳感器向樹莓派發送1 信號。如果樹莓派連續接收到五個1 信號,就判定為前方有障礙,需繞行,再次回到軌道上繼續循跡。
3.2.1 卷積神經網絡模型
卷積神經網絡是一種典型的前饋神經網絡,其模式具有平移不變性,通過學習樣本的局部特征,就可以在其他地方的任意位置識別出該模式,相對于全連接神經網絡的全局模式,具有更好的模型泛化能力。經典的卷積神經網絡主要由輸入層、隱含層和輸出層組成[9-12]。
該模型由TensorFlow2.4.0 搭建,采用順序模型進行連接。訓練模型一共七層,第一層、第二層和第四層是卷積層,創建卷積核并運用到某個張量的所有點上;第三層為池化層,可以提取敏感特征;第五層是平均全局池化層,將所有維度加起來求平均,使高寬維度消失,降低維度;第六層和第七層是全連接層,將特征圖轉換為向量進行分類。
3.2.2 紅綠燈數據訓練
該數據由小車所使用的USB 高清攝像頭所拍攝,使用了紅綠燈模型充當現實生活中的紅綠燈。在這些數據中,每張圖片里不僅有紅綠燈,還有一些干擾背景,如后面放一本紅色的書,放一個綠色的盒子或將手放在紅綠燈模型后,或者控制外界光線的強弱,紅綠燈模型距離的遠近等因素,力求每張圖片的內容都不完全相同。一共采集一千多張圖片作為訓練集和測試集。
3.2.3 紅綠燈識別功能實現
1)模型搭建
模型一共七層,網絡可視化的深度學習模型結構如圖3 所示。

圖3 深度學習模型結構
2)訓練模型
先讀取訓練集,將訓練集進行歸一化處理,圖片大小統一化,將每張圖片所處的文件名作為該圖片的標簽,然后把所有圖片和其標簽打包在一起,以便訓練模型使用,將圖像集分成訓練集和測試集。采用Adam 優化算法來快速擬合高緯度的數據,損失函數為sparse_categorical_crossentropy,其目標是數字編碼。使用之前建立好的模型訓練進行30 個epoch 訓練。
acc 是每次訓練時的正確率,val_acc 是每次訓練后對訓練數據進行預測的正確率,在第五次訓練之后acc 和val_acc 都穩定趨于1,訓練結果正確率如圖4(a)所示。損失值是衡量模型的效果評估,損失值越小模型越健壯。圖中loss 為每次訓練時的損失值,val_loss 為每次訓練完成后對訓練數據進行預測的損失值,總體趨于下降狀態,損失值穩定趨于0,損失值如圖4(b)所示。

圖4 訓練結果
3.3.1 循跡設計
循跡和紅綠燈識別都是由攝像頭捕捉圖像,由樹莓派將捕捉的圖像進行處理、分析及預測,處理圖像前先判斷是循跡模式還是識別紅綠燈模式。
當處于循跡模式時,循跡模塊對圖片進行灰度處理,然后再對圖像進行分析,獲取圖像路線的輪廓,計算輪廓的重心,重心點的位置不同對應不同的處理方式,處理方式:如果重心在圖的左半部分則左轉,如果重心在圖的右半部分則右轉,如果重心在圖的中心位置則直行,如果圖中連續沒有路線輪廓抬起攝像頭表示到了紅綠燈路口[13-15]。
3.3.2 循跡功能實現
對于攝像頭采集到的圖像按照目的分成兩類,分別有不同的處理方式[16]。其中一類是用來實現循跡功能的,該圖為俯視視角圖像,被用來識別路線、圖片尺寸小、數量多少。將攝像頭獲取的圖像處理為灰度圖,使循跡的軌跡圖數據處理速度更快。循跡模塊流程圖如圖5 所示。

圖5 循跡程序流程圖
啟動程序時,首先進行初始化:加載深度學習模型model.h5、初始化PWM 調控、打開攝像頭端口、控制攝像頭面朝地面等。然后執行循跡功能,樹莓派接收攝像頭畫面,分析圖像,按分析結果控制小車沿畫好的路線行駛,同時紅外避障傳感器也開始工作,如果前方有障礙物樹莓派會接收到紅外避障傳感器發來的1 信號,然后控制小車進行繞行。如果圖像中沒有路線,說明到了紅綠燈路口,此時樹莓派控制攝像頭抬起,然后接收攝像頭圖像,使用深度學習模型預測model.h5 對圖像進行預測,根據預測結果控制小車“紅燈停,綠燈行”,然后再次進入循跡功能。系統總控制流程圖如圖6 所示。

圖6 系統總控制流程圖
測試場景圖軌道上半部分設計的是一個紅綠燈模型,從右到左分別是一個正方體障礙物、三棱柱障礙物和小車,如圖7 所示。

圖7 測試場景圖
啟動小車,小車會將攝像頭朝向地面,沿著黑線循跡,直到行駛到黑線消失的地方,即紅綠燈路口,然后將攝像頭抬起識別紅綠燈。紅燈亮起時,小車原地不動,繼續等待,綠燈亮起時,小車識別到綠燈,然后繞開紅綠燈,繼續循跡。小車識別紅綠燈展示如圖8 所示。

圖8 小車識別紅綠燈展示
小車繼續循跡,行駛過兩個彎道,小車過完兩個彎道后,遇到第一個障礙物,此時紅外避障傳感器的紅外接收器會接收到紅外發射器的信號,通過信號計算距離,當距離達到閾值時,傳感器指示燈亮起,并向樹莓派發送障礙信號。樹莓派收到障礙信號后會執行避障程序,繞開障礙物,小車避開正方體障礙過程如圖9 所示。

圖9 小車避開正方體障礙
避障完成后,小車再次進入軌道,繼續循跡,然后第二次遇到障礙物,再次進行避障。
該文將樹莓派與深度學習結合識別紅綠燈的方式運用到小車上,使用在PC 端訓練好的模型進行預測,識別速度更快,識別精確度也會隨著訓練數據集的豐富不斷提高,并且隨著訓練數據的多樣化,識別類型也會增多,如交通牌的識別等。
利用樹莓派完成了可以避障、循跡、識別紅綠燈的智能小車的設計,避障功能由紅外避障模塊完成;循跡功能由攝像頭拍攝路面,采用OpenCV 對圖像進行處理,計算出路線輪廓重心,然后由樹莓派決策來完成;紅綠燈的識別由攝像頭拍攝紅綠燈,使用深度學習模型進行預測,樹莓派根據預測結果進行決策。該設計可以用于配送、無人車等方面。