張 簡,孔翠香
(①貴州大學 計算機科學與信息學院,貴州 貴陽550025;②井岡山大學 電子與信息工程學院,江西 吉安343009)
傳統(tǒng)的視頻監(jiān)控技術受布局,環(huán)境等條件的影響較大,相對龐大的體積造成資源的嚴重浪費。針對不同的應用場合需求,無線視頻監(jiān)控逐漸成為市場的主流。該系統(tǒng)在此基礎上為加強系統(tǒng)靈活性在可移動小車上搭載無線視頻監(jiān)控系統(tǒng),可用于軍事偵察、防污染等危險與惡劣環(huán)境,由于其特殊應用場合,所以特別要求這類小車具有成本低、運動靈活、使用可靠等特點。
本系統(tǒng)服務器端采用三星公司的 S3C2440A[1]嵌入式微處理器(外擴64 MB內(nèi)存,128 MB NAND FLASH)作為系統(tǒng)處理核心,核心板搭載USB攝像頭和無線Wi-Fi模塊。通過在小車上安裝繼電器電路來控制小車運動方向和攝像頭旋轉(zhuǎn)方向。小車的電源部分采用鋰電池外接穩(wěn)壓芯片來提供5 V直流電源??蛻舳瞬捎肣t作為上位機監(jiān)控畫面和運動控制的平臺,筆記本通過無線網(wǎng)卡和小車上的無線模塊交互數(shù)據(jù)。系統(tǒng)的硬件結構如圖1所示。
圖1 系統(tǒng)硬件結構
Linux操作系統(tǒng)是一種穩(wěn)定,高效的開源操作系統(tǒng),作為整個系統(tǒng)的核心,起著調(diào)配軟硬件協(xié)同工作的作用。該系統(tǒng)采用2.6.28內(nèi)核版本[2],按照需求對該內(nèi)核進行裁減,該版本的內(nèi)核對外設驅(qū)動支持較好,在移植到嵌入式平臺時指定ARM架構,交叉編譯工具,修改硬件系統(tǒng)時鐘便可在圖形配置菜單中選中你所需要硬件驅(qū)動,該系統(tǒng)要求內(nèi)核支持Nand Flash,USB攝像頭,GPIO等驅(qū)動[3]。編譯完成會在boot目錄下生成不到2MB的內(nèi)核鏡像。
V4L(VideoForLinux)是Linux下用于獲取視頻和音頻數(shù)據(jù)的API接口,目前內(nèi)核支持的最新版本是V4L2[4]。該系統(tǒng)采用的攝像頭設備文件是/dev/video0,若采取多路攝像頭,設備文件名依次增加。V4L2支持2種方式捕獲圖像:內(nèi)存映射(mmap)和直接讀取方式(read)。這里采用速度較快的mmap方式,通過在應用程序中調(diào)用相應V4L2模塊的API接口實現(xiàn)攝像頭的采集和控制,在結構體v4l2_capacity中包含設備信息,查詢完設備信息后,向驅(qū)動中申請四幀緩沖對采集到的視頻信號進行連續(xù)處理。部分源代碼操作如下:
①open(“/dev/video0”,O_RDWR|O_NONBLOCK,0)[5];以非阻塞方式打開視頻設備 USB攝像頭,成功打開后返回設備的文件描述符。
②xioctl (fd, VIDIOC_QUERYCAP, &cap);該函數(shù)會通過命令去讀取攝像頭基本屬性信息,返回信息存入結構體變量cap中。并通過VIDIOC_S_FMT設置采集視頻格式,這里分辨率設置為640×480。
③xioctl (fd, VIDIOC_REQBUFS, &req);通過命令VIDIOC_REQBUFS向驅(qū)動申請 4幀幀緩沖[6],其中req為v4l2_requestbuffers類型結構體變量,然后通過內(nèi)存映射mmap()指令將申請到的幀緩沖映射到用戶空間。
④xioctl (fd, VIDIOC_QBUF, &buf);通過命令VIDIOC_QBUF將申請到的幀緩沖全部入隊列,成功后便可開始采集。buf 是結構體v4l2_buffer變量,代表驅(qū)動中的一幀。
⑤讀取數(shù)據(jù)時通過命令VIDIOC_DQBUF將采到的幀數(shù)據(jù)出隊列,通過操作內(nèi)存中的緩存對采集到的視頻信號送入壓縮流程,最后將該緩存放入隊列。
服務器將通過主線程為此采集程序開辟一個子線程,另外將創(chuàng)建一個TCP傳輸子線程,實現(xiàn)數(shù)據(jù)流的有效交換。
繼電器在此系統(tǒng)中主要控制小車的前后,左右移動以及攝像頭的左右轉(zhuǎn)動,此模塊分為硬件電路和軟件電路。硬件主要通過經(jīng)過光耦隔離與放大后輸入給繼電器線圈,進而通過繼電器控制前進、后退電機、左右轉(zhuǎn)彎電機以及攝像頭旋轉(zhuǎn)電機。軟件主要通過修改Linux字符設備驅(qū)動中的ioctl函數(shù),來實現(xiàn)小車的兩鍵組合運動。服務器端TCP線程負責接收來自客戶端的按鍵信息,并進行相應的電平設置。
Wi-Fi模塊用來實現(xiàn)數(shù)據(jù)的無線傳輸,該系統(tǒng)采用USB接口的Wi-Fi[7]模塊ZD1211B,Linux內(nèi)核中有該模塊的驅(qū)動源碼,進行相應的內(nèi)核配置后再將ZD1211的firmware文件拷貝到跟文件系統(tǒng)/lib/firmware/zd1211目錄下。要使系統(tǒng)啟動后自動配置Wi-Fi模塊的參數(shù),要在啟動腳本中對無線網(wǎng)卡進行配置,這里用到Linux下的配置工具wrieless-tools,將其交叉編譯后移植到文件系統(tǒng)中可通過命令對接入無線網(wǎng)絡的參數(shù)進行設置。
本系統(tǒng)中采用的是Socket線程循環(huán),Socket套接字是一種使用標準 Unix文件描述符與其他程序通信的方式,用于實現(xiàn)不同主機之間的數(shù)據(jù)同步,發(fā)送端將要傳輸?shù)男畔懭胩捉幼种?,接收端則通過讀取套接字內(nèi)的數(shù)據(jù)獲得壓縮數(shù)據(jù),通信之前,服務器端先啟動守護進程來監(jiān)聽服務器端某個有效Socket[8]端口。服務器端調(diào)用了accept函數(shù)后,客戶端才能與服務器端建立連接。該系統(tǒng)服務器與客戶端均采用TCP協(xié)議傳輸數(shù)據(jù),服務器端線程主要負責圖像數(shù)據(jù)發(fā)送,接收客戶端按鍵信號和設置小車移動I/O電平,發(fā)送完后關閉該線程,重新進入主線程循環(huán)建立發(fā)送線程,這樣循環(huán)建立發(fā)送線程使各幀之間的數(shù)據(jù)傳輸互不影響,防止某幀錯誤導致其他數(shù)據(jù)傳輸錯誤。客戶端的TCP線程主要用來接收圖像數(shù)據(jù)和向服務器發(fā)送按鍵控制信息。
Qt是由TrollTech公司出品的跨平臺的C++圖形用戶界面庫,QT/X11和QTE是它的兩個不同平臺的版本,前者基于X Windows系統(tǒng),后者基于嵌入式系統(tǒng),由于其跨平臺的特性,源碼經(jīng)過交叉編譯可在不同的目標平臺上通用。該系統(tǒng)在PC端實現(xiàn)用戶界面控制,故安裝XP平臺下的開發(fā)環(huán)境QT CREATOR即可,QT模塊分為2個線程:接收數(shù)據(jù)線程和控制線程,在數(shù)據(jù)接收主線程中對畫布進行繪圖,并開辟專門的QTCPsocket[9]線程接受來自服務器端的數(shù)據(jù),由于QT自帶處理JPEG數(shù)據(jù)API函數(shù),使得圖像數(shù)據(jù)的格式轉(zhuǎn)換變得簡易??蛻舳说娜蝿者€要負責按鍵信息的發(fā)送,通過筆記本上的按鍵將控制信號發(fā)送給服務器,這個任務是在QTCPsocket線程中實現(xiàn)。PC端控制平臺畫面如圖2所示。
圖2 PC控制平臺界面
在實驗室條件下對整個系統(tǒng)進行測試,系統(tǒng)測試效果如圖3所示。
圖3 系統(tǒng)整體測試效果
小車的電源部分由手機電池接5 V穩(wěn)壓芯片構成。小車上電后通過在PC客戶端輸入小車的IP地址和端口號,即可實現(xiàn)筆記本與小車的無線Wi-Fi連接。從PC控制平臺界面中可以看出小車服務器傳回的視頻畫面較為清晰和流暢。通過筆記本上的設置的六個按鍵即可實現(xiàn)小車的前后,左右移動以及攝像頭的左右旋轉(zhuǎn),左前,右前等雙鍵組合鍵在小車上的實現(xiàn)效果也比較理想。該系統(tǒng)的不足之處在于小車的直流電機無法控制小車的移動速度,后續(xù)將采用步進電機改進小車的整體性能。
針對不同的市場需求,將嵌入式視頻服務器與無線可移動小車緊密結合,實現(xiàn)了嵌入式應用領域的創(chuàng)新,具有廣泛的應用前景。該系統(tǒng)有些地方還需改進,在后期的研究中會逐漸完善其功能與穩(wěn)定性。
[1] 王小紅,周淵平,方曉翠.嵌入式視頻監(jiān)控系統(tǒng)的設計和實現(xiàn)[J].通信技術,2011,44(06):105-109.
[2] 楊宗德,鄧玉春. LINUX高級程序設計[M].北京:人民郵電出版社,2009:310-326.
[3] 劉森.嵌入式接口技術與Linux驅(qū)動開發(fā)[M].北京:北京航空航天大學出版社,2010:113-129.
[4] 宋寶華.Linux設備驅(qū)動開發(fā)詳解[M].北京:人民郵電出版社,2010:115-134.
[5] 位元文化. Linux C/C++入門與進階[M].北京:科學出版社,2004:127-158.
[6] KAY A R.UNIX System Programming[M].北京:機械工業(yè)出版社,2005:310-335.
[7] 高揚,石秀民.基于嵌入式平臺的 WLAN實現(xiàn)[J].吉林大學學報,2006,24(1):103-107.
[8] 田澤.嵌入式系統(tǒng)開發(fā)與應用實驗教程[M].北京:北京航空航天大學出版社,2005:106-130.
[9] 丁林松,黃麗琴.Qt4圖形設計與嵌入式開發(fā)[M].北京:人民郵電出版社,2009:239-265.