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