去年十月份Toyota Lexus的2007年最新車款Lexus LS 460和Lexus LS 460L在美國市場上市。兩部車子都裝置了Toyota最新發展的“高級停車導引系統(Advanced Parking Guidance System)”,這個系統是使用一個向后的攝像頭和停車聲納傳感器偵測周邊狀況,駕駛人靠在一個停車位旁邊,按個按鈕,踩煞車以控制速度,系統便會自動接手控制電動動力方向盤,完成路邊停車的動作。除此之外,在目前最常應用于工廠自動化系統之中的自動導引車輛(Automatic Guided Vehicle,AGV)系統,可按照程序所下的命令及導引路線進行、停止、轉彎,并能和搬運系統作連結,AGV是一種物料搬運設備,能在固定位置自動進行貨物的裝載,并自動行走到另一位置,以完成貨物的卸載的全自動運輸設備。AGV基本功能為能自動依循固定的軌道行走,雖然說這個技術早已引用在工廠中,但是由于路線必須是規劃好并在地上畫上行走路徑,并無法應用于較復雜的環境之中,而我們所提出來的設計,是利用圖像來辨別標志,而標志擺放位置也可以根據實際的應用環境來做改變,所以應用范圍較傳統AGV更為廣泛。
不僅如此,本設計也具有特定標志搜尋功能,能夠自動的分析現有的圖像信息,自動鎖定目標物并進行自動化車控的控制,故我們設計這套系統來協助民眾自動停車、自動倒車入庫,也可應用于機場對飛機的管控或是任何具有動力的交通運輸工具。本文將機械視覺算法以硬件加速的模塊實現,結合多核的高效能的嵌入式處理器Nios,完成一個自動化汽車導引的平臺,未來可實現很多汽車駕駛安全方面的應用,包括防撞、車道偏離警報和車道維持(可導引駕駛人回到原車道)、背面障礙物警報、行人監測、車距監測(讓駕駛人和前車保持適當的距離)、夜視、自動頭燈調節、交通/限速標志識別和盲點監測等等。
設計介紹
我們使用“軟硬件共同設計(Co-design)方法”集成圖像輸入端、車控平臺及動力控制模塊,完成自動化目標追蹤的實驗平臺,通過效能佳的軟核CPU來控制外圍的模塊,并利用VHDL自制圖像處理核心電路,建立智能型圖像追蹤的嵌入式系統平臺,如圖1所示。





