史 峰,屈新岳,李 鐵,王鵬飛,王 東
(中國人民解放軍91550部隊93分隊,遼寧 大連116023)
隨著虛擬參考站(VRS)技術的廣泛應用和不斷發展,為適應各種不同場合的需要,移動定位用戶對于終端的個性化需求也在不斷提高。在通用的智能終端,例如:PDA、智能手機等平臺上結合GPS接收機與VRS網絡,實現高精度的移動定位已經成為一種發展方向。而目前的大多數VRS移動終端都是由GPS硬件廠商直接提供,這些移動終端都是根據專業需要定制的。它具有功能強大、連接可靠的特點,但是價格一般比較昂貴,通用性不強,可開發性不高。
由于VRS系統中進行差分數據傳輸的NTRIP協議是基于 HTTP協議的,因此,可以采用HTTP協議的開發手段進行VRS終端的開發,這就為設計實現通用平臺上的NTRIP終端提供了基礎。
虛擬參考站技術(VRS)的基本原理是:在三個或更多參考站(相距70~100 km)覆蓋范圍內,流動站首先進行單點定位,在其真實位置附近確定一個大致坐標(偏差可以從幾米到上百米),然后把該坐標發送至VRS數據處理中心;同時各參考站也把各自的載波相位測量觀測值發送到數據處理中心[1]。VRS數據處理中心根據這些數據計算出各參考站的各種偏差改正,如電離層、對流層偏差、軌道偏差、多路徑效應等;結合流動站發送來的概略坐標利用網絡改正數內插方法進行內插,得出流動站概略坐標處的相應誤差改正數,進而在此概略坐標處虛擬一個參考站,并利用多個參考站上的實際觀測數據計算出該虛擬參考站上的虛擬觀測值。由于虛擬參考站的位置就是由流動站的單點定位而得,它們之間距離很短,因此流動站可以和虛擬參考站間形成超短基線,通過站際星際二次差分,可以對流動站上的各種偏差、多路徑效應以及接收機噪音等進行很好的消除和減弱,從而大大提高流動站的定位精度和可靠性[2]。從VRS工作基本原理中可以看出,VRS系統一般由以下幾個部分組成:持續運行的參考站網絡、數據處理與控制中心、移動定位用戶以及數據鏈路。
作為VRS用戶而言最為關心的是如何接入VRS網絡,獲取差分數據以便使用網絡所提供的服務。目前VRS系統在所使用的差分數據傳輸協議主要是基于HTTP協議的NTRIP協議(Networked Transport of RTCM via Internet Protocol,NTRIP),該協議具有結構開放、開發便捷的特點,自2003年1月推出以來已獲得廣大GNSS硬件廠商和用戶的廣泛支持。NTRIP協議通過三個部分實現:NTRIP客戶、NTRIP服務器以及NTRIP播發器,其中 NTRIP播發器是真正的HTTP服務器,負責管理和接收來自NTRIP服務器的數據并響應NTRIP客戶的請求,發送GNSS信息,而NTRIP客戶和NTRIP服務器均為HTTP客戶,NTRIP客戶是GNSS數據的最終使用者[3]。一個完整的NTRIP系統除了上述的三個HTTP部分外,還包括NTRIP數據源,用來持續產生GNSS數據,每一個NTRIP數據源都對應一個NTRIP服務器,并由后者將產生的數據發送到NTRIP播發器,利用NTRIP服務器將NTRIP數據源與其它NTRIP成員之間隔開,可以保護數據源,提高數據利用率。一個NTRIP系統各部分之間的連接都是建立在TCP/IP基礎上,因此,可以通過TCP-Socket方便地監視通訊狀態,利用事件觸發的方式進行掉線后的自動重新連接。
終端接入NTRIP網絡的過程與接入標準的HTTP網絡的過程完全類似,NTRIP終端可以采用HTTP協議的GET命令按照NTRIP服務器的名稱以及對應的密碼發送請求,NTRIP播發器收到請求后,就會把用戶需要的差分數據流不斷的發送過來,用戶根據差分數據可以實現高精度的實時差分定位。
為了便于應用開發,選擇運行Windows Mobile 5.0(WM 5.0)的PDA、一臺具有RTK功能的GPS接收機以及可上網的藍牙手機作為NTRIP終端硬件平臺,其中PDA為終端的控制中心,主要工作過程為PDA通過藍牙和上網手機登陸VRS網絡獲得用戶當前位置可用的差分數據,再通過串口將差分數據寫入到GPS接收機中,從而實現RTK定位的功能。整個系統的設計結構圖如圖1所示。

