洪 坤, 郭 旻, 曾文壯, 胡 珩, 饒夢瑤, 杜浩文
(武漢紡織大學, 湖北 武漢 430073)
道路交通標識引導道路使用者有秩序使用道路,以促進道路行車安全,在駕駛輔助系統(tǒng)中對交通標識的識別則可以不間斷地為整車控制提供相應的幫助。對于交通標識的正確識別及精準應用可以為駕駛輔助系統(tǒng)和自動駕駛提供有力支撐。本次設計將著重介紹利用PYNQ 識別交通路標的自動駕駛系統(tǒng),是對駕駛輔助系統(tǒng)和自動駕駛的有益探索。
本系統(tǒng)包含PYNQ 識別模塊、電源模塊、STM32小車模塊、通信模塊、擴展板模塊等。系統(tǒng)總體框架和結構設計如圖1 所示。
本設計主要是利用PYNQ 的硬件識別算法,實現(xiàn)基于交通標識圖片訓練集。訓練的BNN 神經(jīng)網(wǎng)絡,由于硬件識別算法是基于FPGA 的快速并行算法,其運算速度遠大于軟件算法,實時性更好。超聲波不斷檢測前方路標的距離,當小于一定距離時,就控制PYNQ 識別模塊開始拍照識別,對識別的結果進行解析,小車執(zhí)行識別結果并做出相應動作,達到自動駕駛的功能。
PYNQ-Z2 是一款支持PYNQ 開源框架的開發(fā)平臺。為了發(fā)揮Xilinx Zynq All Programmable SoC 的所有功能。在PYNQ 的框架下,在PS 端實現(xiàn)的就是基于Linux 操作系統(tǒng),API 層的C 語言驅動,然后通過jupyter Notebook 映射到頂層的python 語言。我們的PYNQ 的框架就是在Cortex-A9 里面去實現(xiàn)的,通過AXI 總線外掛之后,配合PYNQ 提供的BaseOverlay 的底層硬件實現(xiàn)對PYNQ 這塊板子上面 的Pmods、HDMI、Arduino、LEDs、Buttons、Switches和Audio 等接口的控制。本次設計中PYNQ 負責識別功能,能夠在正確的位置啟動拍照,保存圖像,識別圖像內(nèi)容,并且將識別的內(nèi)容傳輸?shù)娇刂菩≤嚨膯纹瑱C,小車做出相應的動作,完成運行。
單片機部分需要有配合PYNQ-Z2 開發(fā)板的設計功能的架構設計。把PYNQ 部分的功能定義成一個硬件IP 核,單片機需要調(diào)用這一個IP 核,完成對應的功能。單片機通過超聲波在檢測距離小于120 cm 的情況下,開始調(diào)用PYNQ 的IP 核,檢測PYNQ返回得到通信電平,分析通信電平數(shù)據(jù),然后做相應的小車控制操作,如左轉,右轉。當距離大于120 cm 時,則不需要檢測,小車直接運行。
本單片機系統(tǒng)主要外擴了超聲波模塊、電機驅動、舵機模塊和陀螺儀模塊等。在while 循環(huán)之前,必須先完成各模塊的初始化,對小車初始化,對電機、PWM波和串口等初始化。此外,繼續(xù)在循環(huán)中調(diào)用各種配置資源,同時要和PYNQ 的初始化資源同步,方便傳輸信息和調(diào)配資源。見下頁圖2。
本次我們使用的攝像頭模塊是工業(yè)100 萬像素攝像頭,在PYNQ-Z2 的開發(fā)板上,有USB 的輸入接口和HDMI 的輸出接口,首先調(diào)用PIL 文件庫,定義好拍照的文件路徑,直接使用python 語言調(diào)用USB工業(yè)免驅攝像頭拍照,然后保存在自定義的文件路徑中。
本次設計用到的BNN 網(wǎng)絡,即二值化神經(jīng)網(wǎng)絡。其優(yōu)點是二值化的神經(jīng)網(wǎng)絡可最大限度地減少網(wǎng)絡占用空間和資源分配方式。資源合理分配,簡化網(wǎng)絡模型。
在循環(huán)內(nèi)部調(diào)用神經(jīng)網(wǎng)絡,拍照一次就初始化一次,要不斷調(diào)用神經(jīng)網(wǎng)絡。由于對圖片的神經(jīng)網(wǎng)絡識別處理和根據(jù)識別結果的GPIO 處理可以互相區(qū)分開,在神經(jīng)網(wǎng)絡識別出來結果之后,重新再調(diào)用一次BaseOverlays,可以繼續(xù)控制PL 端口對應的通信設置。
在神經(jīng)網(wǎng)絡識別之后,重新定義BaseOverlays,完成對單片機的通信輸出。程序運行的最后結果達到識別速度的要求,并且可以控制PYNQ 不停地識別和拍攝識別照片。經(jīng)過測試,數(shù)據(jù)和圖片可以完整地被保存在指定的文件夾中,同時也可以調(diào)用Python 代碼使用image 函數(shù)將其顯示出來,調(diào)用神經(jīng)網(wǎng)絡對圖片進行識別,可以得到所有的識別結果。在本次設計中使用的BNN 交通信號數(shù)據(jù)集,將所有的交通信號符號分為43 個類別,每一個類別對應一個特定的交通信號。
為了解決這種路標識別連續(xù)性的問題,以及綜合的路線設計,規(guī)定每次轉彎時,無論是左轉還是右轉,都轉動一個標準角度。但是智能小車沒有所謂的檢測角度功能,小車的轉向又都是利用延時函數(shù)來直接判斷的,所以就必須要利用能夠檢測角度的陀螺儀來固定轉向的角度。先檢測當前的角度方向,再根據(jù)轉向的方向,設置目標角度,在不斷修正的過程中,不停地檢測和判斷誤差的大小。當總的誤差小于0.5°時就跳出循環(huán),見圖3。
經(jīng)測試,本系統(tǒng)能夠通過攝像頭成功識別各種交通標識,成功率高,并能根據(jù)交通標識控制智能小車實現(xiàn)自動駕駛功能。該系統(tǒng)功能實用、可靠性高,具有一定的推廣價值。