劉博,楊斌
(西南交通大學 信息科學與技術學院,成都610031)
隨著人們生活水平不斷提高,私家車越來越多地走進了平常百姓家。這樣就引發了一個嚴重的社會問題,車輛被盜的情況越來越多,在這個趨勢下車載定位監控系統越來越得到廣大車主關注。車載定位監控系統可以時時刻刻保護車輛的財產安全。這種車輛安防系統將會是汽車租賃公司、汽車廠商保護車輛安全的合理解決方案。
中國版BeagleBone Black(BBB)是英蓓特科技有限公司推出的一款基于AM3359處理器的開源開發套件。處理器集成了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單元和工業通信子系統(PRU-ICSS)包含了兩個32位RISC內核(可編程實時單元,即PRUs)、存儲器、終端控制器,以及能夠支持更多周邊接口和協議的內部外設。圖1為BeagleBone Black開發板。

圖1 BeagleBone Black開發板
圖2為SIM908開發板。SIM908是一款集成GPS導航技術的四頻GSM/GPRS 模 塊。模塊結構緊湊,將GPRS和GPS整合在SMT封裝里。開發板擁有一個GSM控制串口和GPS控制串口。GSM控制串口可以控制開發板工作狀態,開啟相應的功能,GPS控制串口功能為讀取GPS數據。SIM908開發板可以實現GPS定位和GPRS數據的傳輸。
整個系統共分為3個部分,如圖3所示。第一部分為車載監控終端,由SIM908和BBB開發板構成,SIM908負責GPS數據的采集,并通過GPRS數據傳輸功能發送GPS數據,BBB開發板負責GPS數據處理和SIM908工作狀態的控制。第二部分為移動基站,負責數據的轉發交互。第三部分為系統的PC操作上位機,顯示車輛位置信息。

圖3 系統硬件架構圖
系統軟件構建如圖4所示。

圖4 系統軟件構建圖
2.2.1 基于QT實現上位機
在PC操作上位機,有兩個Qt Web Kit控件分別用來顯示Google地圖和Baidu地圖、一個IP地址輸入對話框、當前GPS信息顯示欄等。窗口界面的設計比較簡單,在這里主要介紹數據的處理和內部的信號機制。在QT編程中應用最廣泛的應該是信號、槽。信號顧名思義,就是一種聲明消息,當按鈕等觸發事件發生的時候,監聽的特定槽函數就可以運行,對指定的數據操作進行處理。
在本系統中SIGNAL readyRead()是TCP通信中特定的信號,它的意義就是當前的數據已經準備妥當,可以進行讀取,這個時候就可以觸發槽函數void readdata()對網絡傳輸來的數據進行讀取。同樣,系統中聲明了很多槽函數和信號觸發,SIGNAL connected()是指當TCP通信建立成功后觸發connectfinished()函數,告訴用戶連接成功。當連接成功后就開始對獲取的GPS進行解析,然后通過QT的QtWeb Kit與JavaScript的交互分別在Google和Baidu地圖上描點顯示,并在旁邊的GPS數據欄中顯示當前GPS數據信息。
2.2.2 GPS數據解析原理
GPS數據格式如下:$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,度分格式(前導位數不足則補0)。
字段3:緯度N(北緯)或S(南緯)。
字段4:經度dddmm.mmmm,度分格式(前導位數不足則補0)。
字段5:經度E(東經)或 W(西經)。
字段6:GPS狀態,0=未定位,1=非差分定位,2=差分定位,3=無效PPS,6=正在估算。
字段7:正在使用的衛星數量(00~12)(前導位數不足則補0)。
字段8:HDOP水平精度因子(0.5~99.9)。
字段9:海拔高度(-9999.9~99999.9)。
字段10:地球橢球面相對大地水準面的高度。
字段11:差分時間(從最近一次接收到差分信號開始的秒數,如果不是差分定位將為空)。
字段12:差分站ID號0000~1023(前導位數不足則補0,如果不是差分定位將為空)。
字段13:校驗值。
程序設計中,首先應用字符串查找函數對GPGGA字段進行查找,然后分別對其進行相應處理,處理過程中會運用數據的相互轉換。比如string和double,應用string庫函數atof進行相應的轉換。當數據處理結束之后,就可以應用GPS數據進行地圖定位。
2.2.3 在線地圖加載
QWeb View類提供了一個可以展現和編輯網頁文檔的widget。QWeb View是Qt Web Kit網頁瀏覽模塊的一個主要widget組件,可以用它來展現互聯網網頁。Qt Designer中創建的一個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功能,這樣就可以實現與網頁文件進行JS交互應用了。
2.2.4 QtWebKit與JavaScript交互實現地圖定位
QT與JavaScript互調是通過QWebFrame的兩個函數來實現的:add ToJavaScript Window Object()將 QObject對象傳給JS,這樣JS就能調用QObject的public slots函數。QT通過evaluateJavaScript()直接調用JS中的函數,QWeb Kit與JavaScript交互原理圖如圖5所示。當GPS數據被解析之后通過如下的函數進行交互:

