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