本文介紹了基于嵌入式Linux平臺視頻傳輸與控制系統的構建,給出了跨客戶端通過3G網絡進行遠程視頻傳輸的技術實現,并總結了在實現過程中遇到的難點以及對應的解決方案。
3G是第三代移動通信技術,結合了無線通信技術和互聯網等多媒體技術。隨著3G技術的發展,它在聲音和數據的傳輸速度上有很大提升,并能夠在全球范圍內實現無線漫游。其數據傳輸高速、永遠在線、覆蓋范圍廣等優點,有效地解決了移動機器人采用有線或者無線遠程控制所帶來的信息傳輸和控制距離等方面的瓶頸問題,使遠程救援機器人、仿真機器人、家庭保姆機器人等移動機器人技術在大數據量實時傳輸方面多了一種可利用的解決方案。
1 系統總體架構
本系統主要用來將移動機器人所采集到的視頻數據通過3G網絡傳給服務器,再將服務器的控制信號傳給電機驅動板,以驅動移動機器人平臺運動,總體架構如圖1所示。攝像頭OV9650采集的視頻圖像經過JPEG壓縮后,存入緩存區,當服務器監聽到客戶端的接入請求后,再將緩存區的數據通過網絡傳輸給客戶端的監控界面進行顯示;當需要控制機器人行動時,客戶端的控制按鈕發送控制信息給服務器,服務器通過程序解析后控制底層電機驅動器,驅動機器人平臺運動。
系統硬件平臺核心處理器采用S3C6410,它基于ARM1176JZF—S內核,是一個16/32位RISC微處理器,其內部集成了強大的硬件加速器,包括音視頻處理、2D加速等,為2.5G和3G通信服務提供了優化的硬件性能,工作頻率最高可達677 MHz;采用2 GB NAND Flash,主要用于存放內核代碼、應用程序、文件系統和數據資料;DDRSDRAM采用兩片128 MB K4X51163PE芯片;攝像頭采用CMOS圖像傳感器OV9650,最高輸出130萬像素(1300×1 024),具有高敏感度、低功耗、支持多種常用的圖像格式輸出、支持自動圖像控制等優點。
Linux作為一種類Unix操作系統,具有穩定健壯、低成本、高性能、互操作性好和源代碼開放等特點。而其良好的內核結構,以及可裁剪的特性,滿足了嵌入式應用的差異性需求,使其在嵌入式系統領域占有一席之地。本系統中采用的Linux內核為3.0.1版本,文件系統采用YAFFS2,Bootloader選用uboot。
2 系統軟件設計
2.1 視頻數據的采集與傳輸
視頻數據的采集通過Linux中視頻設備OV9650的驅動以及Video for Linux提供的相應接口完成。為了方便,將視頻采集的相關信息封裝到以下結構體中:
采集程序通過函數init_s3c6410(struct vdIn*vd,char*devICe,int width,int height)來完成對攝像頭以及采集參數的初始化,并通過函數s3c6410_Grab(struetvdIn*vd)完成對圖像的抓取,用JPEG壓縮算法對采集到的圖像進行壓縮,圖像格式為RGB565。
視頻數據傳輸通過Socket實現,且直接在服務器設備端與Web客戶端之間進行傳輸,通過視頻流服務器實現對視頻的開關控制。由于視頻傳輸是連續的過程,所以客戶端和服務器端都通過線程來實現發送與接收。接收線程由函數pthread_create(&(servers[id].threadID),NULL,server thread,&(servers[id]))創建。
視頻的采集和傳輸是在兩個線程中實現的,它們共享一個緩沖池。這兩個線程都是在視頻采集服務器端的程序啟動時創建并運行的。其中采集視頻圖像的線程不斷通過攝像頭采集現場圖像,經過JPEG壓縮后存放到緩沖池中,而傳輸視頻數據的線程創建一個Socket來監聽等待遠程客戶的連接請求。當有客戶發送連接請求并建立連接后,就通過該連接向遠程客戶發送視頻數據,而發送的視頻數據就是從緩沖池中獲取的。也就是說,在視頻采集服務器端,視頻數據傳輸所需要的一切都已經準備好,就等著客戶的請求,一旦建立連接,就可以發送視頻數據,從而實現較快的速度和較高的效率。
視頻采集和傳輸的工作流程圖如圖2所示。
2.2 遠程控制的實現
為了監控界面能被通用瀏覽器打開,需要移植Web服務器Boa。Boa服務器是一款小型開源的嵌入式Web服務器,交叉編譯后的可執行代碼大小約為60 KB,在Linux3.0.1內核下運行時占用的內存大小約為1.7 MB。其功能較為強大,支持身份認證、CGI動態Web技術等。它不像傳統的Web服務器那樣為每個訪問連接開啟一個進程,只能依次完成用戶的請求,即單進程響應多路請求,因此,Boa在同等硬件條件下相對于其他Web服務器表現出更快的速度,節省更多的資源。
通用網關接口(CGI)是用于Web服務器與外部應用程序之間信息交互的標準接口。CGI可以使外部程序處理客戶端傳來的表單和數據,并對此作出某種反應。這種反應可以是HTML文件、圖片等可以在瀏覽器窗體上出現的任何數據,也可以是對服務器端硬件資源的控制。
調用CGI程序的方法主要有兩種:
①GET方法,CGI程序從環境變量QUERY_STRING中獲得數據;
②POST方法,Web服務器通過STDIN向CGI程序傳輸數據,數據量超過1024字節時采用此方法。
本系統采用GET方法。
在串口應用程序中,數據的獲取通過以下代碼實現:
……
char*data;
data=getenv(“QUERY STRING”);
……
3 監控界面的實現
監控界面用網貞實現,如圖3所示。
為了使頁面呈現出動態效果,如顯示當前時間、視頻數據傳輸速率等,頁面將嵌入Javascript代碼。整個界面分為兩個區:視頻顯示區和控制面板區。視頻顯示區顯示視頻流服務器傳輸上來的視頻數據,控制面板區通過按鈕與CGI串口應用程序交互控制電機驅動板。
Javascript是一種流行的通用腳本語言,基于Javascript可以實現用戶與頁面的交互,并響應頁面上發生的事件。
HTML表單是Web文檔的一部分,用來將信息從瀏覽器傳遞到服務器,它提供多種接收輸入的方法,包括單選按鈕、多選框、文本框等,表單以
上一篇:基于嵌入式Linux無線多頻段WSN網關設計
下一篇:基于ZigBee與μIP協議棧的嵌入式網絡監控系統設計
推薦閱讀
史海拾趣
芯力微一直將產品質量視為公司的生命線。在產品研發和生產過程中,公司嚴格遵守國際標準,確保每一顆芯片都達到最高的品質要求。這種對品質的執著追求不僅贏得了客戶的信賴,也為公司樹立了良好的品牌形象。隨著時間的推移,芯力微逐漸成為電子行業中備受尊敬的品牌之一。
隨著公司業務的不斷發展,DEI公司開始考慮國際化拓展。他們積極尋求與國際知名企業的合作,通過技術交流和共同研發,不斷提升自身實力。同時,DEI公司也在全球范圍內建立了銷售網絡,將產品推向了更廣闊的市場。這一舉措不僅提高了公司的知名度,也為公司帶來了可觀的收益。
隨著公司業務的不斷發展,DEI公司開始考慮國際化拓展。他們積極尋求與國際知名企業的合作,通過技術交流和共同研發,不斷提升自身實力。同時,DEI公司也在全球范圍內建立了銷售網絡,將產品推向了更廣闊的市場。這一舉措不僅提高了公司的知名度,也為公司帶來了可觀的收益。
在1948年,當美國民眾開始大量購買電視機時,電視機的維修需求也隨之增加。芝加哥的企業家卡爾·科恩(Carl Korn)和菲利普·班(Philip Ban)注意到了這一市場機會。他們發現,當時缺乏能夠輕松測試電視組件的設備,于是決定自己動手制作。兩位創業者從車庫起步,開始制造自己的測試設備,并成立了中央電視服務公司。他們的業務迅速擴展,開始向其他電視維修店銷售CRT再生器和真空管測試儀,為公司的后續發展奠定了堅實的基礎。
作為電子行業的領軍企業,BEL始終注重技術創新和研發。公司不斷投入大量資源用于新產品的研發和創新,努力引領行業趨勢。近年來,BEL在無人機、太陽能電池組等領域取得了顯著成果,推出了一系列具有創新性和市場競爭力的產品,為公司的持續發展注入了新的活力。
隨著技術的不斷積累和發展,BEL逐漸擺脫了對外部技術的依賴,開始自主研發和生產電子產品。公司不僅成功開發出一系列具有自主知識產權的產品,還打造了知名的BEL品牌。這些產品以其高性能、高可靠性在市場中贏得了廣泛認可,使BEL成為印度乃至全球電子行業中的佼佼者。
別人的導航軟件的手寫輸入在我定制的CE平臺上識別不了,為什么?跟平臺定制有關沒?CE組件沒加? 別人的導航軟件的手寫輸入在我定制的CE平臺上識別不了,為什么?跟平臺定制有關沒?CE組件沒加?… 查看全部問答∨ |
學習用51單片機控制基于ST7920的LCD產生如下問題,期盼諸位有經驗大俠能夠鼎力相助,小弟先在這里謝了。 問題1:如果我想在LCD屏幕的某行讓五個漢字(例如:液晶顯示器)居中顯示必須我自己編漢字嗎?還是可以直接使用ST7920中自帶的漢字庫? 問 ...… 查看全部問答∨ |
1 單獨上電,我測了JTAG各個引腳電平,TMS TDI 等都是高的,但是TDO是低的,只有0.2V左右 這樣正常嗎?是不是JTAG影響了DSP的工作呢 2 DSP的復位腳上電時候都應該 ...… 查看全部問答∨ |
|
用單片機做了一塊數據編碼模塊,獨立工作正常,現在要用于一個電磁環境及其惡劣的場合,有以下兩個問題: 1、原來是兩層板,有沒有必要改成四層板? 2、接地如何處理? 板子裝在一個封閉的金屬外殼內,板子本身的地和金屬機殼是應該連到一起還是 ...… 查看全部問答∨ |
看看你答案對么?LED照明知識問答 1,引起LED光衰的主要原因是什么? A,溫度 B,紋波 C,驅動電流 2,什么架構可以消除LED照明燈具的市電工頻閃爍? A,單級架構&n ...… 查看全部問答∨ |