其中BaiDu_Mark()為網頁中的JavaScript功能函數,如下所示:


圖5 QtWeb Kit與JavaScript交互原理圖
2.3.1 BBB串口驅動和設備樹的實現
Device Tree是一種描述硬件的數據結構,起源于OpenFirmware(OF)。在Linux 2.6中,ARM架構的硬件細節過多地被硬編碼在arch/arm/plat-xxx和arch/arm/mach-xxx中,采用Device Tree后,許多硬件的細節可以直接通過它傳遞給Linux,而不需要在kernel中進行大量的冗余編碼。device tree有3種格式:一個是方便閱讀的源文件*.dts(device tree source),另兩個是經過編譯送給系統使用的文件*.dtb(device tree blob)和*.dtbo(device tree blob overlay)。BBB上有UART1~UART5共5個可用的UART串口,配置*.dts源文件。在/lib/firmware目 錄 中 創 建 設 備 樹 源 文 件/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數據采集線程
GPS數據采集線程就是所謂的生產者,它主要的工作是不間斷地對GPS數據進行采集,然后通知數據發送線程將打包好的數據發送。
在GPS采集線程中應用了Linux的特色功能異步I/O,Linux異步I/O是Linux2.6版本內核的一個標準特性,異步I/O背后的基本思想是允許進程發起很多I/O操作,而不用阻塞或等待任何操作完成。稍后在接收到I/O操作完成的通知時,進程就可以檢索I/O操作的結果。在一個CPU密集型的應用中,需要預先知道這些數據的位置,所以預先發起異步I/O讀請求。等到真正需要用到這些數據的時候,再等待異步I/O完成。使用了異步I/O,在發起I/O請求到實際使用數據這段時間內,CPU還可以繼續做其他事情。這樣就可以很好地應用CPU的資源,讓應用程序更加合理有效地運行。串口數據準備好后,GPS數據采集線程就可以將準備好的GPS數據放入事先申請的隊列中,并發送信號給發送線程,告知采集成功。
2.3.3 GPS數據發送線程
SIM908模塊的GPRS發送模式一共有兩個,分別是非透傳模式和透傳模式,其中非透傳模式具有支持多連接的功能。但是在編程處理時選擇了透傳模式,透傳模式下在設置生效、連接好網絡端之后,就可以直接傳輸數據了。如“AT+CIPMODE=1”設置透傳模式,“AT+CIPSTART="TCP","119.129.252.148",8080”建 立 TCP/IP連接或UDP,透傳模式下建立好連接后就可以直接發送數據,無需發送指令即可相互發送數據。
GPS數據發送線程就是所謂的消費者,它主要負責將準備好的GPS數據發送到監控系統的終端,當GPS數據發送線程接到GPS數據采集線程的信號后,就會訪問內存,將內存隊列中的數據通過Socket套接字發送到客戶端,然后發送一個信號給GPS數據采集線程,告之已經成功發送,可以再次采集數據。
當遠程監控終端程序開啟的時候,首先將GPS數據進行解析,然后在地圖上描點。監控端地圖定位如圖6所示,圖中的左半部分為百度地圖的定位顯示,右半部分為谷歌地圖的定位顯示,用兩個地圖進行對比,從而獲得更加合理的定位顯示。監控端衛星定位圖示如圖7所示,地圖中標定的位置為西南交通大學0號實驗樓。
本系統使用GPRS作為GPS車輛綜合監控調度管理系統的無線傳輸手段,具有費用低、無需線纜施工及安全可靠、維護方便的特點,是一種經濟可行、技術成熟的系統構建方案。通過實際檢驗,系統工作穩定,能夠較精確地完成車輛監控,操作簡單方便。

圖7 監控端衛星定位圖示
[1]李延興.GPS技術研究新進展[M].天津:天津科學技術出版社,2009.
[2]鄧中衛.GPS技術、應用與市場[M].北京:航空工業出版社,2012.
[3]錢天爵.GPS接收機使用與維修[M].北京:北京海潮出版社,2013.
[4]王廣運.GPS精密測地系統原理[M].北京:測繪出版社,2007.
[5]王解先.GPS精密定軌定位[M].上海:同濟大學出版社,2007.
[6]錢天爵,瞿學林.GPS全球定位系統及其應用[M].北京:北京海潮出版社,2007.
[7]洪大永.GPS全球定位系統技術及其應用[M].廈門:廈門大學出版社,2008.
[8]日本測地學會.GPS人造衛星精密定位系統[M].北京:地震出版社,2010.
[9]魏子卿.GPS衛星測軌網研究[M].北京:北京星球地圖出版社,2012.