系統核心組成器件可分成以下三類:
1 CMOS傳感器硬件模塊:CMOS傳感控制器、數據簡化、SDRAM控制器
(1)CMOS傳感器控制器:驅動CMOS傳感器并進行連續圖像擷取,將動態圖像數據流傳入。
(2)數據簡化:將CMOS傳感器擷取的圖像數據(GBGR)進行壓縮,以便大幅減少計算量及分析時間。
(3)SDRAM控制器:通過六組FIFO控制器,將SDRAM資源規劃給兩組CMOS傳感器控制器及VGA控制器來使用(三寫三讀)。
2 VGA硬件模塊:
(1)VGA控制器:通過其器件,可以實時將圖像直接顯示在VGA上。
(2)XY Histogram,并通過XY坐標標示出目標位置,并在實時圖像上進行X軸及Y軸的圖像數據統計(Histogram)。
3 動力控制:
通過第二顆軟核CPU來依序執行外部給入的命令,CPU通過四組PIO來驅動車體前后輪的控制電路,達到車體前進、后退、左轉、右轉的控制。
主要硬件器件
以SOPC Builder完成雙CPU核心的設定,并利用Verilog設計硬件電路器件,以waveform進行時序仿真并驗證,再通過PIO方式和CPU連結,除了SOPC Builder所提供的外圍電路以外尚有雙CMOS傳感器圖像擷取電路、六端口SDRAM控制器、VGA控制器(含圖像處理電路),說明如下,如圖3所示,自行開發的硬件電路已集成為一個較大的模塊(在圖2左方的方塊),而圖3右方的方塊則是利用SOPC Builder所建立的雙CPU模塊。
1 雙核處理器:
在圖3中的cpu_0是用來控制CMOS傳感器及圖像處理所用,而cpu_1是用來控制車控動力的。
2 2個CMOS傳感器擷取:
撰寫鏡頭圖像擷取的控制硬件電路,并利用DE2發展板上的雙IDE接口(ExpansionHeaderl,2)可同時擷取到雙重鏡頭的圖像。
3 多端口SDRAM控制器:
利用Mega Wizard Plug-In Manager來生成三寫三讀的六接口FIFO(以內置RAM實現),讓二組CMOS傳感器擷取及一組VGA控制器能讀寫SDRAM設備。
4 VGA控制器和圖像處理:
撰寫VGA輸出的硬件控制電路,并在圖像輸出的同時,進行X軸及Y軸的圖像數據統計,并將結果存于片上內存(On-ChipMemory)之中,以便Nios處理器來讀取。
SOPC系統端接口設定
由DE2發展板所提供的范例新增用戶自定腳位來控制自制的外圍電路,并通過PLL生成100MHz頻率的時鐘源供SDRAM來使用,如圖5所示。
系統軟件執行時內存的配置
由于開發板上的SDRAM已被CMOS傳感器擷取及VGA控制器所使用,所以cpu_0及cpu_1的程序內存是放于Flash上,而cpu_0執行程序時的例外向量是放于SRAM上,而cpu_1是放于片上內存之中,當然在NIOS IDE開發該CPU的軟件時,也必須分別要把變量堆疊區指定到相關的內存之中,如圖5、圖6所示。
效能參數
本設計主要是針對每秒10張frame,而每個frame為640×480全彩24bit的實時圖像進行圖像辨視,每秒必須處理8.78M Byte的數據量,并進行二值化及X軸、Y軸Histogram的圖像處理,由于必須快速處理大量圖像信息,所以采用硬件加速,軟件控制的架構來實現,此外,由于本設計的SDRAM資源可以切換給Nios來使用,所以亦可使用Nios來讀取SDRAM的圖像信息并進行圖像處理,此外,在測試圖像處理算法時,也利用BCB開發出PC端的仿真程序,而配備如下(Intel 1.6GHz Core Duo,1GRAM,1.3 Mega CMOS傳感器),以下就三者實驗數據進行比較,如表1所示。
設計架構
系統流程
系統流程如圖7所示。
系統架構圈
由系統方框圖8可知,本設計使用雙核的系統,其中一個CPU是用來控制CMOS控制器模塊,而另一個CPU可以控制大部份的外圍器件,而兩個CPU之間是利用輸出及輸入PIO腳位,來達到傳遞數據的目的,這樣設計的好處是,可利用一個CPU全速處理大量圖像信息,而另一個CPU可以負責車控系統,若從圖像中偵測到偏離或碰撞危險時,將能通過PIO來觸發另一個CPU的中斷,進而實時告知車控系統下達較正方向或閃避的控制命令,本設計使用到許多的外圍器件包含:FlashMemory、SDRAM、SRAM、M4K RAM、LCM、JTAG-UART、RS232、GPIO、Button、Switch、Timer、LED、Segment、VGA、CMOS傳感器等。
圖像處理方框圖
由圖9可發現,本設計之所以能達到實時圖像及實時動態追蹤,是因為當CMOS傳感器下圖像擷取時,便能通過硬件器件,將數據從RAW Data轉成RGB再進行二值化或灰階的處理,以利進行圖像處理,而且同時亦在VGA上立即顯示出該圖像,整個過程均是由硬件來做;在圖像追蹤時,Nios可以通過X軸或Y軸的直方圖統計方式來進行標示目標物,所以一張新的圖像進來時,Nios并不用做任何處理,即可讀出所需要的數值,這樣一來才能達到所期待的硬件加速效能。
軟件流程
1 為了加速運算,由硬件分別做了二值化和數據統計。
2 一開始先搜尋目標標線位置。
3 找到標線后進行動態鎖定。
4 開始判斷標線長度,自控車是否在標線最近距離,若否,則判斷標線長是否大于標框長的70%,如果大于70%則放大標框。
5 由PIO送出前進的控制信號給自控車。
6 若自控車在標線最近距離則判斷是否為左右轉標線,若是則依標線左(右)轉,否則停止動作。
硬件電路
(1)雙CMOS傳感器圖像擷取器件:通過Switch開關來達到切換主畫面/子母畫面的功能,Frame的速度由其中一個CMOS傳感器來主導,每一次CMOS傳感器所輸出的數值為10bit,并同時輸出該pixel的x,y坐標,以利讀取。
(2)多端口SDRAM控制器:通過六個FIFO來提供三讀三寫的SDRAM控制器,每一個FIFO的大小為2KB,全利用M4K RAM來生成。
VGA控制器圖像處理:將SDRAM讀來的數值,配合適當的H-sync及V_sync信號一個一個把Pixel打出去,在這同時亦順便進行X軸或Y軸的直方圖統計,并將結果存儲于另一個M4K RAM中,待NIOS需要時即可以馬上從此M4K RAM中讀到數值。
直流電機驅動電路
我們使用全橋電路來控制輪子的正轉及反轉、Nios通過CAR_CMD[3..0]這個PIO來控制車體的運動,CAR,_CMD[1..0]為后輪的開關,而CAR_CMD[3..2]為前輪的開關,在圖十五中為一可控制電流正流或逆流的全橋電路開關,而前輪也相同,其中詳細的控制命令,如表2所示。
實境測試
在圖15中,智能型圖像追蹤車已鎖定特定的目標物了,并朝著目標物前進,圖中可以清楚地看出除了自色箭頭標志外,尚有許多其它的白色干擾物,如白色墻壁、面紙等,而在圖16中是智能型圖像追蹤車的VGA輸出,可以清楚地看到圖中是二值化的圖像,并且已智能型圖像追蹤車已鎖定白色箭頭標志(綠框圍住),在車體前進時,綠框會自動變大并鎖定白色箭頭。
結語
本設計使用兩顆嵌入式Nios軟核,通過快速設計且高集成性的Avalon總線,將復雜的外圍電路及數種內存模塊集成為車控平臺,通過Nios高性能的表現,可以很輕易地實現實時圖像處理及高速自動控制的產品。圖17為最終設計成型的智能型圖像追蹤車。