基于機(jī)器視覺的車道偏離預(yù)警系統(tǒng)的實現(xiàn)
摘要:目前高速公路上由于車道偏離而導(dǎo)致的交通事故造成了巨大的損失,從而使得車道偏離預(yù)警系統(tǒng)的研究成為了社會的一大熱點。本文基于DSP 計算和FPGA 計算,構(gòu)造出一套基于視覺的車道偏離預(yù)警系統(tǒng)。本文給出了系統(tǒng)的框架結(jié)構(gòu)以及硬件實現(xiàn)方式,并基于所提出的系統(tǒng)詳細(xì)研究了視覺系統(tǒng)中大容量數(shù)據(jù)的傳輸、存儲和處理等問題。最后,基于構(gòu)造的系統(tǒng),通過一系列典型的視覺處理算法和應(yīng)用于車道跑偏決策的軟件算法,驗證了系統(tǒng)的可行性。
1、引言
汽車駕駛是涉及駕駛員、汽車、道路三方面因素的動作行為。駕駛員通過眼睛等一系列生理器官感受道路信息,通過對道路信息的理解和判斷,及對汽車行駛狀況的跟蹤,做出一系列的駕駛決策。但是由于駕駛員長時間駕駛、粗心大意等一系列因素及駕駛員對道路信息的感知和車輛狀況的了解存在一定的“盲區(qū)”,導(dǎo)致的交通事故越來越成為社會的一大主要安全隱患。本文從駕駛員、汽車、道路三方面入手,研究一套模擬人的駕駛行為來提高車輛行駛安全性的汽車主動安全系統(tǒng),實現(xiàn)車道偏離預(yù)警等主動安全技術(shù)。
在基于機(jī)器視覺的系統(tǒng)中,實時性一直是一個主要的問題,尤其是像車道偏離預(yù)警這樣的系統(tǒng)來說,要實現(xiàn)的算法更是覆蓋了從圖像預(yù)處理到高層視覺計算的整個視覺計算流程,既有底層的可高度并行實現(xiàn)的大數(shù)據(jù)量的卷積、灰度變換等規(guī)整算法,也包含有中層的特征提取等模式識別算法及高層的一些視覺處理方法,用以實現(xiàn)對道路的理解等。一直以來,嵌入式系統(tǒng)的通用性與效率一直是難以調(diào)和的一對矛盾[1],如何構(gòu)造一套較通用的視覺處理系統(tǒng),對于視覺各個層次的并行及串行算法,都具有較高的實現(xiàn)效率是本文要解決的一個問題,高速的DSP 處理芯片和大規(guī)??芍貥?gòu)芯片的出現(xiàn)為我們提供了一個很好的解決方案。
大規(guī)模的可重構(gòu)芯片,諸如 FPGA 等,內(nèi)部集成了大容量的基于查找表結(jié)構(gòu)的門電路系統(tǒng),非常適合構(gòu)造細(xì)粒度的SIMD 處理陣列或者流水線結(jié)構(gòu),而這對于如圖2 所示的典型的底層圖像處理算法[1],具有著天然的適應(yīng)性。TI 公司的C6000 系列的DSP 計算芯片,采用哈佛結(jié)構(gòu),內(nèi)部具有8 個處理單元,還集成了專用的硬件乘法器,適合于完成一些串行的視覺處理算法,對于高層的數(shù)據(jù)量較少的但運算過程較復(fù)雜的道路理解等,具有較好的實現(xiàn)效果。
基于上面的分析,本文結(jié)合高速的 DSP 計算芯片和可重構(gòu)的FPGA 芯片構(gòu)造一套高速的嵌入式視覺處理系統(tǒng),F(xiàn)PGA 作為輔助邏輯控制和前端處理模塊,主要完成圖像的前期采集和一些類似直方圖統(tǒng)計、卷積等底層的高密度圖像處理工作,可在硬件結(jié)構(gòu)上靈活的配置,通過實現(xiàn)一系列的并行結(jié)構(gòu)或流水線結(jié)構(gòu)完成底層的算法,避免由DSP 完成這些細(xì)粒度的算法而造成資源的浪費和時間上的損耗;DSP 作為主要的計算中心,完成高層的串行為主的視覺處理任務(wù),諸如道路理解和解釋、車道跑偏決策等,DSP 的高速處理能力能較好的完成這些串行度高的算法。系統(tǒng)的基本框圖如圖2 所示。
2、系統(tǒng)設(shè)計與實現(xiàn)
實現(xiàn)圖 2 的基于視覺的汽車主動安全系統(tǒng),數(shù)據(jù)的存儲和傳輸是一個主要的問題,尤其是對于汽車主動安全這樣的實時性要求非常高的應(yīng)用背景。如何在最短的時間內(nèi),由原始采集到的圖像數(shù)據(jù),經(jīng)過一系列的存儲器數(shù)據(jù)搬移及信號處理過程,獲得最終的對道路的理解判斷,并對車輛是否跑偏做出正確的決策,是本系統(tǒng)主要的實現(xiàn)目標(biāo)。本文將依據(jù)數(shù)據(jù)在系統(tǒng)中的“流動”順序?qū)Ρ鞠到y(tǒng)進(jìn)行詳細(xì)的介紹。
2.1、數(shù)據(jù)采集模塊
在本系統(tǒng)中,圖像數(shù)據(jù)是主要的傳感器信號,獲得高質(zhì)量的圖像數(shù)據(jù)對后期的處理和功能的實現(xiàn)具有較大的意義。但是對于實際的應(yīng)用環(huán)境,由于天氣、光照等因素的影響,甚至是一系列特殊情況的出現(xiàn),一般的圖像傳感器在各種條件下難以具有較好的魯棒性。為了較好的適應(yīng)各種道路和天氣狀況,保證駕駛的安全性,我們采用了適合道路使用的CMOS 數(shù)字?jǐn)z像頭芯片自主開發(fā)了視覺采集模塊,該攝像頭芯片通過159 位SPI 控制字可完全編程控制,較好的實現(xiàn)對曝光時間、增益和噪聲等的調(diào)節(jié)。同時,該攝像頭芯片采用了一種多斜率的曝光模式輸出,在不同的曝光模式下,控制曝光的時間也是不一樣的,保證在光照過強(qiáng)或者光照條件非常弱的情況下,都可獲得較好的圖像。
對于攝像頭芯片的SPI 控制,本文為了自適應(yīng)的調(diào)整在不同背景下的工作模式,由DSP根據(jù)最后對圖像的理解和判斷的結(jié)果,給予FPGA 一定的通信信號完成對攝像頭芯片的頂層的系統(tǒng)級的控制,而底層的真正的SPI 控制字的修改和調(diào)整則由FPGA 來完成,這樣可避免SPI 的工作頻率和DSP 外部總線頻率的不一致而導(dǎo)致的DSP 工作效率的浪費,而FPGA來完成這樣的工作則比較容易。
2.2、數(shù)據(jù)傳輸、存儲模塊
在本系統(tǒng)中,從前端的圖像采集模塊,到最后的報警信號的輸出,數(shù)據(jù)是不停的在FPGA、SDRAM 及DSP 之間進(jìn)行傳輸和搬移,接下來主要討論如何在這三者之間進(jìn)行高速有效的搬移和處理,這也正是本文的主要模塊。系統(tǒng)中的數(shù)據(jù)流程主要有以下幾個方面:
?、?、在 FPGA 中經(jīng)過預(yù)處理的圖像數(shù)據(jù),首先必須存儲到主存儲芯片SDRAM 中,這是后端高層處理的基礎(chǔ)。
?、?、DSP從SDRAM中讀取最新的圖像數(shù)據(jù)進(jìn)行處理,并將處理的中間結(jié)果存于SDRAM中,這樣的讀寫過程很可能是循環(huán)進(jìn)行的,SDRAM 的分塊存儲特性正適合這樣的性能要求。
Ⅲ、為了系統(tǒng)調(diào)試的方便,很可能要求顯示中間處理的結(jié)果,因此我們在 FPGA 上掛接了一塊顯示調(diào)試模塊,調(diào)試時FPGA 可從SDRAM 中讀取中間的處理結(jié)果進(jìn)行顯示。
?、?、還有一種情況,某些情況下我們可能要求 DSP 和FPGA 之間直接進(jìn)行圖像數(shù)據(jù)的傳輸,這也是我們必須考慮的范疇。
綜合上面的種種可能情況,考慮我們采用的 DSP 芯片同時支持FIFO 和SDRAM 芯片的無縫連接,我們設(shè)計了圖3 的數(shù)據(jù)傳輸方案:
首先,前端的采集模塊輸出的圖像數(shù)據(jù)是 8 位的,而對于我們采用的SDRAM 存儲芯片和DSP 處理芯片,數(shù)據(jù)總線都是64 位的。為了不造成資源的浪費,在FPGA 對圖像進(jìn)行預(yù)處理的過程中,我們同時將8 位的圖像數(shù)據(jù)拼接成64 的數(shù)據(jù)輸出,這樣可充分利用系統(tǒng)的資源。
其次,在 FPGA 中經(jīng)過一系列并行預(yù)處理的圖像數(shù)據(jù),存儲于FPGA 內(nèi)部開辟的FIFO中。FPGA 給出握手信號,通知DSP 可以開始由FIFO 向SDRAM 傳輸數(shù)據(jù),數(shù)據(jù)的傳輸過程則完全由DSP 通過EDMA 傳輸方式來控制完成。當(dāng)核心處理器DSP 完成當(dāng)前操作的情況下,再從SDRAM 中讀入最新的數(shù)據(jù)進(jìn)行處理,這可充分利用DSP 芯片豐富的外設(shè)資源。
同時,由圖 3 的數(shù)據(jù)流圖我們發(fā)現(xiàn)數(shù)據(jù)在由FPGA 向SDRAM 傳輸?shù)倪^程中,相對于DSP 來說,F(xiàn)PGA 中開辟的用來存儲數(shù)據(jù)的FIFO 模塊和外部主存儲器SDRAM 模塊是掛接于DSP 上的相同的地址總線和數(shù)據(jù)總線上的,在這種源設(shè)備和目的設(shè)備掛接于相同外部總線上的傳輸形式下,我們采用的DSP 芯片支持一種優(yōu)化的EDMA 傳輸模式-PDT 傳輸,它優(yōu)化了數(shù)據(jù)的傳輸過程,使得DSP 的EDMA 傳輸模式可在數(shù)據(jù)不經(jīng)過DSP 內(nèi)的緩存區(qū)的情況下,直接由源設(shè)備FIFO 傳輸?shù)侥康脑O(shè)備SDRAM 中,從而可在一個周期內(nèi)完成數(shù)據(jù)的傳輸。相比于傳統(tǒng)的傳輸模式,先由FPGA 傳輸?shù)紻SP 內(nèi)部的緩存區(qū),再由DSP 寫入到SDRAM 中,PDT 傳輸模式基本上可縮短一半的數(shù)據(jù)傳輸時間,對于像圖像這樣的大容量數(shù)據(jù)傳輸來說,是具有非常大的意義的。
完成了前端預(yù)處理模塊到主存儲器 SDRAM 的數(shù)據(jù)搬移過程,接下來主要是后端的高速數(shù)據(jù)傳輸過程。DSP 與SDRAM 之間的數(shù)據(jù)傳輸可達(dá)到100MHz 以上的高速速率,尤其是DSP 支持的EDMA 傳輸方式,更是允許不在CPU 干涉的情況下,就可完成外部數(shù)據(jù)與DSP 內(nèi)部的Cache 之間的傳輸,這樣可提高CPU 工作的效率。另外,DSP 芯片內(nèi)部有兩級的緩存,第二級緩存L2 更是可達(dá)到1MB,因此我們考慮采用現(xiàn)在流行的ping-pong 傳輸方式,當(dāng)CPU 在處理緩存中的ping 或pong 內(nèi)部的數(shù)據(jù)時,在可以預(yù)測剩余處理時間的前提下,我們可預(yù)先將接下來要處理的數(shù)據(jù)通過EDMA 方式傳輸?shù)綄?yīng)的pong 或ping 存儲區(qū)中,這樣便將數(shù)據(jù)傳輸?shù)臅r間蘊含在了處理過程中,節(jié)省了相應(yīng)的傳輸時間,提高了效率。
綜合了上面對整個數(shù)據(jù)傳輸流程的分析,我們可以得出如圖4 所示的數(shù)據(jù)搬移過程。由圖中可以看出,從Sensor 出來的數(shù)據(jù)到FPGA 中的預(yù)處理,與DSP 內(nèi)部的數(shù)據(jù)處理過程,在SDRAM 的緩存處理下,是可以以流水線的方式傳輸處理的,F(xiàn)PGA 作為前端預(yù)處理模塊,完成大容量數(shù)據(jù)的處理過程,對于系統(tǒng)效率的提高具有非常大的作用。
3、系統(tǒng)軟件算法
關(guān)于前端圖像預(yù)處理方法及車道偏離決策算法的介紹性文章比較多[2][3][4],在本文中就不做過多的描述,主要的實現(xiàn)流程如圖5所示。通過 [2]中的一些典型算法,我們驗證了本文所設(shè)計的汽車主動安全系統(tǒng)是完全滿足汽車駕駛這種應(yīng)用條件下的實時性要求的,而且該系統(tǒng)是具有較強(qiáng)的擴(kuò)展性的。
4、結(jié)論
本文詳細(xì)介紹了一套基于 DSP 計算和FPGA 邏輯計算的車道偏離預(yù)警系統(tǒng)的實現(xiàn)方案,主要解決了大容量圖像數(shù)據(jù)在系統(tǒng)中的高速傳輸和存儲、處理等。在設(shè)計的過程中,本文充分運用了FPGA 的邏輯資源對底層視覺算法的適應(yīng)性及DSP 芯片的高速處理能力來滿足高層的串行度高的視覺算法。通過一系列的實驗,驗證了該系統(tǒng)滿足汽車安全這種應(yīng)用背景下的高實時性要求。
本文創(chuàng)新點:
?。?) 結(jié)合駕駛員、汽車與道路環(huán)境的關(guān)系,模擬人的駕駛行為來設(shè)計汽車主動安全系統(tǒng),在系統(tǒng)設(shè)計的原理上更有現(xiàn)實意義;
?。?) 針對計算機(jī)視覺系統(tǒng)設(shè)計中對多個層次算法的適應(yīng)性,采用DSP 計算和FPGA 邏輯計算相結(jié)合的方式,滿足系統(tǒng)算法各個層次的要求;
?。?) 對計算機(jī)視覺系統(tǒng)中數(shù)據(jù)傳輸、存儲和處理的流程進(jìn)行了詳細(xì)的分析,采用優(yōu)化的EDMA 傳輸方式-PDT 來滿足系統(tǒng)實時性的要求;