劉博,楊斌
(西南交通大學(xué) 信息科學(xué)與技術(shù)學(xué)院,成都610031)
隨著人們生活水平不斷提高,私家車越來越多地走進(jìn)了平常百姓家。這樣就引發(fā)了一個嚴(yán)重的社會問題,車輛被盜的情況越來越多,在這個趨勢下車載定位監(jiān)控系統(tǒng)越來越得到廣大車主關(guān)注。車載定位監(jiān)控系統(tǒng)可以時時刻刻保護(hù)車輛的財產(chǎn)安全。這種車輛安防系統(tǒng)將會是汽車租賃公司、汽車廠商保護(hù)車輛安全的合理解決方案。
中國版BeagleBone Black(BBB)是英蓓特科技有限公司推出的一款基于AM3359處理器的開源開發(fā)套件。處理器集成了4 GHz的ARM Cortex-A8內(nèi)核,并提供了豐富的外設(shè)接口。中國版BBB的擴(kuò)展接口包括網(wǎng)口、USB Host、USB OTG、TF卡接口、串口、JTAG 接口(默認(rèn)不焊)、HDMI D Type接口、e MMC、ADC、I2C、SPI、PWM 和LCD屏接口。通用接口包括4組通用輸入輸出接口(GPIO),每一組GPIO模組提供32個專用的通用接口輸入輸出引腳,因此通用的GPIO有128個引腳。可編程實時單元和工業(yè)通信子系統(tǒng)(PRU-ICSS)包含了兩個32位RISC內(nèi)核(可編程實時單元,即PRUs)、存儲器、終端控制器,以及能夠支持更多周邊接口和協(xié)議的內(nèi)部外設(shè)。圖1為BeagleBone Black開發(fā)板。
圖1 BeagleBone Black開發(fā)板
圖2為SIM908開發(fā)板。SIM908是一款集成GPS導(dǎo)航技術(shù)的四頻GSM/GPRS 模 塊。模塊結(jié)構(gòu)緊湊,將GPRS和GPS整合在SMT封裝里。開發(fā)板擁有一個GSM控制串口和GPS控制串口。GSM控制串口可以控制開發(fā)板工作狀態(tài),開啟相應(yīng)的功能,GPS控制串口功能為讀取GPS數(shù)據(jù)。SIM908開發(fā)板可以實現(xiàn)GPS定位和GPRS數(shù)據(jù)的傳輸。
整個系統(tǒng)共分為3個部分,如圖3所示。第一部分為車載監(jiān)控終端,由SIM908和BBB開發(fā)板構(gòu)成,SIM908負(fù)責(zé)GPS數(shù)據(jù)的采集,并通過GPRS數(shù)據(jù)傳輸功能發(fā)送GPS數(shù)據(jù),BBB開發(fā)板負(fù)責(zé)GPS數(shù)據(jù)處理和SIM908工作狀態(tài)的控制。第二部分為移動基站,負(fù)責(zé)數(shù)據(jù)的轉(zhuǎn)發(fā)交互。第三部分為系統(tǒng)的PC操作上位機(jī),顯示車輛位置信息。
圖3 系統(tǒng)硬件架構(gòu)圖
系統(tǒng)軟件構(gòu)建如圖4所示。
圖4 系統(tǒng)軟件構(gòu)建圖
2.2.1 基于QT實現(xiàn)上位機(jī)
在PC操作上位機(jī),有兩個Qt Web Kit控件分別用來顯示Google地圖和Baidu地圖、一個IP地址輸入對話框、當(dāng)前GPS信息顯示欄等。窗口界面的設(shè)計比較簡單,在這里主要介紹數(shù)據(jù)的處理和內(nèi)部的信號機(jī)制。在QT編程中應(yīng)用最廣泛的應(yīng)該是信號、槽。信號顧名思義,就是一種聲明消息,當(dāng)按鈕等觸發(fā)事件發(fā)生的時候,監(jiān)聽的特定槽函數(shù)就可以運行,對指定的數(shù)據(jù)操作進(jìn)行處理。
在本系統(tǒng)中SIGNAL readyRead()是TCP通信中特定的信號,它的意義就是當(dāng)前的數(shù)據(jù)已經(jīng)準(zhǔn)備妥當(dāng),可以進(jìn)行讀取,這個時候就可以觸發(fā)槽函數(shù)void readdata()對網(wǎng)絡(luò)傳輸來的數(shù)據(jù)進(jìn)行讀取。同樣,系統(tǒng)中聲明了很多槽函數(shù)和信號觸發(fā),SIGNAL connected()是指當(dāng)TCP通信建立成功后觸發(fā)connectfinished()函數(shù),告訴用戶連接成功。當(dāng)連接成功后就開始對獲取的GPS進(jìn)行解析,然后通過QT的QtWeb Kit與JavaScript的交互分別在Google和Baidu地圖上描點顯示,并在旁邊的GPS數(shù)據(jù)欄中顯示當(dāng)前GPS數(shù)據(jù)信息。
2.2.2 GPS數(shù)據(jù)解析原理
GPS數(shù)據(jù)格式如下:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,19.7,M,,,,0000*1F
字段0:$GPGGA,語句ID,表明該語句為Global Positioning System Fix Data(GGA)GPS定位信息。
字段1:UTC時間,hhmmss.sss,時分秒格式。
字段2:緯度ddmm.mmmm,度分格式(前導(dǎo)位數(shù)不足則補0)。
字段3:緯度N(北緯)或S(南緯)。
字段4:經(jīng)度dddmm.mmmm,度分格式(前導(dǎo)位數(shù)不足則補0)。
字段5:經(jīng)度E(東經(jīng))或 W(西經(jīng))。
字段6:GPS狀態(tài),0=未定位,1=非差分定位,2=差分定位,3=無效PPS,6=正在估算。
字段7:正在使用的衛(wèi)星數(shù)量(00~12)(前導(dǎo)位數(shù)不足則補0)。
字段8:HDOP水平精度因子(0.5~99.9)。
字段9:海拔高度(-9999.9~99999.9)。
字段10:地球橢球面相對大地水準(zhǔn)面的高度。
字段11:差分時間(從最近一次接收到差分信號開始的秒數(shù),如果不是差分定位將為空)。
字段12:差分站ID號0000~1023(前導(dǎo)位數(shù)不足則補0,如果不是差分定位將為空)。
字段13:校驗值。
程序設(shè)計中,首先應(yīng)用字符串查找函數(shù)對GPGGA字段進(jìn)行查找,然后分別對其進(jìn)行相應(yīng)處理,處理過程中會運用數(shù)據(jù)的相互轉(zhuǎn)換。比如string和double,應(yīng)用string庫函數(shù)atof進(jìn)行相應(yīng)的轉(zhuǎn)換。當(dāng)數(shù)據(jù)處理結(jié)束之后,就可以應(yīng)用GPS數(shù)據(jù)進(jìn)行地圖定位。
2.2.3 在線地圖加載
QWeb View類提供了一個可以展現(xiàn)和編輯網(wǎng)頁文檔的widget。QWeb View是Qt Web Kit網(wǎng)頁瀏覽模塊的一個主要widget組件,可以用它來展現(xiàn)互聯(lián)網(wǎng)網(wǎng)頁。Qt Designer中創(chuàng)建的一個QWeb View,可以使用QWeb View的load()方法來加載一個網(wǎng)站,如load(QUrl("googlemap.html"))同其他所有QT的widget一樣,需要調(diào)用show()方法才會顯示出QWeb View。QWeb View除了用load方法設(shè)定網(wǎng)頁路徑外,也可以使用set Html方法加載html格式的網(wǎng)頁,如set Url(QUrl("baidumap.html"))。網(wǎng)頁文件加載之后,開啟QWeb View的JS功能,這樣就可以實現(xiàn)與網(wǎng)頁文件進(jìn)行JS交互應(yīng)用了。
2.2.4 QtWebKit與JavaScript交互實現(xiàn)地圖定位
QT與JavaScript互調(diào)是通過QWebFrame的兩個函數(shù)來實現(xiàn)的:add ToJavaScript Window Object()將 QObject對象傳給JS,這樣JS就能調(diào)用QObject的public slots函數(shù)。QT通過evaluateJavaScript()直接調(diào)用JS中的函數(shù),QWeb Kit與JavaScript交互原理圖如圖5所示。當(dāng)GPS數(shù)據(jù)被解析之后通過如下的函數(shù)進(jìn)行交互:
其中BaiDu_M(jìn)ark()為網(wǎng)頁中的JavaScript功能函數(shù),如下所示:
圖5 QtWeb Kit與JavaScript交互原理圖
2.3.1 BBB串口驅(qū)動和設(shè)備樹的實現(xiàn)
Device Tree是一種描述硬件的數(shù)據(jù)結(jié)構(gòu),起源于OpenFirmware(OF)。在Linux 2.6中,ARM架構(gòu)的硬件細(xì)節(jié)過多地被硬編碼在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用Device Tree后,許多硬件的細(xì)節(jié)可以直接通過它傳遞給Linux,而不需要在kernel中進(jìn)行大量的冗余編碼。device tree有3種格式:一個是方便閱讀的源文件*.dts(device tree source),另兩個是經(jīng)過編譯送給系統(tǒng)使用的文件*.dtb(device tree blob)和*.dtbo(device tree blob overlay)。BBB上有UART1~UART5共5個可用的UART串口,配置*.dts源文件。在/lib/firmware目 錄 中 創(chuàng) 建 設(shè) 備 樹 源 文 件/lib/firmware/BBUART1-00A0.dts。以UART1為例:
P9.24和P9.26分別用作txd和rxd引腳。編譯*.dts文件:dtc-I dts-O dtb-@ BB-UART1-00A0.dts> BBUART1-00A0.dtbo
加載dtbo文件BeagleBone Black中用cape manager軟 件 管 理 所 有 的 cape,目 錄 是/sys/devices/bone_capemgr.8/。這個目錄內(nèi)有一個叫做slots的文件,是capemgr軟件的對外接口。加載cape:
echo BB-UART1>/sys/devices/bone_capemgr.8/slots
slot是“插槽”的意思,要插上一個cape,就要向這個“插槽”里“插入”(echo)相應(yīng)的設(shè)備,echo的含義是“向標(biāo)準(zhǔn)設(shè)備輸出”。同樣也可以在程序中調(diào)用system終端命令掛載device tree來啟動UART1:system("echo BB-UART1>$SLOTS")
通過以上的配置我們就可以方便地使用串口了。
2.3.2 GPS數(shù)據(jù)采集線程
GPS數(shù)據(jù)采集線程就是所謂的生產(chǎn)者,它主要的工作是不間斷地對GPS數(shù)據(jù)進(jìn)行采集,然后通知數(shù)據(jù)發(fā)送線程將打包好的數(shù)據(jù)發(fā)送。
在GPS采集線程中應(yīng)用了Linux的特色功能異步I/O,Linux異步I/O是Linux2.6版本內(nèi)核的一個標(biāo)準(zhǔn)特性,異步I/O背后的基本思想是允許進(jìn)程發(fā)起很多I/O操作,而不用阻塞或等待任何操作完成。稍后在接收到I/O操作完成的通知時,進(jìn)程就可以檢索I/O操作的結(jié)果。在一個CPU密集型的應(yīng)用中,需要預(yù)先知道這些數(shù)據(jù)的位置,所以預(yù)先發(fā)起異步I/O讀請求。等到真正需要用到這些數(shù)據(jù)的時候,再等待異步I/O完成。使用了異步I/O,在發(fā)起I/O請求到實際使用數(shù)據(jù)這段時間內(nèi),CPU還可以繼續(xù)做其他事情。這樣就可以很好地應(yīng)用CPU的資源,讓應(yīng)用程序更加合理有效地運行。串口數(shù)據(jù)準(zhǔn)備好后,GPS數(shù)據(jù)采集線程就可以將準(zhǔn)備好的GPS數(shù)據(jù)放入事先申請的隊列中,并發(fā)送信號給發(fā)送線程,告知采集成功。
2.3.3 GPS數(shù)據(jù)發(fā)送線程
SIM908模塊的GPRS發(fā)送模式一共有兩個,分別是非透傳模式和透傳模式,其中非透傳模式具有支持多連接的功能。但是在編程處理時選擇了透傳模式,透傳模式下在設(shè)置生效、連接好網(wǎng)絡(luò)端之后,就可以直接傳輸數(shù)據(jù)了。如“AT+CIPMODE=1”設(shè)置透傳模式,“AT+CIPSTART="TCP","119.129.252.148",8080”建 立 TCP/IP連接或UDP,透傳模式下建立好連接后就可以直接發(fā)送數(shù)據(jù),無需發(fā)送指令即可相互發(fā)送數(shù)據(jù)。
GPS數(shù)據(jù)發(fā)送線程就是所謂的消費者,它主要負(fù)責(zé)將準(zhǔn)備好的GPS數(shù)據(jù)發(fā)送到監(jiān)控系統(tǒng)的終端,當(dāng)GPS數(shù)據(jù)發(fā)送線程接到GPS數(shù)據(jù)采集線程的信號后,就會訪問內(nèi)存,將內(nèi)存隊列中的數(shù)據(jù)通過Socket套接字發(fā)送到客戶端,然后發(fā)送一個信號給GPS數(shù)據(jù)采集線程,告之已經(jīng)成功發(fā)送,可以再次采集數(shù)據(jù)。
當(dāng)遠(yuǎn)程監(jiān)控終端程序開啟的時候,首先將GPS數(shù)據(jù)進(jìn)行解析,然后在地圖上描點。監(jiān)控端地圖定位如圖6所示,圖中的左半部分為百度地圖的定位顯示,右半部分為谷歌地圖的定位顯示,用兩個地圖進(jìn)行對比,從而獲得更加合理的定位顯示。監(jiān)控端衛(wèi)星定位圖示如圖7所示,地圖中標(biāo)定的位置為西南交通大學(xué)0號實驗樓。
本系統(tǒng)使用GPRS作為GPS車輛綜合監(jiān)控調(diào)度管理系統(tǒng)的無線傳輸手段,具有費用低、無需線纜施工及安全可靠、維護(hù)方便的特點,是一種經(jīng)濟(jì)可行、技術(shù)成熟的系統(tǒng)構(gòu)建方案。通過實際檢驗,系統(tǒng)工作穩(wěn)定,能夠較精確地完成車輛監(jiān)控,操作簡單方便。
圖7 監(jiān)控端衛(wèi)星定位圖示
[1]李延興.GPS技術(shù)研究新進(jìn)展[M].天津:天津科學(xué)技術(shù)出版社,2009.
[2]鄧中衛(wèi).GPS技術(shù)、應(yīng)用與市場[M].北京:航空工業(yè)出版社,2012.
[3]錢天爵.GPS接收機(jī)使用與維修[M].北京:北京海潮出版社,2013.
[4]王廣運.GPS精密測地系統(tǒng)原理[M].北京:測繪出版社,2007.
[5]王解先.GPS精密定軌定位[M].上海:同濟(jì)大學(xué)出版社,2007.
[6]錢天爵,瞿學(xué)林.GPS全球定位系統(tǒng)及其應(yīng)用[M].北京:北京海潮出版社,2007.
[7]洪大永.GPS全球定位系統(tǒng)技術(shù)及其應(yīng)用[M].廈門:廈門大學(xué)出版社,2008.
[8]日本測地學(xué)會.GPS人造衛(wèi)星精密定位系統(tǒng)[M].北京:地震出版社,2010.
[9]魏子卿.GPS衛(wèi)星測軌網(wǎng)研究[M].北京:北京星球地圖出版社,2012.