【摘 要】本文基于嵌入式技術和視頻處理技術,介紹了一種新型的智能瓦斯抽放孔檢測機器人的設計方法。機器人采用S3C2440嵌入式控制芯片作為核心控制,基于Linux嵌入式操作系統(tǒng)平臺,利用紅外攝像頭對孔內圖像進行采集;采用圖像壓縮算法,對采集的圖像數據進行壓縮處理;將處理后的數據進行封裝并且通過以太網實時的傳輸到監(jiān)控端,實現對瓦斯抽放孔的全方位檢測。
【關鍵詞】圖像采集壓縮 遠程網絡傳輸 實時監(jiān)控
在一些高瓦斯礦井,工作面瓦斯的濃度超出《煤礦安全規(guī)程》所規(guī)定的標準,單純的采用通風的辦法難以把工作面的瓦斯?jié)舛瓤刂圃谠试S的范圍內,需要采取更加有效地瓦斯處理方式來改善安全生產狀況,緩解生產壓力。瓦斯抽放就是一種降低工作面瓦斯涌出量和防止突出的措施。因此,瓦斯排放孔的質量以及深度對礦井瓦斯抽放效果的影響是非常重要的,為了保證之后的煤礦開采工作安全高效地進行,對瓦斯抽放孔的質量評估至關重要。傳統(tǒng)的瓦斯抽放孔檢測方式有三種,第一種方式是在瓦斯抽放孔中注入空氣,利用氣體理論知識進行計算測得瓦斯抽放孔的深度。第二種方法同樣是注入空氣,但利用滾筒與繩子進行測距。第三種方式是人工的對鉆桿的長度進行繁瑣的計算,最后得出瓦斯抽放孔的長度。這三種方式都有各自的優(yōu)缺點,第一種方式測距注入空氣有可能遇見斷層的問題,從而導致測距不準確。第二種方式測距利用滾筒滾動時,有可能遇到煤渣,碎石等阻止?jié)L筒前進,從而導致測距不準確。第三種方式不僅繁瑣,而且還存在一個比較嚴重的問題,有些工人為了減輕工作負擔有時候并未按要求將鉆孔打到所需的長度,從而導致瓦斯沒有被完全的抽放,引起一定的安全問題。傳統(tǒng)的瓦斯抽放孔深度測量方法大都實現起來動用人力物力大并且測量不夠精確,功能單一,開發(fā)一種兼具測距與勘察的機器人意義巨大。因此,本文設計了一種高速發(fā)展的信息產業(yè)與煤礦開采中落后的瓦斯抽放孔檢測相結合的瓦斯抽放孔智能檢測機器人。對機器人的控制核心進行了軟硬件的詳細設計,簡化了人工檢測的繁瑣,強化了信息技術越來越快速高效的檢測手段以及豐富了礦井其它環(huán)境參數的檢測,更加快捷高效的觀測礦井的安全,為煤礦的生產帶來一種簡潔的方法。瓦斯抽放孔智能檢測機器人中視頻采集與視頻數據的傳輸是其關鍵的一部分,本文將重心放在了瓦斯抽放孔視頻采集與傳輸這一部分,重點介紹了這部分的開發(fā)。
一、系統(tǒng)硬件設計
(一)硬件總體結構
遠程監(jiān)控部分主要分為嵌入式視頻采集處理端,網絡傳輸部分,監(jiān)控中心PC端三部分。嵌入式視頻采集端主要由S3C2440硬件平臺和Linux系統(tǒng)的軟件平臺構成。通過720P的CMOS型OV9712傳感器對圖像進行采集并經過攝像頭板載DSP內置JPEG編碼器處理,通過USB口將數據傳輸到S3C2440控制板。利用Linux下的圖像處理程序進行編碼壓縮,通過以太網口將數據傳輸到NETLINK HTB-1100SA/B 型單芯光電轉換器將電信號轉換為光信號,然后通過單模光纖進行遠距離的傳輸,抵達監(jiān)控中心的PC端時,在通過光電轉換器將光信號恢復為電信號,通過以太網端口傳輸到PC。通過視頻解碼顯示現場圖像,實現遠程視頻監(jiān)控功能。
Figure1 .系統(tǒng)結構圖
(二)主要模塊設計
1.S3C2440核心
系統(tǒng)核心處理器采用ARM920T芯片S3C2440,400MHz主頻,內部帶有全性能的MMU低功耗,高性能,擁有:64M Byte的SDRAM,256M Byte 的 NAND FLASH ,2M Byte的NOR FLASH ,100Mbps低功耗嵌入式專用以太網網芯片DM9000,接口為標準RJ45插座,一路串口,一路USB-Device接口,一路USB-Host,支持NAND Flash和 NOR Flash 啟動方式,非常適合瓦斯抽放孔只能檢測機器人的開發(fā)。
Figure2.控制板模圖
控制板存儲系統(tǒng):S3C2440可尋址1G的地址范圍,但是S3C2440的地址線只有27根,理論上只能尋址2^27即128M的地址范圍。S3C2440是通過BANK解決這個問題的。S3C2440包含8個BANK,引出8根BANK線(nGCS0-nGCS7),通過這8根線,可以選通和關閉不同的存儲器,每個BANK可尋址128MB,可編程的訪問位寬BANK0為16或32位,其它BANK為8或16或32位;8個存儲器BANK,其中6個用于ROM或者SRAM,2個用于ROM、SRAM或者SDRAM; BANK0~BANK6的起始地址固定,BANK7的起始地址和大小可編程;本存儲系統(tǒng)使用的SDRAM是2片HYNIX的HY57V561620,它的規(guī)格是64M*16bit,使用兩片配置成32位的總線寬度,BANK大小是64MB,總線寬度是32位,器件大小是4*BANK大小為256Mb,根據配置原理,SDRAM上的BANK地址引腳BA0,BA1與S3C2440的ADDR25,ADDR24相連。用2片SDRAM配置成32位的總線寬度,所以SDRAM上的A[12:0]接到S3C2440的ADDR[14:2]引腳。
Figure3.存儲系統(tǒng)電路原理圖
2.DM9000以太網模塊
以太網卡物理結構一般分為 MAC MII PHY三部分,MAC一般指介質控制訪問協議,通常講的MAC地址便是在ISO協議中的數據鏈路層實現數據收發(fā)的,DM9000網卡芯片中的MAC指的是MAC控制器,它主要工作是控制整個網卡的工作。MII介質獨立接口,是一種總線,控制MAC和PHY之間的數據的傳輸。MII用于獲取PHY的連接狀態(tài),也可以設置PHY的連接狀態(tài)。PHY是實現網絡數據傳輸的硬件,在DM9000中是網絡接口的部分,它會把網絡數據轉換成串行數據流進行發(fā)送或者接受,處于協議的物理層。PHY提供10M和100M的接口選擇,通過PHY所包含的TX+,RX+,TX-,RX-,4跟數據線連接RJ45接口進行通信。在DM9000中將這三部分集成芯片內部。
Figure4.DM9000結構
DM9000工作原理:RJ45接口內部集成了網絡變壓器,其中LED0用于檢測連接狀態(tài),連接100M時LED0亮,連接10M時LED0滅。LED1用于檢測數據傳輸狀態(tài),有數據傳輸時LED1閃爍。通過TXO+,TXO-,RXI+,RXI-與DM9000相連。DM9000芯片和S3C2440通過系統(tǒng)總線相連,需要16位數據線DATA0~15,一根地址線ADDR2,地址線決定傳送的數據還是地址。DM9000的CMD和ADDR2相連:
CMD 1 寫數據 (寄存器的數據) 命令端口地址 0x20000004
CMD 0 寫命令(寄存器的地址) 數據端口地址 0x20000000
DM9000被掛載在S3C2440的bank4上,所以片選nGCS4,讀選為nWE,nOE,中斷為EINT8,中斷主要是在接受數據時產生。外圍電路原理圖如下:
Figure5. DM9000電路原理圖
3.光電轉換器模塊
光電轉換器符合IEEE802.3u 和100BASE-TX和100BASE-FX標準,提供了一個SC型的單模光纖端口和一個RJ-45端口,采用CWDM(波分復用)技術,工作波長:1310nm,1550nm,通過一根光纖集中二路鏈路信號實現實時傳輸單模光纖連接傳輸距離達25KM,支持存儲轉發(fā)模式,支持全雙工/半雙工工作方式,端口支持Auto-MDI/MDIX自動翻轉,
Figure6.光電轉換器模塊
二、系統(tǒng)軟件設計
(一)移植U-boot
嵌入式開發(fā)板中操作系統(tǒng)采用Linux-2.6.37.4內核,啟動ARM內核必要進行Boot Loader的編寫,通過Boot Loader可以初始化硬件設備、建立內存空間的映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個合適的狀態(tài),以便為最終調用操作系統(tǒng)內核準備好正確的環(huán)境,Boot Loader 是嚴重地依賴于硬件而實現的,在嵌入式世界里建立一個通用的 Boot Loader 幾乎是不可能的,所以在開發(fā)嵌入式時必須要構建屬于自己開發(fā)板的Boot Loader。因此,我們選擇了最常見的U-boot進行移植,U-boot 是德國 DENX 小組的開發(fā)用于多種嵌入式 CPU 的 Boot loader 程序, U-Boot 不僅僅支持嵌入式 Linux系統(tǒng)的引導,當前,它還支持 NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS 嵌入式操作系統(tǒng)。本開發(fā)板首先將構建好的U-boot通過串口下載到NOR Flash中,然后啟動開發(fā)板,讓開發(fā)板進入U-boot界面,然后通過U-boot將內核和文件系統(tǒng)下載到NAND Flash中,這樣更便于產品的開發(fā),防止一些意外情況導致NAND Flash中的內核損壞。
下面詳細介紹Uboot的移植過程:
1.修改MakeFile,加入針對該系統(tǒng)控制板的配置選項
(1)找到MakeFile和硬件平臺相關的config頭文件,修改主目錄MakeFile文件中的內容為:
XC2440_config: unconfig
$(MAKECONFIG) $(@:_config=) arm arm920t xc2440 1 s3c24x0
2.加入S3C2440處理器的時鐘設置
(1)修改start.s中的時鐘初始化部分。
(2)在cpu_init_crit加入跳轉到clock_init函數的語句。
(3)編寫clock_init函數設置CLKDIVN,MPLLCON,UPLLCON寄存器,主時鐘為400MHz,HCLK為100MHz,PCLK為50MHz,UPLL為48MHz。
(4)在MakeFile文件中加入對clock.c的編譯程序COBJS :=xc2440.o flash.o clock.c
3.修改NorFlash和NandFlash的驅動以適應S3C2440,增加NandFlash的啟動支持
(1)核心板采用的NorFlash型號為S29AL016J,容量大小為2M,所以需進行修改。對flash.c文件中的flash_init函數中加入flash_id并且在flash_print_info函數加入flash_info。
(2)在Uboot中已經有完善的MTD/NAND的驅動,支持S3C2441的NAND控制器驅動,但是我們使用的S3C2440的NAND驅動與S3C2441的NAND驅動不同,所以需要修改。修改CPU寄存器的頭文件s3c2440.h在其中添加s3c2440的NAND控制寄存器申明。
(3)修改NAND控制驅動文件s3c2440.h修改board_nand_init函數中NAND讀寫時間參數的配置。
4.增加MTD(NandFlash的分區(qū))
(1)系統(tǒng)中MTD設備就是NandFlash,需要在uboot中對NandFlash進行分區(qū),在xc2440.h中加入MTDPARTS命令和MTD分區(qū)信息。
(2)在main.c中加入mtdparts_init函數。
序號 分區(qū)名 分區(qū)大小 地址偏移量作用
0 bios0x00100000(1M)0x00000000存放uboot
1 params0x00020000(128K)0x00100000存放環(huán)境變量
2 kernel0x00400000(4M)0x00120000存放內核
3 root0x0fae0000(其余)0x00520000存放文件系統(tǒng)
5.修改網絡傳輸文件協議Xmodem,配置網絡協議
(1)uboot中已經具備了s3c2440的串口驅動文件serial_s3c24x0.c,現在只需要向uboot中加入loadxx指令即可在cmd_load.c文件中加入load_serial_xmodem函數的申明。在do_load_serial_bin函數中加入loadx加入相關的操作代碼。
(2)uboot中已經集成了各種網卡的驅動,現只需要指定相應的網卡芯片和配置相關的網絡參數即可。本系統(tǒng)采用的是DM9000A的網卡芯片,驅動文件為dm9000x.c,對其進行網絡配置。
加入ping命令配置
設置MAC地址1a:2b:3c:4e:5d;6f
設置子網掩碼255.255.255.0
設置IP地址192.168.1.10
設置服務器的IP地址192.168.1.100
(3)在board_eth_init函數中加入dm9000初始化函數,在dm9000函數中加入MAC地址的操作。
6.加入對啟動內核鏡像的支持和對yaffs文件的支持
(1)uboot默認不支持yaffs文件系統(tǒng)鏡像,我們只需要加入yaffs文件統(tǒng)的命令,并修改nand驅動的寫操作的方式。在xc2440.c頭文件中加入支持yaffs文件的配置,加入燒寫yaffs文件的命令,cmd_nand.c文件的do_nand函數中讀寫操作中加入yaffs文件的選項。
(2)在mtd.h的mtd_info結構體中加入nand驅動中用到的兩個變量。在nand_util.c文件中修改nand_write_skip_bad(),添加對OOB操作的支持,在nand_base.c 文件的nand_do_writes_ops加入oob的操作。
(二)配置交叉編譯環(huán)境
對于嵌入式系統(tǒng)的開發(fā),由于沒有足夠的資源在目標板上,進行開發(fā)調試,所以通常在宿主機上搭建交叉編譯環(huán)境進行嵌入式系統(tǒng)的開發(fā),開發(fā)時使用宿主機上的交叉編譯、匯編及連接工具形成可執(zhí)行的二進制代碼。然后把可執(zhí)行文件下載到目標機上運行。本產品的開發(fā)采用在windows環(huán)境下用VirtualBox4.0.8 搭建Ubuntu12.04虛擬機輔助于Qt,在宿主機上搭建了交叉編譯環(huán)境arm-linux-gcc 4.1.2。為了方便調試和燒寫,讓宿主機支持Samba服務器。最后編譯移植Linux-2.6.37.4內核,包括DM9000的網卡驅動,USB攝像頭的通用驅動,以及用busybox對文件系統(tǒng)進行構建,將最后的屬于目標產品的鏡像下載到目標產品中,開發(fā)出自己的產品。
(三)嵌入式USB攝像頭驅動設計
Linux內核中已經帶有很完善的USB攝像頭驅動,支持幾乎所有的USB 攝像頭,我們只需要配置內核,選擇相應的Sensor型號即可,選擇攝像頭的時候要選擇支持UVC 協議和支持MJPEG格式的 USB 攝像頭,S3C2440 處理器的 USB 接口僅支持 USB1.1 協議,由于 USB 帶寬的限制,所以能更好的支持 MJPEG 格式。S3C2440 也能支持 YUYV 格式,但是 YUYV 格式需要比較大的帶寬,在 USB 初始化時已經就把帶寬給限制了,這樣最大也僅能支持到 QVGA320*24或更小的分辨率,而且?guī)室彩呛艿偷?,這對視頻傳輸來說就沒有任何意義了。如果是 MJPEG 格式,就不會有這樣的問題。 除了 S3C2440 以外,大部分 ARM9 及同類的處理器(包括 6410 等 ARM11 處理器或更高級的處理器),也都是 USB1.1 接口,所以要用這類處理器做圖像采集項目時,選用支持MJPEG 格式的攝像頭。
(四)V4L2圖像采集程序的實現
USB攝像頭一般都是基于V4L2架構的,需要編寫V4L2架構的程序來操作攝像頭。V4L2是Linux內核中的視頻設備驅動,它的作用是分層次為視頻設備的應用程序提供一套完備的編程接口函數,對于本系統(tǒng)采用的紅外攝像頭,其驅動程序包括最基本的I/O操作函數,中斷的處理等。
1.V4L2基本中數據結構
(1)struct video-capability capability:包含設備的基本信息:設備支持的最大最小分辨率、信號源信息等。
(2)struct video_picture picture:設備采集圖像的各種屬性。
(3)struct video_channel channel:關于信號源的屬性.用于多個攝像頭。
(4)struct video_window window:包含關于capture area的信息。
(5)struct video_mbuf mbuf:利用mmap進行映射的幀的信息。
(6)Struct video_mbuf mmap:用于內存映射法采集圖像數據或視頻流。
2.視頻采集編程流程圖
Figure7.視頻采集編程流程圖
3.視頻采集函數
(1)int v4l_open(char *dev,v4l_device*vd);打開視頻設備,該函數采用系統(tǒng)調用函數ioctl(vd_fd=open(“/dev/video0“,O_ RD—WR)).vd->fd是設備打開后返回的文件描述符(打開錯誤返回一1).以后的系統(tǒng)調用函數就可使用它來對設備文件進行操作了。
(2)int v4l_get-capability(v4l_device*vd);讀取設備基本信息,利用(vd_fd,VIDIOCGCAP,(vd_capability)函數讀取struct video_capability中有關攝像頭的信息。該函數成功返回后,這些信息從內核空間拷貝到用戶程序空間grab_cap各成員分量中,使用printf函數就可得到各成員分量信息。
(3)int v4l_get_picture(v4l_device*vd);通過ioctl(vd_fd,VID-IOCGPIT,(vd-picture))讀取攝像頭緩沖區(qū)中圖像屬性??梢酝ㄟ^給分量賦值改變這信息。
(4)int v4l_get_channels(v4l_device*vd);該函數依賴于讀取設備基本信息函數,返回信號源信息。
(5)int v4l_close(v4l_device*vd);關閉設備。
(6)int ioctl(int fd,int cmd,(vd_X));其中fd代表設備文件描述符;cmd代表用戶程序對設備的控制命令;X表示上面所列的某個數據結構。
三、視頻圖像顯示
S3C2440及其USB紅外攝像頭是圖像采集與傳輸的關鍵部分,利用USB攝像頭采集圖像,通過壓縮編碼,將數據存儲在開發(fā)板上,然后通過以太網卡與光纖相連,將存儲的圖像傳輸到目標PC機上。將嵌入式開發(fā)板板作為Web服務器,編寫服務器的程序,用線程來處理圖像采集和客戶端的傳輸。圖像采集與傳輸系統(tǒng)調試好后,通過光纖以太網把開發(fā)的系統(tǒng)和PC機連接起來。把PC機的IP設置成與服務器的IP在同一網段,然后在PC機的瀏覽器或者客戶端軟件分別里輸入服務器的IP地址192.168.1.10連接后,視頻采集的圖像將傳輸到瀏覽器端或者客戶端。
(一)瀏覽器顯
用戶在客戶端瀏覽器地址欄里輸入嵌入式服務器的地址“http://192.168.1.10:8080”顯示圖像如下(Figure8):
(二)客戶端軟件顯
在客戶端軟件中輸入IP地址 192.168.1.10 ,點擊連接連接到web服務器,web服務器傳輸攝像頭采集的圖像顯示如下(Figure9):
四、結束語
本文重點介紹了瓦斯抽放孔智能檢測機器人中的圖像采集這一部分,依靠S3C2440的硬件平臺和Linux軟件平臺,實現了圖像的采集,處理和遠程傳輸,嵌入式的實時性和可靠性為遠程圖像的監(jiān)控提供了更加簡潔的方式。同時也為煤礦的井下檢測提供了一種便利的方式,然而此系統(tǒng)不僅僅應用于礦井的監(jiān)控而且可以再其他工業(yè)監(jiān)控,遠程指揮系統(tǒng)等其它領域投入廣泛的使用。
Figure8
Figure9
參考文獻:
[1]孟超, 張曦煌. 基于嵌入式系統(tǒng)圖像采集與傳輸設計 .《計算機工程與設計》V01.29 No.1 7
[2]唐人財, 劉連浩, TANG Ren-cai, LIU Lian-hao . 基于嵌入式Linux遠程圖像監(jiān)控系統(tǒng)的設計.《計算機與現代化》,2010,11
[3]劉昌舉,戴基智,龍再川,王 勇,李應輝. 基于嵌入式Linux和S3C2410的遠程CCD圖像采集系統(tǒng).《半導體光電》,2006,12
[4]李金廣,羅 飛,楊暉,劉祥利,基于S3C2410的嵌入式圖像傳輸系統(tǒng)的設計與實現,2007,5