1 引言
視覺系統(tǒng)在現(xiàn)代工業(yè)生產(chǎn)自動化系統(tǒng)中應用非常廣泛,,主要集中于藥品檢測分裝,、印刷色彩檢測、集成電路生產(chǎn),、精密電子產(chǎn)品裝配,、智能機器人識別導航等領域。隨著Internet 的普及,,現(xiàn)代社會已進入后PC 時代,,嵌入式技術越來越與人們的生活緊密結(jié)合。
嵌入式視覺系統(tǒng)可通過USB 總線等將圖像的獲取,、圖像處理,、顯示設備集成于一體,成本相對較低,,體積小巧,,可以方便地安裝在載體身上,故研究嵌入式的視覺系統(tǒng)具有一定的實際意義,。
2 嵌入式視覺系統(tǒng)總體方案設計
嵌入式視覺系統(tǒng)由嵌入式硬件平臺,、操作系統(tǒng)、圖像采集和圖像顯示四大部分組成,,原理框圖如下圖1 所示,。
圖1 視覺系統(tǒng)原理框圖
S3C2410X 芯片是韓國三星電子公司推出的一款基于ARM920T 內(nèi)核的16/32 位RISC 嵌入式微處理器。該芯片集成了支持 TFT 的 LCD 控制器 ,、3 個通道的UART 等控制器和豐富的外部接口,MPLL 產(chǎn)生主時鐘,,能夠使處理器工作頻率最高達到203MHz,此工作頻率能夠使處理器輕松運行WinCE,、Linux 等操作系統(tǒng)以及進行較為復雜的數(shù)據(jù)處理。該芯片可以滿足低成本,、高速度,、低功耗的設計需求,非常適合作為嵌入式視覺系統(tǒng)的硬件平臺,。
Linux 操作系統(tǒng)同目前廣泛應用的嵌入式操作系統(tǒng)如pSOS,、VxWorks、winCE 相比,,具有可移植性好,、網(wǎng)絡功能強、有優(yōu)秀的GNU 編譯工具支持等優(yōu)點,,更重要的是Linux 的開放源代碼和免費的優(yōu)點使得系統(tǒng)成本顯著降低,,因此選用Linux 操作系統(tǒng)作為軟件開發(fā)平臺,。
3 嵌入式視覺系統(tǒng)硬件設計
3.1 圖像采集
選購攝像頭,優(yōu)先考慮Linux 內(nèi)核公開支持的攝像頭芯片,。由于目前Linux 操作系統(tǒng)使用的內(nèi)核版本僅自帶了ov511 芯片的攝像頭驅(qū)動,,因此,系統(tǒng)的圖像采集模塊由CMOS 圖像傳感器OV7620 和后端處理芯片OV511+組成,。本系統(tǒng)在IIC 總線模式下通過設置OV7620 的功能寄存器,,使OV7620 工作于連續(xù)掃描方式,RGB 原始數(shù)據(jù)16 位輸出方式,。OV7620 有4 個同步信號:VSYNC(垂直同步信號),、FODD(奇數(shù)場同步信號)、HSYNC(水平同步信號)和PCLK(像素同步信號)[3].當采用連續(xù)掃描方式時,,只使用VSYNC 和HSYNC,、PCLK 三個同步信號。通過設定內(nèi)部寄存器,,控制輸出幀率在0.5 幀/s~30 幀/s 之間變化,,窗口輸出設置為:640×480,經(jīng)過設定后的OV7620 輸出時序如圖2 所示:
圖2 OV7620 輸出時序圖
3.2 圖像傳輸
圖像采集幀率與數(shù)據(jù)傳輸接口的數(shù)據(jù)傳輸速率之間的匹配是圖像采集的一個重要問題。如果圖像傳感器的采集頻率大于接口的最大可傳輸數(shù)據(jù)率,,會引起緩沖區(qū)內(nèi)的圖像數(shù)據(jù)堵塞,,造成數(shù)據(jù)混亂,出現(xiàn)無規(guī)律的亂碼,。因此,,為了保證圖像數(shù)據(jù)傳輸時的完整性和可靠性,接口數(shù)據(jù)的傳輸速率應滿足圖像傳感器的采集速率,。下面是對本采集系統(tǒng)的傳輸匹配計算,。
已知:OV7620 的最大主時鐘頻率27MHz,最大數(shù)據(jù)率13.5MB/S.以OV7620 默認輸出為例:輸出格式VGA,分辨率640×480,幀率15 幀/秒,輸出數(shù)據(jù)格式為16 位彩色數(shù)據(jù),。
一幀圖像的數(shù)據(jù)量: (640 × 480 × 16)/8=614400B=0.586MB.
一秒鐘的最大數(shù)據(jù)量:0.586×15=8.79MB/S.
因為圖像采集中圖像數(shù)據(jù)不是連接不斷的采集,,幀與幀之間有場消隱時間,行與行之間也有行消隱時間,,所以13.5MB/S> 8.79MB/S.基于這個采集速率,,要實現(xiàn)VGA 圖像15 幀/秒的圖像采集,嵌入式主機與USB 接口速度應與圖像傳感器的采集速度相匹配,,至少不能小于9MB/S 的速度,,否則會出現(xiàn)數(shù)據(jù)在傳輸通道中堵塞,致使數(shù)據(jù)出現(xiàn)混亂,。系統(tǒng)采用USB1.0 作為傳輸接口,,系統(tǒng)采集的圖像數(shù)據(jù)為9MB/S,USB 傳輸速率大于9MB/S,故采集頻率與傳輸頻率匹配。
3.3 圖像顯示
液晶顯示器LCD 以省電和顯示大量信息等優(yōu)點而成為現(xiàn)代儀器儀表用戶界面的主要發(fā)展方向。本視覺系統(tǒng)采用三菱公司的8.4'彩色TFT-LCD 作為圖像顯示模塊,, 液晶屏大小為640 × 480 , 型號:AA084VC03.
系統(tǒng)需要兩種電源供電,,分別是5V 和12V.5V電源用于核心板供電,USB 圖像采集模塊由核心板供電,,12V 電源給液晶屏供電,,這些電壓由單獨的電源模塊提供。整個視覺系統(tǒng)的硬件結(jié)構(gòu)圖如下圖3 所示,。
圖3 視覺系統(tǒng)硬件結(jié)構(gòu)圖。
4 嵌入式視覺系統(tǒng)軟件設計
視覺系統(tǒng)軟件組成主要包括操作系統(tǒng),、設備驅(qū)動程序,,圖像采集和圖像顯示程序。操作系統(tǒng)負責整個系統(tǒng)的管理,,進程調(diào)度等,,為用戶使用開發(fā)板和外部設備提供最基本的接口程序,管理著開發(fā)板上的資源,。
移植Linux2.6.14 內(nèi)核作為嵌入式視覺系統(tǒng)的操作系統(tǒng),。設備驅(qū)動程序包括USB 攝像頭驅(qū)動和LCD 液晶屏驅(qū)動,通過在Linux 系統(tǒng)中配置和加載完成,。
4.1 圖像采集程序
確定USB 攝像頭被正常驅(qū)動后,,下一步就是使用Video4Linux 提供的API 函數(shù)集來編寫圖像采集程序。
具體圖像數(shù)據(jù)的捕獲過程為:打開攝像頭設備文件,、查詢和確認設備性能,、設置圖像的寬和高、設置色深,、建立內(nèi)存映射,、讀取圖像數(shù)據(jù)、關閉設備,。在上述過程中主要考慮如何讀取圖像數(shù)據(jù),,V4L 在內(nèi)核include/linux/videodev.h 文件中定義了一些重要的數(shù)據(jù)結(jié)構(gòu),進行圖像采集時,,通過對這些數(shù)據(jù)結(jié)構(gòu)的操作來獲得圖像數(shù)據(jù),。首先需要將顯示設備的地址映射到系統(tǒng)地址上來,,調(diào)用函數(shù)mmap(),。該函數(shù)返回地址就是存放圖像數(shù)據(jù)的地址, 每一幀圖像都偏移固定的長度,, 而攝像頭取得圖像會包含若干幀,,這樣通過周而復始的進行就可以將圖像數(shù)據(jù)采集下來。具體過程和涉及到的函數(shù)如下:
打開設備文件: int device = open (/dev/v4l/video0,O_RDWR);
內(nèi)存映射:char* memoryMap = (char*)mmap (0,memoryBuffer.size, PROT_READ PROT_WRITE,MAP_SHARED, device, 0);
圖像數(shù)據(jù): memoryMap + memory Buffer.offsets[bufferIndex]
4.2 圖像顯示程序
本系統(tǒng)采用直接將數(shù)據(jù)寫入FrameBuffer 中來顯示圖像。FrameBuffer 設備是運行在Linux 控制臺上的一個優(yōu)秀的圖形接口,,幾乎支持所有硬件,,提供了統(tǒng)一的API 接口,很好地實現(xiàn)了硬件無關性,。FrameBuffer的設備節(jié)點是/dev/fb* , 在編譯內(nèi)核時選中FrameBuffer.LCD 顯示程序流程圖如圖4 所示:
圖4 圖像顯示程序流程圖
應用程序編寫完之后,,用交叉編譯環(huán)境對這個文件進行編譯,沒有錯誤后可生成cam 可執(zhí)行文件,。然后把cam 拷貝到根目錄下的bin 文件夾,,在主機windows 系統(tǒng)超級終端下輸入命令:
#ln -s /dev/v4l/video0 /dev/video0
# cam 640 480 16 video0
就可以在屏幕上看到采集的圖像了。設計的嵌入式視覺系統(tǒng)樣機如圖5 所示,。
圖5 嵌入式視覺系統(tǒng)樣機。
5 視覺系統(tǒng)性能測試
S3C2410 控制板的I/O 口資源有限,,因此,,對圖像采集的控制信號線采用普通I/O 口,而不是用中斷I/O 口與其攝像頭模塊相連,,因此只能用軟件實時檢測I/O 的電平狀態(tài),,決定何時采集開始,何時讀數(shù)據(jù),,何時結(jié)束,。為了采集到圖像數(shù)據(jù)并能分辨出來,必須能夠跟蹤控制信號的變化狀態(tài),。
由于I/O 口的電平的變化頻率遠低于攝像頭控制信號的變化頻率,,如果不對攝像頭模塊進行降頻處理,這將導致I/O 口無法跟蹤控制信號變化,,即將無法判斷幀,、行、點何時開始與結(jié)束等狀態(tài)信息,。當攝像頭的最高頻率(點象素頻率最高)降到1MHZ 左右,,系統(tǒng)就能跟蹤并完整的采集到圖像信息,進一步處理之后完好的顯示出來,。圖6 是示波器對幀,、行、點信號及Y0 信號的波形圖,。
圖6 信號波形圖。
從上圖可以看出,,系統(tǒng)的控制信號非常完整和穩(wěn)定,,沒有出現(xiàn)毛刺,、變形等情況,給檢測讀取帶來了好處,。Y0 的波形圖有些段是低電平,,出現(xiàn)的位置不一樣,是因為攝像頭移動時,,環(huán)境光發(fā)生了變化,,引起整個Y 數(shù)據(jù)變化。
表1 采集到的實驗數(shù)據(jù)(示波器采用x10 檔),。
把示波器調(diào)整到x10 檔,在不同情況下,,多次采集YSYN 信號,、HREF 信號、PCLK 信號的峰-峰值,、平均值,、周期、頻率等數(shù)據(jù),,從Y0~Y7 中選擇Y0信號進行觀察,。從數(shù)據(jù)中可以看出各信號的峰-峰值變化幅度不大,尤其是信號的頻率比較穩(wěn)定,。Y0 數(shù)據(jù)信號很規(guī)整,,那么其他數(shù)據(jù)信號如Y1~Y7 也是如此。
多次實驗數(shù)據(jù)如下表1 所示,。
測試硬件性能穩(wěn)定之后,,在Linux 系統(tǒng)下把圖像采集、圖像顯示和保存圖像命令寫成一個腳本,,放在文件系統(tǒng)etc/init.d 目錄下,。重新把文件系統(tǒng)下載到開發(fā)板里,當開機啟動后,,系統(tǒng)會自動執(zhí)行圖像采集,、顯示和保存。
6 結(jié)論
本文主要基于S3C2410 開發(fā)板和Linux 操作系統(tǒng)設計了嵌入式視覺系統(tǒng),。該視覺系統(tǒng)不僅可以較好地實現(xiàn)圖像采集和顯示,,還可實現(xiàn)圖像存儲、網(wǎng)絡獲取圖像等功能,,并且可以在該基礎上研究圖像處理等算法,。與基于PC 組合的視覺系統(tǒng)相比,結(jié)構(gòu)簡單,,體積和重量減小,,功耗低,可移植性強,、功能擴展方便,,成本顯著降低,所以對這種嵌入式視覺系統(tǒng)研究具有相當重要的實用價值,。