路家琪,王金岑,徐彰,張國亮
(1.南京信息工程大學電子與信息工程學院,江蘇南京,210044;2.南京信息工程大學人工智能學院,江蘇南京,210044)
根據(jù)調(diào)查顯示,由于汽車倒車所引發(fā)的事故占據(jù)交通事故的很大比例。因此,汽車的安全也成為亟待解決的問題,對汽車倒車預警技術(shù)的研究,具有重要意義。
文獻[1-4]以單片機為核心操控紅外、超聲波等傳感器實現(xiàn)倒車預警。但是,其存在系統(tǒng)運行速度較慢、外圍電路復雜,不能達到快速反應的效果。而如今大規(guī)??删幊踢壿嬈骷陌l(fā)展,為快速準確的完成倒車預警提供硬件基礎(chǔ)。如文獻[5],采用FPGA作為核心,控制芯片對信號進行解析處理,將超聲波模塊與倒車影像相結(jié)合,具有實時性強、精確度高的優(yōu)點。但沒有在圖像處理方面加入算法增強倒車預警的效果。
本文設(shè)計并制作了一種基于Robei EDA工具以及FPGA的倒車預警系統(tǒng),可以在實時監(jiān)控的基礎(chǔ)上對人體進行識別追蹤,并可以監(jiān)測后方障礙物的距離和方位信息,且具有預警功能。此外,系統(tǒng)還可以對車內(nèi)環(huán)境參數(shù)進行測量并將數(shù)據(jù)傳輸至上位機。系統(tǒng)具有誤差小、實時性高、可靠性高等優(yōu)點。
Robei EDA軟件是一種由青島若貝公司開發(fā)、全新的面向?qū)ο蟮目梢暬酒O(shè)計軟件,可以支持基于Verilog語言的集成電路前端設(shè)計與驗證。Robei EDA工具具備可視化架構(gòu)設(shè)計、核心算法編程、自動代碼生成、語法檢查、編譯仿真與波形查看等功能。設(shè)計完成后可以自動生成Verilog代碼,可以應用于FPGA和ASIC設(shè)計流程。可視化分層設(shè)計架構(gòu)可以讓工程師邊搭建邊編程,具備例化直觀、減少錯誤、節(jié)約代碼量等優(yōu)勢。不同于軟件編程的抽象,Robei EDA工具將芯片設(shè)計變得簡單直觀,可以極大地降低學習芯片設(shè)計的入門門檻,加速設(shè)計過程。
系統(tǒng)的整體架構(gòu)分為七個部分,即FPGA 主控、攝像頭模塊、LCD顯示屏、舵機云臺、超聲波模塊、環(huán)境參數(shù)傳感器、藍牙與WiFi上位機系統(tǒng)。系統(tǒng)總體結(jié)構(gòu)框圖與結(jié)構(gòu)示意圖如下。
圖1 Robei設(shè)計實例圖
圖2 系統(tǒng)總體結(jié)構(gòu)框圖
攝像頭模塊搭載在電機云臺上,通過攝像頭接口電路與FPGA主控相連,F(xiàn)PGA主控同時連接LCD屏幕,超聲波模塊、環(huán)境參數(shù)傳感器、北斗定位模塊通過傳感器接口電路連接至FPGA主控。
工作時,系統(tǒng)由FPGA作為主控,通過攝像頭驅(qū)動電路驅(qū)動攝像頭對周圍環(huán)境進行實時檢測,同時通過SDRAM控制器控制SDRAM工作,將監(jiān)測到的圖像存入SDRAM,并通過LCD驅(qū)動器使圖像實時顯示在LCD屏幕上,系統(tǒng)同時通過人體檢測算法將人體在屏幕上進行框選顯示。
圖3 系統(tǒng)實物圖
系統(tǒng)采用二自由度云臺結(jié)構(gòu),通過舵機云臺驅(qū)動電路驅(qū)動舵機工作,可人為改變攝像頭的檢測區(qū)域,實現(xiàn)360°的圖像采集。此外系統(tǒng)還通過傳感器驅(qū)動電路驅(qū)動超聲波模塊檢測后方的距離,并將距離顯示在LCD屏幕上,若距離小于所設(shè)閾值將通過蜂鳴器發(fā)出警報。
此外傳感器驅(qū)動電路驅(qū)動環(huán)境參數(shù)傳感器,實時探測車環(huán)境參數(shù)并通過藍牙與WiFi將環(huán)境參數(shù)信息傳輸至手機APP與上位機。
本系統(tǒng)在算法上采用了人體識別算法,濾波算法和除法優(yōu)化算法。
采用識別膚色的方法來檢測人體位置,將從SDRAM讀出的像素信息進行處理后檢測人體的膚色,主要流程圖如下。
圖4 人體識別流程圖
3.1.1 灰度轉(zhuǎn)換
首先團隊需要把膚色從外界環(huán)境提取出來,在膚色識別算法中,常用的顏色空間為YCbCr,Y代表亮度,Cb代表藍色分量,Cr代表紅色分量。膚色在YCbCr空間受亮度信息的影響較小,本算法直接考慮YCbCr空間的CbCr分量,映射為兩維獨立分布的CbCr空間。在CbCr空間下,膚色類聚性好,利用人工閾值法將膚色與非膚色區(qū)域分開,形成二值圖像。
從SDRAM中讀出的顏色格式是RGB565格式,團隊需要先把RGB565改成RGB888格式,再把RGN888格式改成YCbCr格式,兩種格式的轉(zhuǎn)換公式如下:
通過上述運算,將顏色格式轉(zhuǎn)化為了YCbCr格式,經(jīng)過數(shù)據(jù)分析,膚色的分量處于下范圍:77 圖5 灰度與二值化圖像 這樣經(jīng)過以上處理后就可以得到了二值化圖像(上右圖),在人體位置為白色,其他位置為黑色。 3.1.2 中值濾波 中值濾波對于某些類型的隨機噪聲具有理想的降噪能力,比較適合于實驗中的圖像濾波。中值濾波的一種典型應用是消除椒鹽噪聲。 傳統(tǒng)的排序法較為耗費資源,這里采用快速中值排序。 圖6 中值濾波原理圖 3.1.3 高斯濾波 在進行數(shù)學仿真或者誤差評估時,往往認為傳感器所引入的噪聲服從正態(tài)分布(高斯白噪聲),這個時候用高斯濾波器就可以很好地消除高斯噪聲。高斯模板名字的由來是二維高斯函數(shù),即我們熟悉的二維正態(tài)分布密度函數(shù),如下所示: 高斯濾波后圖像被平滑的程度取決于標準差。它的輸出是臨域像素的加權(quán)平均,同時離中心越近的像素權(quán)重越高。因此,高斯濾波比均值濾波的平滑效果更柔和,而且邊緣保留的也更好。高斯濾波算法克服了邊界效應,因而濾波后的圖像較好。高斯濾波的平滑力度不如均值濾波,因此其保留細節(jié)的能力也比均值濾波好。 圖7 濾波效果示意圖 3.1.4 開運算 腐蝕是一種消除邊界點,使邊界向內(nèi)部收縮的過程??梢杂脕硐∏覠o意義的物體。下圖為以3×3矩陣實現(xiàn)腐蝕腐蝕之后的圖像在進行膨脹,就是開運算。膨脹是將與物體接觸的所有背景點合并到該物體中,使邊界向外部擴張的過程。可以用來填補物體中的空洞。開運算可以使細小的溝道斷開,將狹窄的白線斷開,消除白點。圖為以3×3矩陣實現(xiàn)膨脹。 圖8 腐蝕原理圖 圖9 膨脹原理圖 圖10 腐蝕效果圖 圖11 人體識別算法效果圖 在對超聲波傳回的數(shù)據(jù)進行顯示之前需要對數(shù)據(jù)進行濾波處理,去除會干擾測試結(jié)果的錯誤數(shù)值,使處理后的數(shù)值更為準確。故設(shè)計距離濾波算法,該算法分為排序與濾波兩個部分。 3.2.1 排序部分 在濾波中需要對數(shù)據(jù)進行排序,傳統(tǒng)的冒泡排序法等耗費的時間較長,且串行的設(shè)計思想不能發(fā)揮FPGA的優(yōu)勢,于是選擇了并行排序法。 一組數(shù)據(jù),先進行兩兩之間的比較,每兩個數(shù)比較都會得到一個比較結(jié)果。可以根據(jù)兩數(shù)的大小定義輸出排序結(jié)果0或1。對這些比較結(jié)果進行累加計算,即可得到該數(shù)在序列中的排序值。由于所有數(shù)的兩兩之間的比較都在硬件內(nèi)同時進行,只需一個時鐘的時間,即可得到比較結(jié)果,再加上比較結(jié)果的和加等計算時間,幾個時鐘周期,就實現(xiàn)了數(shù)字序列的排序。 第一個周期將所有數(shù)進行比較,對每個數(shù)的比較結(jié)果賦值。對于一個序列中的數(shù),將它與其他所有數(shù)進行比較,若該數(shù)小于另一個數(shù),記一次0分,若該數(shù)大于等于其他數(shù),如果這個數(shù)在另一個數(shù)之后,大于和等于都記一次1分;如果在另一個數(shù)之前,大于得1分,等于記0分。 第二個周期將每個數(shù)的積分累加。 第三個周期將每個數(shù)按照積分重新賦值給新的數(shù)組。 該排序方法理論上可以在三個周期內(nèi)完成排序上任意多個數(shù)的排序,具有高速的優(yōu)點。 3.2.2 濾波部分 濾波部分程序算法主要步驟是:1)采集6個點。2)對6個點小到大排序。3)相鄰值兩兩做差,并比較。4)記錄下最差后最大值的那對數(shù)所在的位置。5)如果該位置位于所有數(shù)的前半部分,則取該位置后半部分數(shù),反之,取前半部分數(shù)。并作為有效值。6)取有效值的平均值為最后值。 算法思想是,利用少數(shù)遵循多數(shù)原則,主要為了將采集的多個數(shù)據(jù)分成兩波,將相鄰兩個數(shù)之差的最大那個作為兩撥數(shù)的分界點。經(jīng)過分析,傳感器出現(xiàn)較大偏差一般是在相鄰的數(shù)據(jù)內(nèi),以差最大的兩個數(shù)進行分界點,進行簡單的濾波處理。 在將超聲波傳感器的回波信號轉(zhuǎn)換為實際距離時,需要用到除法運算,之后為了在LCD屏上顯示距離,團隊還需要將距離提取出米分量、分米分量和厘米分量。 而FPGA中的出發(fā)運算除數(shù)必須是2的冪次方,若是任意整數(shù),可能不能綜合,即使能綜合,也會耗費非常多的資源。 若在程序中直接使用除法和取余,資源耗費十分嚴重。 采用一種除法優(yōu)化算法,本質(zhì)是模擬手算除法的過程。以11/2為例,先將被除數(shù)11高位補零,除數(shù)2低位補零,然后進行減法的迭代,直到檢出的結(jié)果比除數(shù)2小為止??傮w流程圖如圖12所示。 圖12 除法優(yōu)化算法流程圖 可以看出,資源占用大大減少,減少了2000多門,效果較為顯著。(以上兩張圖所示都為部分功能是的占用,并不是最終工程的占用)。 圖13 資源占用對比圖 舵機云臺系統(tǒng),能夠?qū)崿F(xiàn)360°的旋轉(zhuǎn),加上小角度的視角調(diào)節(jié)。以下為部分調(diào)試效果圖。 圖14 舵機云臺系統(tǒng)調(diào)試效果圖 實時顯示系統(tǒng)能夠清晰地在LCD頻上進行攝像頭實時拍攝的畫面,以下為部分調(diào)試效果。 圖15 實時顯示系統(tǒng)調(diào)試效果圖 超聲波顯示系統(tǒng)可以實時監(jiān)測車輛與后方障礙物的距離及方位信息,當距人體之間的距離小于一定距離的時候,將通過蜂鳴器發(fā)出警報。具有極高的精度。調(diào)試結(jié)果表如下表1所示。 表1 超聲波測距結(jié)果表 2 0 0 2 0 2.1 1.1 9 2 3 0 2 2 7.2 1.2 1 0 2 5 0 2 5 6.7 2.7 8 加入人體檢測的算法后,系統(tǒng)可以對人體的膚色進行判斷,并在LCD框選出人體。以下為部分調(diào)試效果。 圖16 人體檢測系統(tǒng)調(diào)試效果圖 系統(tǒng)能夠與手機和PC端進行無線通信??梢酝ㄟ^藍牙和手機APP進行無線數(shù)據(jù)交互,傳輸溫度氣壓濕度海拔光照等環(huán)境參數(shù)。也可以通過wifi模塊和電腦端進行通信。以下為部分調(diào)試效果。 圖17 無線通信系統(tǒng)調(diào)試效果圖 系統(tǒng)上電后,各個模塊完成初始化,開始并行工作,系統(tǒng)的具體實現(xiàn)流程由以下流程圖所示。 本文設(shè)計的倒車預警系統(tǒng)基于FPGA以及Robei EDA軟件,具有極強的可重構(gòu)性和FPGA并行處理的速度優(yōu)勢,系統(tǒng)將實時圖像顯示、算法處理與超聲波傳感器數(shù)據(jù)采集相結(jié)合,具有預警功能強大、高精度、運行穩(wěn)定、實時性強等優(yōu)點,倒車預警系統(tǒng)性能達到了設(shè)計的初衷。 圖18 程序流程圖 未來該系統(tǒng)可以通過完善攝像頭的算法來使功能更加豐富,如增加物體識別、對背景進行濾波處理,使機器人在強光的照射下或者在有霧、有雨的環(huán)境下依舊可以保證顯示效果。3.2 距離濾波算法
3.3 除法優(yōu)化算法
4 系統(tǒng)實現(xiàn)與調(diào)試
4.1 舵機云臺模塊調(diào)試
4.2 實時顯示系統(tǒng)調(diào)試
4.3 超聲波測距模塊調(diào)試
4.4 人體識別算法調(diào)試
4.5 通信系統(tǒng)的調(diào)試
4.6 系統(tǒng)總體實現(xiàn)
5 結(jié)語