基于3G通信網(wǎng)的移動(dòng)機(jī)器人遠(yuǎn)程監(jiān)控的設(shè)計(jì)與實(shí)現(xiàn)
3G是第三代移動(dòng)通信技術(shù),結(jié)合了無線通信技術(shù)和互聯(lián)網(wǎng)等多媒體技術(shù)。隨著3G技術(shù)的發(fā)展,它在聲音和數(shù)據(jù)的傳輸速度上有很大提升,并能夠在全球范圍內(nèi)實(shí)現(xiàn)無線漫游。其數(shù)據(jù)傳輸高速、永遠(yuǎn)在線、覆蓋范圍廣等優(yōu)點(diǎn),有效地解決了移動(dòng)機(jī)器人采用有線或者無線遠(yuǎn)程控制所帶來的信息傳輸和控制距離等方面的瓶頸問題,使遠(yuǎn)程救援機(jī)器人、仿真機(jī)器人、家庭保姆機(jī)器人等移動(dòng)機(jī)器人技術(shù)在大數(shù)據(jù)量實(shí)時(shí)傳輸方面多了一種可利用的解決方案。
1 系統(tǒng)總體架構(gòu)
本系統(tǒng)主要用來將移動(dòng)機(jī)器人所采集到的視頻數(shù)據(jù)通過3G網(wǎng)絡(luò)傳給服務(wù)器,再將服務(wù)器的控制信號(hào)傳給電機(jī)驅(qū)動(dòng)板,以驅(qū)動(dòng)移動(dòng)機(jī)器人平臺(tái)運(yùn)動(dòng),總體架構(gòu)如圖1 所示。攝像頭OV9650采集的視頻圖像經(jīng)過JPEG壓縮后,存入緩存區(qū),當(dāng)服務(wù)器監(jiān)聽到客戶端的接入請(qǐng)求后,再將緩存區(qū)的數(shù)據(jù)通過網(wǎng)絡(luò)傳輸給客戶端的監(jiān)控界面進(jìn)行顯示;當(dāng)需要控制機(jī)器人行動(dòng)時(shí),客戶端的控制按鈕發(fā)送控制信息給服務(wù)器,服務(wù)器通過程序解析后控制底層電機(jī)驅(qū)動(dòng)器,驅(qū)動(dòng)機(jī)器人平臺(tái)運(yùn)動(dòng)。
圖1 系統(tǒng)總體架構(gòu)圖
系統(tǒng)硬件平臺(tái)核心處理器采用S3C6410,它基于ARM1176JZF—S內(nèi)核,是一個(gè)16/32位RISC微處理器,其內(nèi)部集成了強(qiáng)大的硬件加速器,包括音視頻處理、2D加速等,為2.5G和3G通信服務(wù)提供了優(yōu)化的硬件性能,工作頻率最高可達(dá)677 MHz;采用2 GB NAND Flash,主要用于存放內(nèi)核代碼、應(yīng)用程序、文件系統(tǒng)和數(shù)據(jù)資料;DDRSDRAM采用兩片128 MB K4X51163PE芯片;攝像頭采用CMOS圖像傳感器OV9650,最高輸出130萬像素(1300×1 024),具有高敏感度、低功耗、支持多種常用的圖像格式輸出、支持自動(dòng)圖像控制等優(yōu)點(diǎn)。
Linux作為一種類Unix操作系統(tǒng),具有穩(wěn)定健壯、低成本、高性能、互操作性好和源代碼開放等特點(diǎn)。而其良好的內(nèi)核結(jié)構(gòu),以及可裁剪的特性,滿足了嵌入式應(yīng)用的差異性需求,使其在嵌入式系統(tǒng)領(lǐng)域占有一席之地。本系統(tǒng)中采用的Linux內(nèi)核為3.0.1版本,文件系統(tǒng)采用 YAFFS2,Bootloader選用uboot。
2 系統(tǒng)軟件設(shè)計(jì)
2.1 視頻數(shù)據(jù)的采集與傳輸
視頻數(shù)據(jù)的采集通過Linux中視頻設(shè)備OV9650的驅(qū)動(dòng)以及Video for Linux提供的相應(yīng)接口完成。為了方便,將視頻采集的相關(guān)信息封裝到以下結(jié)構(gòu)體中:
采集程序通過函數(shù)init_s3c6410(struct vdIn*vd,char*device,int width,int height)來完成對(duì)攝像頭以及采集參數(shù)的初始化,并通過函數(shù)s3c6410_Grab(struetvdIn*vd)完成對(duì)圖像的抓取,用JPEG壓縮算法對(duì)采集到的圖像進(jìn)行壓縮,圖像格式為RGB565。
視頻數(shù)據(jù)傳輸通過Socket實(shí)現(xiàn),且直接在服務(wù)器設(shè)備端與Web客戶端之間進(jìn)行傳輸,通過視頻流服務(wù)器實(shí)現(xiàn)對(duì)視頻的開關(guān)控制。由于視頻傳輸是連續(xù)的過程,所以客戶端和服務(wù)器端都通過線程來實(shí)現(xiàn)發(fā)送與接收。接收線程由函數(shù)pthread_create( (servers[id].threadID),NULL,server thread,&(servers[id]))創(chuàng)建。
視頻的采集和傳輸是在兩個(gè)線程中實(shí)現(xiàn)的,它們共享一個(gè)緩沖池。這兩個(gè)線程都是在視頻采集服務(wù)器端的程序啟動(dòng)時(shí)創(chuàng)建并運(yùn)行的。其中采集視頻圖像的線程不斷通過攝像頭采集現(xiàn)場(chǎng)圖像,經(jīng)過JPEG壓縮后存放到緩沖池中,而傳輸視頻數(shù)據(jù)的線程創(chuàng)建一個(gè)Socket來監(jiān)聽等待遠(yuǎn)程客戶的連接請(qǐng)求。當(dāng)有客戶發(fā)送連接請(qǐng)求并建立連接后,就通過該連接向遠(yuǎn)程客戶發(fā)送視頻數(shù)據(jù),而發(fā)送的視頻數(shù)據(jù)就是從緩沖池中獲取的。也就是說,在視頻采集服務(wù)器端,視頻數(shù)據(jù)傳輸所需要的一切都已經(jīng)準(zhǔn)備好,就等著客戶的請(qǐng)求,一旦建立連接,就可以發(fā)送視頻數(shù)據(jù),從而實(shí)現(xiàn)較快的速度和較高的效率。
視頻采集和傳輸?shù)墓ぷ髁鞒虉D如圖2所示。
評(píng)論