基于OPenWrt開(kāi)源系統(tǒng)的無(wú)線視頻監(jiān)控智能車設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:引入了一種基于開(kāi)源系統(tǒng)的無(wú)線視頻監(jiān)控智能車設(shè)計(jì)方案,該方案利用雙核、雙系統(tǒng)的開(kāi)源硬件來(lái)搭建智能車的基礎(chǔ)設(shè)備,再利用開(kāi)源的OpenWrt系統(tǒng)構(gòu)建基于REST API的用戶交互接口。用戶可以通過(guò)該接口控制智能車的運(yùn)動(dòng),以及獲取傳感器數(shù)據(jù),最后利用基于Web的開(kāi)源攝像頭采集系統(tǒng)MJPEG—STREAM搭建視頻監(jiān)控系統(tǒng)。本方案可降低開(kāi)發(fā)成本、提高開(kāi)發(fā)效率,具有較高的應(yīng)用價(jià)值。
關(guān)鍵詞:OpenWrt;MJPEG—STREAM;開(kāi)源;ATmega32U4;Atheros AR9331
引言
隨著計(jì)算機(jī)科學(xué)技術(shù)的不斷發(fā)展,各種智能化的設(shè)備也應(yīng)運(yùn)而生,特別是近期無(wú)人遙控飛機(jī)新聞的頻繁曝光,從明星求婚到快遞運(yùn)送,都體現(xiàn)了無(wú)人遙控設(shè)備將是未來(lái)產(chǎn)業(yè)發(fā)展和創(chuàng)新應(yīng)用的一個(gè)新起點(diǎn)。然而目前無(wú)人機(jī)在多數(shù)情況下只用于航拍或空中測(cè)繪,而對(duì)于室內(nèi)應(yīng)用,如對(duì)無(wú)塵、防盜,以及環(huán)境參數(shù)要求較高的企業(yè)倉(cāng)儲(chǔ)管理來(lái)說(shuō),無(wú)人機(jī)在續(xù)航和室內(nèi)定向巡航方面就顯現(xiàn)出了劣勢(shì);而對(duì)于如地震、泥石流等自然災(zāi)害中常見(jiàn)的狹窄處補(bǔ)給物資的運(yùn)輸和地下生命的探測(cè),無(wú)人機(jī)的功能則大打折扣。
基于以上這些原因,本文提出了一種基于開(kāi)源硬件的無(wú)線遙控視頻監(jiān)控智能車的設(shè)計(jì),把開(kāi)源硬件和Linux系統(tǒng)相結(jié)合,把視頻監(jiān)控車變?yōu)橐粋€(gè)帶WiFi功能的智能設(shè)備,用戶可以通過(guò)合理的系統(tǒng)配置,使智能車加入已有的WiFi網(wǎng)絡(luò),從而使用戶可以通過(guò)無(wú)線方式實(shí)現(xiàn)對(duì)智能車運(yùn)動(dòng)的控制和實(shí)時(shí)視頻監(jiān)控畫(huà)面的傳輸,解決了因某些原因?qū)е乱恍﹫?chǎng)所無(wú)法進(jìn)入時(shí),對(duì)內(nèi)部環(huán)境的監(jiān)控和物資運(yùn)輸?shù)膯?wèn)題。同時(shí),采用開(kāi)源硬件也避免了硬件設(shè)備高額的設(shè)計(jì)費(fèi)用和調(diào)試費(fèi)用,為今后智能設(shè)備的開(kāi)發(fā)及應(yīng)用提供一種新的解決思路。
1 系統(tǒng)總體設(shè)計(jì)
本設(shè)計(jì)采用雙核、雙系統(tǒng)的方式進(jìn)行架構(gòu)設(shè)計(jì),從而明確各子系統(tǒng)的責(zé)任,減輕硬件系統(tǒng)的負(fù)擔(dān),提高各子系統(tǒng)的內(nèi)聚性,并降低各子系統(tǒng)間的耦合性。其中,智能車控制系統(tǒng)采用基于AVR內(nèi)核的ATmega32U4芯片,該芯片的時(shí)鐘頻率為16 MHz,具有20個(gè)數(shù)字接口、12個(gè)模擬接口,以及7個(gè)PWM接口,同時(shí)內(nèi)建的USB通信功能可以省去外圍電路中UART轉(zhuǎn)USB的設(shè)計(jì)。而無(wú)線視頻監(jiān)控系統(tǒng)則采用目前公認(rèn)的相對(duì)穩(wěn)定的WiFi解決方案,即Atheros AR9331芯片方案,該芯片采用MIPS架構(gòu),CPU主頻達(dá)到400 MHz,并且只需要3.3 V就可以實(shí)現(xiàn)超低功耗的802.11n協(xié)議。因此對(duì)于本系統(tǒng)來(lái)說(shuō)只需要一個(gè)5 V的USB接口就可以為整個(gè)系統(tǒng)實(shí)現(xiàn)供電以及程序的燒錄等功能,使得系統(tǒng)的開(kāi)發(fā)極為方便。
此外在軟件運(yùn)行過(guò)程中,用戶可以通過(guò)智能系統(tǒng)提供的REST API輕松地實(shí)現(xiàn)與智能車系統(tǒng)之間的通信,并控制智能車的各種運(yùn)動(dòng)、避障,甚至在智能車自動(dòng)控制和手動(dòng)控制之間進(jìn)行切換;同時(shí),在視頻監(jiān)控系統(tǒng)中內(nèi)建了基于嵌入式Linux的Open Wrt系統(tǒng),并基于該系統(tǒng)搭建了實(shí)時(shí)視頻傳輸系統(tǒng)——MJPEG-STREAM,用戶只需要使用HTTP接口就可以方便地實(shí)現(xiàn)實(shí)時(shí)圖像數(shù)據(jù)的傳輸。
硬件方面采用了開(kāi)源的設(shè)計(jì),通過(guò)全世界硬件工程師的不斷改進(jìn)和完善,保障了硬件系統(tǒng)的穩(wěn)定,同時(shí)開(kāi)源設(shè)計(jì)也節(jié)約了大量的前期硬件開(kāi)發(fā)成本,提高了硬件系統(tǒng)的開(kāi)發(fā)效率,降低了開(kāi)發(fā)成本。而在軟件方面,其主要特點(diǎn)體現(xiàn)在用戶接口上,不論智能車控制系統(tǒng)還是視頻監(jiān)控系統(tǒng),均采用HTTP通信方式,可以實(shí)現(xiàn)對(duì)各類終端設(shè)備的支持,如移動(dòng)終端、PC端,甚至Web端。系統(tǒng)結(jié)構(gòu)如圖1所示。
2 MJPEG—STREAM視頻流的實(shí)現(xiàn)
MJPEG—STREAM是一個(gè)基于“運(yùn)動(dòng)圖像壓縮技術(shù)”的攝像頭圖像采集系統(tǒng),并且該系統(tǒng)通過(guò)Web方式進(jìn)行實(shí)時(shí)圖片傳輸,用戶只需要利用瀏覽器就可以實(shí)現(xiàn)視頻監(jiān)控等工作,同時(shí)由于該系統(tǒng)采用開(kāi)源方式進(jìn)行開(kāi)發(fā),因此對(duì)該系統(tǒng)的任何修改和使用都不存在版權(quán)的問(wèn)題,降低了視頻開(kāi)發(fā)的成本,提高了開(kāi)發(fā)的效率。
本項(xiàng)目基于OpenWrt系統(tǒng)對(duì)MJPEG—STREAM的構(gòu)建,而OpenWrt也是一個(gè)開(kāi)源的嵌入式Linux系統(tǒng),其包含3000多個(gè)軟件包,用戶只需要通過(guò)簡(jiǎn)單的指令就可以實(shí)現(xiàn)軟件的下載、編譯、安裝和使用,具體構(gòu)建步驟如下:
①更新OpenWrt的軟件源。
OpenWrt:~# opkg update
②下載并安裝UVC攝像頭驅(qū)動(dòng),安裝結(jié)束后插入攝像頭,如果在OpenWrt的/dev目錄下看到video0文件,則表示安裝成功。
OpenWrt:~#opkg install kmod-video-uvc
③下載并安裝MJPEG—STREAM開(kāi)源庫(kù)。
OpenWrt:~# opkg install mjpeg—streamer
④連接攝像頭,啟動(dòng)MJPEG—STREAM,并設(shè)置其輸出的分辨率和地址。
OpenWrt:~# mjpg_streamer-i“input_uvc.so/dev/video0—r 640x480”-o”output_http.so-p 8080-w/www/webcam”
⑤最后在瀏覽器中輸入以下地址,就可以進(jìn)行視頻監(jiān)控。
http://local_ip:8080? action=snapshot
http://local_ip:8080/?action=stream
3 REST接口的設(shè)計(jì)
REST(Representational State Trans fer)即表述性狀態(tài)傳遞,是Roy Fielding博士在2000年提出的一種軟件架構(gòu)風(fēng)格,是一種針對(duì)網(wǎng)絡(luò)應(yīng)用的設(shè)計(jì)和開(kāi)發(fā)方式,可以降低開(kāi)發(fā)的復(fù)雜性,提高系統(tǒng)的可伸縮性。其定義了一組體系架構(gòu)原則,開(kāi)發(fā)人員可以根據(jù)這些原則設(shè)計(jì)以系統(tǒng)資源為中心的Web服務(wù),包括使用不同語(yǔ)言編寫的客戶端如何通過(guò)HTTP處理和傳輸資源狀態(tài)。目前 REST已經(jīng)成為最主要的Web服務(wù)設(shè)計(jì)模式。
在本項(xiàng)目中REST接口主要實(shí)現(xiàn)3方面的應(yīng)用,分別為監(jiān)控?cái)z像頭的多角度轉(zhuǎn)動(dòng)、智能車的運(yùn)動(dòng)控制,以及各類傳感器實(shí)時(shí)數(shù)據(jù)的獲取,具體如下。
①監(jiān)控?cái)z像頭的多角度轉(zhuǎn)動(dòng):包含控制水平舵機(jī)和垂直舵機(jī)的角度,其中垂直方面以攝像頭面向地面為0°,向上為0~180°,而水平向左為0°,向右為0~180°,但當(dāng)用戶沒(méi)有設(shè)定角度時(shí),則傳遞默認(rèn)值10給后端進(jìn)行處理,具體如表1所列。
②智能車的運(yùn)動(dòng)控制:包含控制車輛的前進(jìn)、后退、轉(zhuǎn)彎,以及停止等操作,同時(shí)需要用戶傳遞車輛前進(jìn)、后退、轉(zhuǎn)彎的速度值給系統(tǒng),否則系統(tǒng)將使用默認(rèn)值向后端系統(tǒng)進(jìn)行傳遞,如表2所列。
③各類傳感器實(shí)時(shí)數(shù)據(jù)的獲取:要獲取傳感器參數(shù),首先要獲取各類傳感器的類型,因此本系統(tǒng)要提供一個(gè)接口來(lái)返回本系統(tǒng)包含的所有傳感器類型,然后再通過(guò)該類型獲取相應(yīng)傳感器當(dāng)前實(shí)時(shí)的數(shù)據(jù),如表3所列。
4 CGI程序的設(shè)計(jì)
在本項(xiàng)目中除了通過(guò)REST API接收到用戶的各類請(qǐng)求之外,更為重要的是在分析和辨識(shí)這些請(qǐng)求后,能夠利用串口通信把這些指令發(fā)送給ATmega 32U4進(jìn)行處理,而要把REST接口和本地應(yīng)用相結(jié)合的橋梁就是CGI。
CGI(Common Gateway Interface)是萬(wàn)維網(wǎng)技術(shù)中最重要的技術(shù)之一,是本地應(yīng)用程序與Web服務(wù)器之間的接口標(biāo)準(zhǔn)和信息傳遞的規(guī)范。通過(guò)CGI可以使Web服務(wù)器執(zhí)行本地應(yīng)用程序,并將它們的輸出發(fā)送給Web瀏覽器,使得Web頁(yè)面由單一的靜態(tài)展示變?yōu)橥暾慕换ッ襟w。
首先本項(xiàng)目采用雙核、雙系統(tǒng)的方式進(jìn)行架構(gòu),因此在Atheros AR9331和ATmega32U4之間采用串口作為數(shù)據(jù)通信的方式,另外由于在Atheros AR9331上部署了基于Linux系統(tǒng)的OpenWrt,而Linux系統(tǒng)對(duì)于串口的操作非常方便,因此在接收到用戶的REST請(qǐng)求之后,只需要按照 CGI程序的編寫規(guī)范獲取用戶的請(qǐng)求數(shù)據(jù),并從中解析出請(qǐng)求類型和請(qǐng)求參數(shù)即可,最后通過(guò)串口把這些請(qǐng)求和參數(shù)發(fā)送給ATmega32U4進(jìn)行后期處理,具體流程如圖2所示。
5 智能車控制系統(tǒng)的設(shè)計(jì)
智能車控制系統(tǒng)主要包含3方面內(nèi)容,即智能車運(yùn)動(dòng)控制、攝像頭云臺(tái)控制,以及各類傳感器的數(shù)據(jù)獲取。通過(guò)接收前端用戶的指令,并經(jīng)過(guò)CGI程序的分析和傳遞,用戶就可以利用任意平臺(tái)中的HTTP訪問(wèn)來(lái)控制智能車和云臺(tái)的運(yùn)動(dòng),以及獲取傳感器的數(shù)據(jù)。
5.1 智能車運(yùn)動(dòng)系統(tǒng)的設(shè)計(jì)
本系統(tǒng)中智能車運(yùn)動(dòng)系統(tǒng)的電機(jī)驅(qū)動(dòng)采用ST公司的典型雙H橋直流電機(jī)驅(qū)動(dòng)芯片L298N,該芯片具有較強(qiáng)的驅(qū)動(dòng)能力,最多可提供2 A的峰值電流和46 V的峰值電壓,此外由于L298N只提供2路驅(qū)動(dòng),但本項(xiàng)目需要使用對(duì)4路步進(jìn)電機(jī)的驅(qū)動(dòng),因此采用對(duì)原來(lái)的2路輸出進(jìn)行擴(kuò)展,把其變?yōu)?路兩相輸出,使得把左、右兩邊獨(dú)立的4路輸出合并為左、右兩邊2路的輸出,具體如表4所列。
在表4中EA和EB分別表示左、右電機(jī)的PWM速度,當(dāng)PWM越高時(shí),智能車的運(yùn)動(dòng)速度越快;I1、I2和I3、I4分別表示左、右兩個(gè)電機(jī)的轉(zhuǎn)向,0、1時(shí)為順時(shí)針,1、0時(shí)為逆時(shí)針。
5.2 攝像頭云臺(tái)系統(tǒng)的設(shè)計(jì)
本系統(tǒng)中攝像頭云臺(tái)控制系統(tǒng)主要采用RobotBase生產(chǎn)的RB-421一維度舵機(jī)進(jìn)行控制,該舵機(jī)可以精準(zhǔn)地進(jìn)行水平或垂直方向轉(zhuǎn)動(dòng)角度。
舵機(jī)控制系統(tǒng)主要由舵機(jī)控制線傳送可變PWM脈沖來(lái)進(jìn)行控制。通常舵機(jī)的基準(zhǔn)信號(hào)周期為20 ms,寬度為1.5 ms,當(dāng)傳輸該P(yáng)WM信號(hào)為基準(zhǔn)信號(hào)時(shí),舵機(jī)處于最大角度和最小角度的中間位置,即90°位置。
當(dāng)PWM信號(hào)的周期為0.5 ms時(shí),舵機(jī)所處的位置為0°,而當(dāng)PWM信號(hào)周期為2.5 ms時(shí),舵機(jī)所處的位置為180°,如果此時(shí)傳輸?shù)腜WM信號(hào)保持不變,那么舵機(jī)的位置就不發(fā)生變化,直到所受的外力大于其自身的最大扭力,舵機(jī)才會(huì)發(fā)生角度的變化。具體PWM與角度的關(guān)系如圖3所示。
5.3 智能車傳感器系統(tǒng)的設(shè)計(jì)
本系統(tǒng)中采用了多種傳感器,例如通過(guò)灰度傳感器實(shí)現(xiàn)智能車的自動(dòng)巡視功能,通過(guò)超聲波傳感器和舵機(jī)的結(jié)合實(shí)現(xiàn)小車180°的避障,通過(guò)紅外傳感器實(shí)現(xiàn)尾部障礙物的躲避,以及通過(guò)溫濕度、煙霧等環(huán)境傳感器來(lái)獲取實(shí)時(shí)環(huán)境參數(shù)。
當(dāng)用戶向智能車發(fā)送傳感器數(shù)據(jù)請(qǐng)求時(shí),系統(tǒng)通過(guò)CGI把請(qǐng)求發(fā)送到ATmega32U4芯片,該芯片與各類請(qǐng)求類型進(jìn)行匹配從而運(yùn)行相應(yīng)的傳感器處理函數(shù),并通過(guò)串口發(fā)送至CGI程序,最后CGI程序通過(guò)Web的方式把數(shù)據(jù)呈現(xiàn)在用戶面前,其流程如圖4所示。
結(jié)語(yǔ)
本文討論了基于開(kāi)源硬件的無(wú)線視頻監(jiān)控智能車的主要技術(shù),通過(guò)雙核、雙系統(tǒng)的架構(gòu)提高了系統(tǒng)整體的穩(wěn)定性,并減輕了各模塊的工作負(fù)擔(dān);其次在本系統(tǒng)中用戶指令和視頻監(jiān)控均采用HTTP方式進(jìn)行數(shù)據(jù)交互,使得本系統(tǒng)能夠通過(guò)任何終端對(duì)智能車進(jìn)行控制,擴(kuò)大了系統(tǒng)的應(yīng)用范圍和應(yīng)用場(chǎng)合,擺脫了以往只有專用設(shè)備才能進(jìn)行控制的局面。
最后,本系統(tǒng)中不論軟件還是硬件都采用開(kāi)源設(shè)計(jì),大大降低了系統(tǒng)開(kāi)發(fā)成本,提高了系統(tǒng)開(kāi)發(fā)的效率。本項(xiàng)目通過(guò)整合多方面的資源,為今后智能設(shè)備以及無(wú)人駕駛技術(shù)的開(kāi)發(fā)提供了一種可行的方法,具有一定的應(yīng)用價(jià)值。