張宏寬,樓勇亮,胡權,顧晨,舒信陽
(數源科技股份有限公司,浙江 杭州 310012)
目前公交和旅游大巴等大型車輛的汽車后視鏡采用的是玻璃反光鏡,車輛在行駛過程中容易受到天氣和惡劣環(huán)境影響,比如在雨雪、大霧等天氣情況,玻璃反光鏡會很模糊,駕駛員存在視覺模糊問題,另外大型車輛車身比較長,車輛轉彎時前內輪轉彎半徑與后內輪轉彎半徑不同,存在“內輪差”,使得前、后車輪的運動軌跡不重合,車輛在轉彎過程中玻璃反光鏡存在明顯的視覺盲區(qū),駕駛員在行駛過程中無法實時觀察到車輛側后方的障礙物和行人車輛信息[1]。本文給出的視覺輔助系統(tǒng),可以實時將車外盲區(qū)圖像視頻在車內顯示屏上進行呈現,有效解決了傳統(tǒng)光學后視鏡的盲區(qū)問題,為安全駕駛提供了保障。
基于i.MX6D的視覺輔助系統(tǒng)的整體系統(tǒng)框架圖如圖1所示,系統(tǒng)主要有i.MX6D主機、左LCD屏和右LCD屏、4路高清數字攝像輸入和處理模塊組成。兩組高清屏分別安裝在車內左側A柱和右側A柱,屏的高度與司機的視角平行,車外左側和右側分別安裝2路高清攝像頭,角度對著車外兩側的視覺盲區(qū)區(qū)域,將左右兩側視覺盲區(qū)的視頻實時呈現在A柱顯示屏上,可以讓司機實時了解到車外狀況,為安全駕駛提供保障。
圖1 視覺輔助系統(tǒng)整體系統(tǒng)框架圖
系統(tǒng)采用的嵌入式SOC處理器是恩智浦公司的ARM Cortex-A9架構i.MX6D芯片,CPU雙核,主頻1.2GHz。它擁有3個vivante的GPU(Graphics Processing Unit),用于圖形的加速處理[2]。i.MX6D有2個IPU(Image Processing Unit),能夠接受MIPI CSI-2格式的數據,用于攝像頭數據的處理。i.MX6D可以通過LDB子模塊控制顯示內容輸出到左顯示屏,HDMI子模塊控制顯示內容輸出到右顯示屏。i.MX6D的視頻編解碼處理單元(VPU)完全支持H.264編碼格式[3-4],可以將攝像頭采集到的數據進行H.264編碼壓縮并且存儲到TF卡里面。
系統(tǒng)的主要工作流程為4路高清的數字攝像頭產生的數字影像通過同軸線纜傳輸到i.MX6D 處理器,再通過處理器的子模塊進行格式的轉換,輸出到左右顯示屏,同時將視頻流進行H.264壓縮編碼存儲到TF卡。
系統(tǒng)主機主要有SOC處理器NXP i.MX6D,視頻圖像接口MAX9286,LCD的驅動顯示接口DS90UB947和DS90UB949。MAX9286芯片集成四個通道的解串器,能夠接收和同步來自四個串行器的視頻輸入,并且能夠通過CSI-2輸出[5],主機的功能框架圖如圖2所示。
圖2 i. MX6D主機的功能框架圖
視頻圖像接口驅動芯片MAX9286接受4路高清的數字攝像頭產生的影像數據,并進行數據格式的轉換,將CSI-2格式的數據輸出到i.MX6D內。i.MX6D通過硬件模塊IPU接受到CSI-2格式的影像數據后,會將其轉換成4路YUV422格式的數據,再通過DMA的方式傳輸到指定的內存塊上,使用GPU對其進行處理。同時IPU再把內存中YUV422格式的數據轉換成YUV420格式,使用DMA傳輸到指定內存的物理地址上,可以通過VPU進行對其進行H.264的編碼壓縮處理,同時將其存儲到TF存儲卡內。
i.MX6D內部的硬件模塊GPU主要負責圖像的處理,將通過IPU處理后傳輸到內存中YUV422格式的數據轉換成RGB的格式,并且可以對視頻數據進行鏡像操作,這樣便于攝像頭實際安裝位置的調整。通過DMA的方式將RGB格式的數據傳輸到framebuffer指定的內存物理地址上,便于linux應用程序在顯示屏上進行顯示。2路高清顯示是通過串行總線FPD-LINK III來實現的,使用的高速信號傳輸方式是單個差分鏈路高速視頻數據傳輸,采用的通信方式為雙向全雙工通信。采用的TI DS90UB947是一款OpenLDI到FPD-Link III的橋接器件[6]。該器件可將LVDS的輸入轉換成串行數據并且支持WUXGA和1080P60的視頻分辨率,支持的色深為24位。采用的TI DS90UB949是一款HDMI到FPD-Link III的橋接器件[7]。該器件可將HDMI的輸入轉換成串行數據并且支持WUXGA和1080P60的視頻分辨率,支持的色深為24位。TI的DS90UB948是FPD-Link III 的解串器,它與DS90UB949/947的串行器進行配合,可將單通道或雙通道的FPD-Link III 流轉換成OpenLDI 接口的格式數據[8]。并且DS90UB948能夠從單通道或雙通道的FPD-Link III串行數據流中恢復數據,并且將其轉換成LVDS格式的數據和相對應的時鐘。在使用上主要是通過DS90UB947串行器和DS90UB948解串器進行配合,以及DS90UB949串行器和DS90UB948解串器進行配合。i.MX6D有多種輸出顯示方式,本文通過i.MX6D的LDB 子模塊來輸出低壓差分信號LVDS 到TI 的DS90UB947串行器通過FPD-LINK III串行總線到TI的DS90UB948解串器最后輸出到左高清顯示屏。另外一路則是通過i.MX6D的HDMI控制器輸出顯示信號到TI的DS90UB949串行器再通過FPD-LINK III串行總線到TI的DS90UB948解串器最后輸出到右顯示屏,以此來完成雙屏同時顯示的功能。FPD-LINK III接口能夠實現一條差分鏈路上的雙向全雙工通信,來透傳i2c的通信數據。光感模塊采用的是BH1750FVI[9],使用i2c接口接入到DS90UB948 解串器的接口上。IMX6D 可以通過DS90UB947串行器、FPD-Link總線和DS90UB948解串器這一條鏈路獲取光感值數據,來實現對環(huán)境光照大小的檢測,并且通過讀取光感的值來實現對LCD顯示屏的背光亮度大小的調節(jié)。
在i.MX6D處理器上運行的是linux操作系統(tǒng),其版本為4.1.15。由于視覺輔助系統(tǒng)需要有實時性、清晰度和可靠性作為保障,因此本設計采用的數字攝像頭,其幀率為30FPS、分辨率為720P[10-11]。為了能夠充分利用CPU的多核架構,在軟件上采用的是多線程的設計方式。視覺輔助系統(tǒng)的軟件流程圖,如圖3所示。在linux應用主程序中派生出4個視頻存儲的線程、1個4路攝像頭視頻顯示的線程和1個背光自動調節(jié)的線程,由于4個視頻存儲的線程是類似的,因此在圖3的軟件流程圖中只畫了其中的一路。
圖3 視覺輔助系統(tǒng)的軟件流程圖
在攝像頭視頻顯示的線程中,分為這幾個步驟進行處理,分別為對攝像頭參數的初始化、視頻圖像信號的采集、圖像顯示格式的轉換處理和對圖像數據的顯示。本文是通過linux的V4L2框架與顯示系統(tǒng)框架來進行編程的,主要步驟如下:
(1)打開視頻設備文件獲得文件描述符。
(2)查詢視頻設備是否是一個視頻捕捉設備并且具有數據流控制模式。
(3)設置視頻的制式和幀的格式。
(4)打開顯示設備文件,獲得顯示文件描述符。
(5)使用顯示文件描述符獲取相應顯示設備的可變信息(Framebuffer的長度、寬度以及顏色深度)。
(6)使用顯示文件描述符獲取相應顯示設備的固定信息(Framebuffer的起始物理地址)。
(7)使用顯示文件描述符設置虛擬屏幕的大小為實際屏幕大小的3倍。
(8)通過GPU來申請連續(xù)的物理內存,將申請的視頻幀緩沖區(qū)映射到GPU申請的物理內存上。
(9)將申請到的幀緩沖全部入隊列,以便存放采集到的數據。
(10)開始視頻的采集。
(11)通過出隊列來獲取已采集到幀緩沖數據。
(12)將采集到的YUV422格式數據轉成RGBA8888格式,用于顯示。
(13)將采集到的YUV422格式數據轉成YUV420格式,同時降低分辨率為480P,復制數據到用于H.264編碼的內存中。
(14)將幀緩沖區(qū)重新入隊列尾,以便用于循環(huán)采集。
背光自動調節(jié)的線程,首先將光感驅動注冊到內核中,根據數據手冊對光感進行上電,通過讀ID判斷光感這顆粒是否可以工作。在線程的應用程序中,其操作步驟主要如下:
(1)打開光感所掛載的i2c設備文件,獲得文件描述符。
(2)通過文件描述符,設置光感的設備地址。
(3)通過文件描述符,讀光感的值。
(4)打開控制背光亮度的文件描述符。
(5)根據光感和背光亮度值的對照表,調節(jié)背光亮度。
(6)延時500ms,讀光感的值。
(7)再次調節(jié)背光亮度值,回到第6部,循環(huán)執(zhí)行。
視頻存儲的線程,主要采用的是VPU 硬件模塊[12],來實現H.264的視頻編碼壓縮,具體編程的步驟如下:
(1)打開一個編碼器實例,使用讀寫方式打開TF卡所在的目錄文件。
(2)對VPU硬件子模塊進行參數的初始化。
(3)獲得編碼器的關鍵參數,幀緩沖區(qū)的大小。
(4)通過上一步獲取到的信息,申請幀緩沖區(qū)。
(5)將IPU轉換后的YUV420格式的數據拷貝到上一步申請到的幀緩沖區(qū)中。
(6)產生圖像編碼后數據頭的高級語法結構。
(7)開始對當前圖像數據進行H.264編碼,等待圖像編碼完成產生的中斷。
(8)檢查壓縮圖像的編碼信息,同時將編碼壓縮后的數據寫入到TF卡存儲器內。
(9)程序跳轉到第5步來進行循環(huán)操作。
(10)關閉打開的編碼器實例,同時釋放VPU的資源。
通過攝像頭視頻顯示線程、背光自動調節(jié)線程和視頻存儲線程的操作,來實現4路攝像頭數據的采集,顯示以及壓縮存儲,同時能夠根據光感獲取到的環(huán)境光照大小,自動地調節(jié)背光的亮度,從而完成一個完整的產品。
為保證系統(tǒng)可靠運行,本文從系統(tǒng)運行資源和高低溫負荷試驗入手,對系統(tǒng)性能進行了模擬測試。采用linux操作系統(tǒng),版本4.1.15,兩路高清LCD顯示分別采用1920*720分辨率,4路攝像輸入為720p 30fps數字格式,通過top指令查看系統(tǒng)運行資源使用情況,如圖4所示,內存占比為8%,CPU占比為1%,這是由于視頻圖像處理部分主要由系統(tǒng)GPU、VPU和IPU單元實現,所以對CPU和內存的資源消耗比較低。
圖4 系統(tǒng)運行資源測試
車載設備要求在 -30 ℃到80℃范圍穩(wěn)定運行, 圖5-1和圖5-2分別給出了系統(tǒng)在 -30 ℃和80℃環(huán)境下24小時CPU運行曲線圖,在高溫試驗中CPU溫度最后穩(wěn)定在91℃,經過高低溫負荷試驗,設備運行穩(wěn)定。
圖5-2 高溫80℃負荷CPU運行曲線
圖5-1 低溫-30℃負荷CPU運行曲線
針對公交和商用大巴等大型車輛在行駛過程中后視鏡存在視覺盲區(qū)問題,本文設計了基于i.MX6D的視覺輔助系統(tǒng),系統(tǒng)采用一路主機驅動兩組高清顯示屏,通過對系統(tǒng)GPU、VPU和IPU圖像處理單元的接口設計,實現了4路數字視頻數據的采集、顯示和存儲功能,通過對系統(tǒng)進行高低溫負荷試驗和系統(tǒng)運行資源測試分析,系統(tǒng)性能達到設計預期,有效解決了車外視覺盲區(qū)的安全隱患,具有很好的應用前景。