圖1 NTRIP客戶端系統結構圖
從上面的工作過程可以看出,整個系統的關鍵在于開發一個嵌入式的NTRIP終端軟件以實現上述通信過程。本系統選擇Microsoft Visual Studio 2005結合Windows Mobile SDK作為軟件開發平臺,通過PDA H TTP編程實現NTRIP終端的主要功能。為了提高開發的效率和程序的可靠性,采用了 WinInet API作為工具進行開發。WinInet與“套接字+Internet協議”的終端開發方式比,不需要了解 Winsocket、TCP/IP和特定 Internet協議的細節,就可以編寫出高水平的終端程序[4]。利用WinInet進行H TTP開發的主要步驟如下:
1)調用InternetOpen函數,對HINTERNET句柄進行初始化,獲得位于根部的HINTERNET句柄,該句柄是建立HTTP會話的基礎。
2)利用1)中得到的HINTERNET句柄作為參數調用InernetConnect函數創建H TTP會話。該函數根據Internet站點或IP地址對連接進行初始化,并在原有HINTERNET句柄的基礎上產生一個新的HINTERNET類型的句柄。
3)調用Http OpenRequest函數HTTP請求句柄,該函數利用2)中返回HINTERNET句柄建立與特定站點的連接。這一步的作用就相當于標準H TTP協議中的GET命令。
4)調用HttpSendRequest函數以3)中返回的句柄為參數向HTTP服務器發送請求。
5)調用InternetRead File函數下載數據,或先使用 InternetQueryDataAvailable函數確定數據大小再下載。
6)調用函數關閉先前創建的所有句柄。
以上只是利用WinInet建立H TTP通信的一般過程,實際應用中往往要根據需要建立異步或者同步兩種類型的HTTP連接。同步HTTP連接是一種阻塞式的連接方式,這意味在進行連接的函數在未返回前,該函數所在的線程將一直處于等待狀態,這對于網絡連接不穩定,運算資源有限的PDA而言,如果進行大量的同步H TTP通信,顯然是不行的。異步連接就是一種非阻塞式的連接方式,在相應的通訊操作沒有返回前,線程的其他過程仍然可以正常運行,而一旦該操作返回,又馬上有相應的函數對其進行響應。在WM 5.0中,主要通過采用一定的回調機制來實現對各種異步事件的響應,達到身份驗證、快速有效獲取網絡數據等目的。針對NTRIP終端通信的不同階段,在具體的實現過程中靈活采用了不同的連接方式。
終端的總體結構采用VC++基于對話框的程序框架,以標簽形式在主對話框上添加不同類型的子對話框作為用戶控制GPS接收機,連接NTRIP播發器交互界面,同時顯示定位結果、VRS連接狀況等信息的顯示界面。程序主要存在兩個通信過程:GPS接收機串口通信以及訪問VRS網絡的HTTP通信,前者通過嵌入式串口通信的方式可以方便實現接收機打開/設置、定位信息讀取以及差分數據寫入,后者利用WinInet API函數來實現,主要實現過程如下:
2.2.1 同步通信方式獲取NTRIP資源列表
資源列表(Source Table)包含著可供用戶選擇的數據源信息,獲取資源列表是獲得VRS差分信息的第一步,由于資源列表大小只有幾百個字符,而且后面的通訊工作都以資源列表為基礎,因此,可以采用同步通信的方式獲取。首先定義存放資源列表信息的結構體:SOURCETABLE,然后以用戶輸入的NTRIP播發器IP地址和端口號為參數,利用2.1節中介紹的1)~6)步通過同步HTTP通信的方式下載資源列表數據,然后按照NTRIP協議中定義的資源列表格式對其進行解析并在用戶界面中顯示,資源列表中的VRS數據源可供用戶選擇連接下載數據。
2.2.2 異步通信方式獲取NTRIP差分數據
獲得所連接播發器的VRS數據源信息后,就可以采用異步通信方式下載差分數據,實現過程為
1)定義如下形式的回調函數:
void_stdcall MyCallback(HINTERNET hInternet,DWORD dwContext,DWORD dw InternetStatus,LPVOID lpStatusInfo,DWORD dw-StatusInfoLen);
該函數第二個參數dwContext可以為每一個不同的環境變量值設置不同的操作,第三個參數dw InternetStatus表示當前實際的網絡通信操作進展狀態,可以用來捕獲某個已經完成的異步通信操作事件并觸發一定的處理過程。利用該回調函數就可對終端與VRS網絡之間的H TTP通信狀態進行監控,并觸發相應事件,以便下載線程進行相應操作。
2)利用ReadGNSSThreadFunc下載差分數據線程函數和回調函數異步下載數據。
其簡要過程為先創建四個用來標志異步通信狀態的事件句柄,然后注冊1)中定義的回調函數My Callback,并利用 InternetOpen函數創建異步類型的HINTERNET句柄,接下來可按2.1節中介紹的2)~5)步介紹的方式建立HTTP通信,但是需要注意的是每進行下一步之前一定要通過WaitForSingleObject函數等待回調函數監測到相應的通信步驟已完成,并將相應的事件設置成有信號。
3)完成數據下載后,關閉所有句柄。
從上述過程可以看出,在每一個通訊步驟沒有完成前,主線程并沒有被阻塞,只是回調函數在等待該步驟完成,并觸發一定的事件,然后由主線程捕獲該事件,繼續進行異步通信過程。利用異步通信方式可以很好的解決NTRIP終端差分數據下載的問題,而且便于進行與串口通訊的線程同步。
為驗證本系統的定位精度與可靠性,在控制點上進行了VRS定位試驗,圖 2中的(a)、(b)、(c)分別是X、Y、Z三個方向的定位誤差分布圖。
從圖2可以看出,該點所有歷元各方向誤差數值都在3 cm以內,說明該系統具有較好的定位精度和穩定性。


結合PDA平臺以及VRS網絡實現了RTK定位,通過對嵌入式平臺的Internet異步通信以及接收機串口通信的研究,找到了利用VRS網絡差分數據代替傳統差分電臺的具體實現途徑,系統組成靈活、成本低,對于實現傳統GPS RTK接收機向VRS RTK接收機升級改造具有一定的參考意義。
[1]劉經南,劉 暉.連續運行衛星定位服務系統-城市空間數據的基礎設施[J].武漢大學學報(信息科學版),2003,28(3):259-264.
[2]高星偉.GPS/GLONASS網絡RTK的算法研究與程序實現[D].武漢大學博士學位論文,2002.
[3]DENISE D,CHRISTIAN W,GEORG W.NTRIP Version 1.0 Example Implementation[M].Federal Agency for Cartography and Geodesy(BKG),Frankfurt,Germany,2006.
[4]汪曉平,鐘軍等,Visual C++網絡通信協議分析與應用實現[M].北京:人民郵電出版社,2003.