GPS可提供連續(xù)、高精度,、實(shí)時的時間基準(zhǔn)、三維位置,、三維速度,、整周模糊度等數(shù)據(jù),具有性能好,、精度高的特點(diǎn),,因而廣泛應(yīng)用于GPS載波相位測姿、精確制導(dǎo),、SINS/GPS組合導(dǎo)航,、嵌入式車輛導(dǎo)航監(jiān)控等軍事與民用領(lǐng)域。而嵌入式系統(tǒng)以其低功耗,、小體積,、高穩(wěn)定性和便攜等優(yōu)勢,在GPS的應(yīng)用中占據(jù)重要的位置,。本文研究基于ARM920T內(nèi)核的嵌入式微處理器S3C2440和WindowsCE 5.0(簡稱WindowsCE)的某型軍車GPS定位信息的采集與處理,。
1 系統(tǒng)硬/軟件平臺概述
車輛GPS定位信息采集系統(tǒng)的硬件平臺結(jié)構(gòu)如圖l所示。
該平臺可以分為3大模塊:
1)微系統(tǒng)核心模塊 由基于ARM920T的32位嵌入式微處理器S3C2440,、SDRAM和Nand Flash構(gòu)成和總線接口構(gòu)成。2片32 MB的HY57V561620構(gòu)成64 MB的SDRAM存儲器,,用于運(yùn)行系統(tǒng)主程序,。存儲容量為64 M×8 bit的Nand FlashK9F1208UOM,因其具有掉點(diǎn)保護(hù)功能,,用于存儲操作系統(tǒng)內(nèi)核,、Bootloader的啟動代碼和用戶程序。
2)GPS原始數(shù)據(jù)接收模塊 由一臺遵循NMEA-0183協(xié)議標(biāo)準(zhǔn)的GPS接收機(jī)和PS天線組成。通過外接GPS接收機(jī),,將接收到的GPS原始信息,,送入到嵌入式微處理器進(jìn)行數(shù)據(jù)解析,最終得出戰(zhàn)車所在位置的位置,、速度和海拔等信息,。
3)外設(shè)控制模塊 包括LCD+觸摸屏、USB主/從口,、電源,、JTAG調(diào)試接口、復(fù)位電路,。選用東華的自帶4線模擬電阻式觸摸屏和硬件驅(qū)動的3.5#TFT型LCD,,用于人機(jī)交互以及現(xiàn)實(shí)解析后的GPS信息。USB主口用于擴(kuò)展U盤,,用于數(shù)據(jù)存儲,,從口用于下載WinCE內(nèi)核文件以及與軟件開發(fā)主機(jī)進(jìn)行數(shù)據(jù)交互,JTAG調(diào)試接口用于硬件調(diào)試以及燒載Bootloader,。
軟件平臺為微軟公司的嵌入式操作系統(tǒng)WindowsCE,,它界面友好,支持嵌套中斷,、更好的線程響應(yīng),、更多的優(yōu)先級別;支持串口和網(wǎng)絡(luò)通信,;具有豐富的API函數(shù),,具有強(qiáng)大的開發(fā)工具;多硬件平臺支持,,支持ARM,、MIPS等處理器。經(jīng)過Platform Builder定制移植的WindowsCE操作系統(tǒng)如圖2所示,。
2 定位信息數(shù)據(jù)格式
GPS的輸出數(shù)據(jù)遵循NMEA-0183協(xié)議標(biāo)準(zhǔn),,即美海軍的電子設(shè)備標(biāo)準(zhǔn)。根據(jù)NMEA-0183協(xié)議,,獲取GPS定位信息,,必須將串行口的波特率設(shè)置為4800b/s,數(shù)據(jù)位設(shè)置為8 bit,,停止位設(shè)置為1 bit,,校驗(yàn)為設(shè)置為無。該協(xié)議定義了GPS接收機(jī)輸出的標(biāo)準(zhǔn)信息,,最常用,、兼容性最廣的語句格式包括:$GPRMC,、$GPGGA、$GPGSV,、$GPGSA,、$GPGLL等。應(yīng)用到的GPS數(shù)據(jù)格式包括$GPRMC,、$GPGGA,、$GPGSV三種。其中,,用$GPRMC語句獲取時間,、經(jīng)緯度、速度,、年月日信息,,用$GPGSV語句獲取海拔高度信息,用$GPGSV語句獲取可見衛(wèi)星數(shù)信息及衛(wèi)星的方位角和仰角信息,,用以獲取衛(wèi)星的視圖,。各語句的數(shù)據(jù)段的含義,參考NMEA-0183協(xié)議標(biāo)準(zhǔn),。
3 GPS定位信息采集和處理的軟件實(shí)現(xiàn)
本系統(tǒng)的軟件開發(fā)在可視化開發(fā)工具Embedded VisualC++(簡稱EVC)中,,采用MFC編程技術(shù)實(shí)現(xiàn)。
3.1 GPS數(shù)據(jù)處理狀態(tài)轉(zhuǎn)換
GPS與ARM之間用RS232串口方式進(jìn)行通信,,串口對象負(fù)責(zé)接收數(shù)據(jù),,并把接收到的數(shù)據(jù)放置到串口緩沖區(qū)。GPS對象按照協(xié)議結(jié)構(gòu)負(fù)責(zé)處理串口對象接收到的數(shù)據(jù),。圖3為GPS數(shù)據(jù)處理之間的狀態(tài)轉(zhuǎn)換示意圖,。GPS數(shù)據(jù)處理狀態(tài)共包括4個狀態(tài):開始狀態(tài)、數(shù)據(jù)幀頭狀態(tài),、GPS數(shù)據(jù)正文狀態(tài)和校驗(yàn)狀態(tài),。
開始狀態(tài)是一個數(shù)據(jù)幀的起始狀態(tài),它處理和判斷數(shù)據(jù)幀的起始字符$,。若起始符號不是其中的$,,則一直停留在開始狀態(tài),直到$到來位置,,數(shù)據(jù)幀頭狀態(tài)用于判斷數(shù)據(jù)幀的格式是否與我們目前需要的目標(biāo)數(shù)據(jù)幀相匹配,。如果相匹配,那么將退轉(zhuǎn)到下一個狀態(tài):GPS數(shù)據(jù)正文狀態(tài),,開始進(jìn)行數(shù)據(jù)處理,。如果不匹配,則轉(zhuǎn)移到開始狀態(tài),。
數(shù)據(jù)處理中用到了緩沖區(qū)的概念,它一邊累積計算接收的數(shù)據(jù)的異或和,一邊把相應(yīng)的數(shù)據(jù)域送入緩沖區(qū),。這樣既降低了數(shù)據(jù)提取校驗(yàn)的復(fù)雜度,,也提高了數(shù)據(jù)處理的延續(xù)性和正確性。當(dāng)GPS數(shù)據(jù)正文狀態(tài)完成,,進(jìn)入“*”字符的時候,,將進(jìn)入數(shù)據(jù)校驗(yàn)狀態(tài),它用于判斷數(shù)據(jù)接收和處理的有效與否,。若校驗(yàn)成功,,則接收有效,收到CR,,LF字符后又重新跳轉(zhuǎn)到開始狀態(tài),。若校驗(yàn)失敗,則放棄處理的數(shù)據(jù),,直接跳轉(zhuǎn)至開始狀態(tài),。
3.2 完整GPS數(shù)據(jù)幀的截取
了解了GPS數(shù)據(jù)處理的四個狀態(tài)之間的相互轉(zhuǎn)換,下面論述一個完整的GPS數(shù)據(jù)幀的提取和處理,,它是獲取車輛GPS定位數(shù)據(jù)的關(guān)鍵,。一個完整的GPS數(shù)據(jù)幀的提取流程如圖4所示。
圖4中,,m_strRecDisp為一個CString變量,,用于表示接收數(shù)據(jù)的字符串,該程序流程中,,用到兩個最重要的函數(shù)即:字符(串)查找函數(shù)和字符串截取函數(shù),。
1)字符(串)查找函數(shù) 該函數(shù)CString∷Find()用于從一個已有的字符串當(dāng)中查找與目標(biāo)字符(串)相匹配的首次出現(xiàn)的一個單字符或一個子字符串。一個重要的函數(shù)原型為:int Find(TCHAR ch,,int nStart)const:其中,,ch為要查找的目標(biāo)字符,nStart為開始查找位置,。
2)字符串截取函數(shù) 該函數(shù)CString∷Mid()用于截取一個字符,,也可從一個具體位置開始截取一個子字符串,返回值即為字符或字符串常量,。函數(shù)原型為:Mid(int nFirst,,intnCount)const;其中nFirst為字符串開始截取的位置,,nCount為截取字符數(shù)目,。
3.3 GPS數(shù)據(jù)幀的處理
截取出一個完整的數(shù)據(jù)幀后,將數(shù)據(jù)幀賦值給CString變量data,,data再將其字符內(nèi)容淵源不斷的送給緩沖pBuffer,,解壓縮數(shù)據(jù)幀后,,進(jìn)入到如圖5所示的GPS數(shù)據(jù)幀處理流程。在處理GPS時間數(shù)據(jù)時,,因?yàn)楸本┪挥跂|八區(qū),,UTC時間與北京時間相差8 h,得到UTC時間后,,如果要得到標(biāo)準(zhǔn)的北京時間,,應(yīng)在此時間的基礎(chǔ)上,加上8 h,。
3.4 二維衛(wèi)星視圖的獲取
衛(wèi)星視圖的獲取首先要用到站心切平面坐標(biāo)系,。坐標(biāo)系如圖6所示,站心切平面以P點(diǎn)的法線為Z軸且向上為正,,X軸垂直于Z軸并指向北極.Y軸垂直于Z軸并向東為正,。
顯然,若衛(wèi)星P與觀測點(diǎn)之間的距離為r,,E為任意可見衛(wèi)星P的仰角,,B為衛(wèi)星的方位角,則P的三維坐標(biāo)為(X,,Y,,Z)滿足:
因?yàn)槔L制的是二維圖形,故只能將半球坐標(biāo)系壓縮到觀測者所在的平面內(nèi)(稱這個面為基礎(chǔ)面),,圖上所表示出的衛(wèi)星的位置實(shí)際為衛(wèi)星在該平面的投影點(diǎn),,該坐標(biāo)系的參數(shù)有2個,一個是表達(dá)衛(wèi)星的投影點(diǎn)和觀測者的方位關(guān)系的方位角,;另一個是表達(dá)衛(wèi)星真實(shí)所在位置以基礎(chǔ)面為準(zhǔn)與觀測者所構(gòu)成的仰角關(guān)系的仰角,。有了這2個參數(shù)就能在該坐標(biāo)系中唯一確定一個具有物理意義的點(diǎn)。本系統(tǒng)設(shè)計中,,設(shè)計簡單的坐標(biāo)系,,它有2個同心圓和4條直線組成。繪制出衛(wèi)星視圖之前進(jìn)行的簡單的坐標(biāo)變換算法思想為:將衛(wèi)星實(shí)際的方位角,、仰角立體坐標(biāo)轉(zhuǎn)換為平面內(nèi)的橫縱(PX,、PY)坐標(biāo),具體表示如式(2)所示,。其中,,(POX,POY)分別為兩同心圓原點(diǎn)(看作是觀測點(diǎn))在LCD上的像素坐標(biāo),,而T為對話框窗體客戶區(qū)長度的1/4,。
3.5 串口接收的實(shí)現(xiàn)
完成GPS定位信息的采集,需要實(shí)現(xiàn)的串口主要的API函數(shù)包括:
1)打開串口函數(shù),。原型為Open(LPT OpenPort(LPCTSTRPort,,int BaudRate,,int DataBits,int StopBits,,int Parity),。其中,,Port代表串口名,,如COMl等,BaudRate為波特率,,DataBits為數(shù)據(jù)位,;StopBits為停止位,Parity為奇偶校驗(yàn),。
2)關(guān)閉串口函數(shù),。該函數(shù)在程序操作串口發(fā)生錯誤時使用,用于關(guān)閉該串口,。實(shí)現(xiàn)的主要方法是:先判斷串口操作句柄hComm的值是否為INVALID_HANDLE_VALUE,,如果是,則調(diào)用SetCommMask(),,將上述代碼段中的EV_RXCHAR改為0,,然后清除緩沖區(qū),再利用CloseHandle函數(shù)關(guān)閉串行口操作句柄,。
3)添加打開串口單擊事件代碼,,通過創(chuàng)建一個串口接收線程和顯示線程來實(shí)現(xiàn)。
4)串口接收線程CommRecvTread()與回調(diào)函數(shù)OnCommRecv(),。串口接收線程為一個無限循環(huán),,它不斷查詢串口接收線程退出事件m_Exit-ThreadEvent。如果退出事件有效,,則該循環(huán)結(jié)束退出,。如果調(diào)用讀串口函數(shù)查詢得知接收到數(shù)據(jù),則調(diào)用串口接收成功回調(diào)函數(shù)0nCommRecv(),。
4 實(shí)驗(yàn)數(shù)據(jù)及分析
設(shè)置好串口參數(shù)后,,打開串口COMl,既可獲取實(shí)驗(yàn)數(shù)據(jù),。圖7為在某型軍車上一次實(shí)測的數(shù)據(jù),。實(shí)測數(shù)據(jù)界面拍攝的時間為2009年11月10日晚上9點(diǎn)45分,地點(diǎn)為某訓(xùn)練場,。數(shù)據(jù)在靜止的狀態(tài)下測得,。該定位顯示的數(shù)據(jù)包括“原始數(shù)據(jù)”和解析后“經(jīng)緯度、時間,、海拔”等信息,。通過分析圖7(a)界面的數(shù)據(jù)發(fā)現(xiàn),,$GPGSV語句有兩條,而在“星數(shù)”對應(yīng)的Edit框中顯示的定位所用衛(wèi)星數(shù)為8,,由于每一條GPGSV最多能顯示4顆衛(wèi)星的信息,,故$GPGSV語句為兩條。這說明星數(shù)與$GPGSV語句數(shù)是吻合的,。而獲取有效的GPS定位信息,,至少需要4顆定位衛(wèi)星。這也說明此次數(shù)據(jù)是有效的定位數(shù)據(jù),。
該界面顯示的經(jīng)緯度信息分別為N:38°3.6788’,,E:114°29.1765’;其中,,N代表北緯,,E代表東經(jīng)。而用GoolgeEarth軟件查閱數(shù)據(jù)可知,,石家莊軍械學(xué)院南門的精確經(jīng)度/緯度信息為:北緯38°3.1650’,,東經(jīng)114°29.0046’,軍械學(xué)院西門的精確經(jīng)度/緯度信息為:北緯38°3.394O’,,東經(jīng)114°28.5432’,。通過與二者的經(jīng)緯度信息比對發(fā)現(xiàn),界面實(shí)時顯示的精度和緯度信息非常精確,。通過實(shí)時比對標(biāo)準(zhǔn)的北京時間,,說明時間和日期信息顯示也完全正確。
速度信息在靜止情況下測得,,故理想的速度為0 k/s,。而實(shí)際測得數(shù)據(jù)分別為0.060 00 k/s,前文已論述,,1 k/s換算成標(biāo)準(zhǔn)的速度信息約0.514 444 m/s,,故測得的速度誤差分別約為O.030 867 m/s??梢钥闯?,測量的速度誤差相對而言是很小的。
界面顯示的海拔信息為:68.800 00 m,。而通過石家莊市規(guī)劃局提供的資料可知:石家莊市區(qū)二環(huán)路內(nèi)地勢西北高,,海拔高度為81.5 m,東南低,,海拔高度為64.3 m,。測得的海拔高度還是存在微小的誤差。這可能跟接收的GPS信號的漂移有關(guān)。從圖7(b)部分的衛(wèi)星視圖可以看出,,衛(wèi)星與觀測點(diǎn)的方位關(guān)系能清晰的表示,,而且衛(wèi)星的編號也能實(shí)時顯示,從上到下依次分別為:23,、17,、3、4,、19,、20、32,、11,。
5 結(jié)論
GPS定位為單點(diǎn)定位,用一臺接收機(jī)觀測衛(wèi)星,,獨(dú)立定出觀測點(diǎn)在WGS-84(地心坐標(biāo))中的絕對位置。系統(tǒng)以ARM9為嵌入式微處理器,,以WindowsCE為嵌入式操作系統(tǒng),,通過串行口實(shí)現(xiàn)GPS接收機(jī)與ARM之間的通信,構(gòu)建了某型軍車的GPS定位信息采集系統(tǒng),。實(shí)驗(yàn)表明:該系統(tǒng)能實(shí)時顯示精度較高,、持久有效的GPS定位數(shù)據(jù),具有重要的實(shí)用價值和參考意義,。