佘 東
(安徽工業(yè)經(jīng)濟職業(yè)技術(shù)學院,合肥230051)
在地質(zhì)礦山開采和隧道施工等環(huán)境中,作業(yè)面距地面監(jiān)控中心較遠,生產(chǎn)環(huán)境非常惡劣。極易發(fā)生火災(zāi)、水災(zāi)、塌方等安全事故,工人的人身安全和健康受到威脅,安全生產(chǎn)也受到很大的影響。采用基于ARM和Ubuntu的地質(zhì)礦山監(jiān)控系統(tǒng)能夠?qū)⒕隆⑺淼赖茸鳂I(yè)面的情況實時地傳送到地面的控制中心,便于發(fā)現(xiàn)問題,安全防患于未然,為科學調(diào)度、決策提供了直觀、可靠的方法。
本項目采用Samsung S3C2440作為嵌入式微處理器,它主頻400MHz,最高533MHz。擁有獨立的16kB指令Cache、16kB數(shù)據(jù)Cache以及存儲器管理單元,具有更高的指令和數(shù)據(jù)處理能力,能夠運行完整的Linux操作系統(tǒng)。同時它集成了USB控制器、以太網(wǎng)控制、RTC、SPI、I2C等豐富的外圍設(shè)備,非常適合本系統(tǒng)[1],系統(tǒng)采用的硬件平臺的總體結(jié)構(gòu)如圖1所示。
圖1 總體結(jié)構(gòu)圖
可以在S3C2440運行的嵌入式操作系統(tǒng)有很多,如Linux、VxWorks、Windows CE、uC/OS-Ⅱ等,本項目采用Ubuntu系統(tǒng)作為嵌入式系統(tǒng)平臺。Ubuntu是Linux操作系統(tǒng)的一種,本項目采用的版本為10.04LTS,其開發(fā)代號為Lucid Lynx,于2010年4月發(fā)布,目前Ubuntu最新版本是11.10,開發(fā)代號:Oneiric Ocelot。使用Ubuntu系統(tǒng),主要因為其強大的功能,對硬件、網(wǎng)絡(luò)的良好支持,并且免費使用、文檔資料豐富、代碼開源。
在進行嵌入式開發(fā)之前,首先要建立一個交叉編譯環(huán)境,交叉編譯工具主要由binutils、gcc和glibc幾個部分組成(有時用別的c庫來代替glibc,例如uClibc、dietlibc和newlib)。在ARM平臺上移植ubuntu,Host是一臺一般的PC機,它通過串口或網(wǎng)絡(luò)接口與Target通信[2]。安裝時需要以下文件:arm-linux-gcc-3.4.1.tar.gz、glibc-2.3.3.tar.gz、linux-2.6.8.tar.gz、crosstool-0.43.tar.gz、binutils-2.15.tar.gz、glibc-linuxthreads-2.3.3.tar.gz、binutils-2.18.tar.gz。方法如下:
(1)先安裝binutils的2.18版本
sudo apt-get install bison flex build-essen-tial patch libncurses5-dev。
(2)安裝4.1的GCC,并建立快捷方式
#sudo apt-get install gcc-4.1
#sudo ln-s/usr/bin/gcc-4.1/usr/bin/gcc。
(3)修改sh版本。
(4)解壓crosstool-0.43源碼包,并修改配置文件。
(5)將linux-2.6.8源碼包目錄下的/script/kconfig/mconf.c中的91行static struct menu*current_menu;改為struct menu*current_menu;這是為了解決"*current_menu"相關(guān)的錯誤。
(6)執(zhí)行sh arm-softfloat.sh,約需1h。
(7)修改環(huán)境變量,添加如下內(nèi)容:
PATH = MYMPATH:/home/linux/crosstool/gcc-3.4.1-glibc-2.3.3/arm-softfloatlinux-gnu/bin,并執(zhí)行$source.bashrc。
(8)執(zhí)行命令$arm-softfloat-linux-gnugcc-v直至交叉編譯環(huán)境創(chuàng)建成功。
(9)恢復(fù)修改的gcc及dash系統(tǒng)配置。
系統(tǒng)首先通過分布在礦山、隧道等環(huán)境中的攝像頭設(shè)備獲取原始的視頻信號(即RGB信號),其次通過壓縮JPEG算法把RGB信號轉(zhuǎn)換成可接收的JPEG視頻流數(shù)據(jù),然后把JPEG視頻流數(shù)據(jù)封裝成為可傳輸RTP格式,最后通過網(wǎng)絡(luò)接口傳輸。在部署網(wǎng)線的地方可利用以太網(wǎng)接口直接傳輸,無法部署網(wǎng)線的可利用GPRS無線傳輸模塊實時傳送到計算機網(wǎng)絡(luò)上[3]。地面人員在相應(yīng)的監(jiān)控中心負責實時監(jiān)控的客戶端,可通過監(jiān)控軟件獲得JPEG視頻數(shù)據(jù)流,并利用通用流媒體播放器實時解壓JPEG視頻數(shù)據(jù)在顯示器上顯示出來。通過上述措施,在地質(zhì)礦山開采和隧道施工等環(huán)境中,一旦監(jiān)控人員發(fā)現(xiàn)作業(yè)面出現(xiàn)異常,可實時通知作業(yè)人員緊急處理或立即撤離,從而保證工人的人身安全和安全生產(chǎn)的順利進行。
Ubuntu環(huán)境下的視頻采集程序主要是對一個稱為Video4Linux的程序模塊進行編程。Video4Linux可對各種攝像頭驅(qū)動進行統(tǒng)一管理,并為用戶對攝像頭的操作提供了一系列的編程接口,如open()、close()、ioctl()以及I/O控制和內(nèi)存映射等函數(shù),使用它可不必直接對USB攝像頭驅(qū)動程序操作,而直接對Video4Linux模塊操作即可,方便了程序的編寫[4]。方法如下:
(1)視頻設(shè)備打開,使用open()函數(shù),int open(struct video_device*,int mode);
(2)攝像頭信息讀取,主要是讀取video_capability結(jié)構(gòu)體的數(shù)據(jù),使用函數(shù):ioctl(vd->fd,VIDIOCGCAP,&(vd->capability)來完成。
(3)進行視頻采集,本項目主要是采用將攝像頭緩沖區(qū)的圖像幀映射到內(nèi)存,然后再讀取的方式,可以提高視頻采集的效率。要用到的兩個結(jié)構(gòu)體為:video_mmap和video_mbuf,其中video_mmap結(jié)構(gòu)體用于設(shè)置要映射到內(nèi)存的圖片幀數(shù)、格式和圖片屬性,而video_mbuf結(jié)構(gòu)體實際存儲攝像頭緩沖區(qū)的圖像幀信息。第一步先設(shè)置video_mmap結(jié)構(gòu)體,對實際要映射到內(nèi)存區(qū)的圖片幀進行設(shè)置,第二步使用函數(shù):ioctl(vd->fd,VIDIOCGMBUF,&(vd->mbuf)來提取實際攝像頭緩沖區(qū)圖片幀的信息。最后就是將這些幀信息映射到內(nèi)存中,利用函數(shù):mmap(0,vd->mbuf.size,PROT_READ|PROT_WRITE,MAP_SHARED,vd->fd,0)來完成,并把映射到內(nèi)存的地址通過函數(shù)返回。
(4)完成對這些映射到內(nèi)存的圖片幀的讀取,使用函數(shù):ioctl(vd->fd,VIDIOCMCAPTURE,&(vd->vmmap)可進行圖片幀的讀取,使用函數(shù):ioctl(vd->fd,VIDIOCSYNC,&vd->vmmap.frame)可進行圖片幀是否讀取完畢的檢測。
通過測試表明,在有線網(wǎng)絡(luò)中該系統(tǒng)能很好地實現(xiàn)地質(zhì)礦山信息的監(jiān)控。在無線網(wǎng)絡(luò)中,該系統(tǒng)也能較好地實現(xiàn)視頻監(jiān)控,隨著坑道或隧道的深入,無線傳輸會出現(xiàn)些許的偏差,此時需要通過架設(shè)基站(無線電收發(fā)信電臺)的方法,提供AccessPoint(即無線訪問接入點),當移動信號充足時,即可通過GPRS無線傳輸監(jiān)控視頻,為地質(zhì)礦山開采和隧道施工等環(huán)境提供安全保障。
[1]紀波.基于嵌入式Linux的視頻監(jiān)控系統(tǒng)的實現(xiàn)[J].電腦知識與技術(shù),2011(8):1918-1919.
[2]吳平.基于X264的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計[J].電視技術(shù),2011(7):108-110.
[3]孫繼平.礦井安全監(jiān)控系統(tǒng)[M].北京:煤炭工業(yè)出版社,2006:89-92.
[4]楊水清,張劍,施云飛.ARM嵌入式Linux系統(tǒng)開發(fā)技術(shù)詳解[M].北京:電子工業(yè)出版社,2008:152-154.