王景科
摘 要:在VisualC++6.0編程平臺上,采用C++對GPS偽距單點(diǎn)定位進(jìn)行程序設(shè)計。敘述了GPS偽距單點(diǎn)定位原理及其誤差分析與處理,利用編制的程序?qū)?dǎo)航電文和觀測值文件進(jìn)行解算,計算了接收機(jī)的三維坐標(biāo),并結(jié)合算例對定位精度進(jìn)行了一定的分析。
關(guān)鍵詞:VisualC++;單點(diǎn)定位;程序設(shè)計
中圖分類號:P228 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-2064(2018)15-0031-03
全球定位系統(tǒng),簡稱GPS,就是利用GPS定位衛(wèi)星,在全球范圍內(nèi)實(shí)時進(jìn)行定位、導(dǎo)航的系統(tǒng)。具有自動連續(xù)、全球覆蓋、全天候、保密性強(qiáng)、實(shí)時定位速度快等特點(diǎn),其應(yīng)用領(lǐng)域正在不斷的得到拓展。
偽距單點(diǎn)定位是根據(jù)計算出的衛(wèi)星坐標(biāo),再以偽距為觀測量,通過空間后方交會原理計算出地面測站點(diǎn)的位置。因其速度快捷、靈活方便且無多值性問題等特點(diǎn),能夠很好地滿足實(shí)時測量的要求,在測繪、交通、建筑、環(huán)境監(jiān)測和軍事領(lǐng)域有著較為廣泛的應(yīng)用[1]。隨著測繪科學(xué)技術(shù)的不斷進(jìn)步,測繪所涉及的領(lǐng)域也越來越廣,其工作將不再是傳統(tǒng)的外業(yè)測量,而是逐漸發(fā)展為以3S為技術(shù)背景的信息化技術(shù),因此,程序開發(fā)將愈顯重要。此次開發(fā)的GPS單點(diǎn)定位程序以學(xué)習(xí)實(shí)踐程序開發(fā)為主要目的,從理論學(xué)習(xí)開始,不斷總結(jié)研究,設(shè)計出程序的框架和編程算法,編寫代碼,逐步完成單點(diǎn)定位的功能。在整個編程過程中,對遇到的各種各樣的問題,通過討論分析,進(jìn)一步解決,極大的加深了GPS理論的理解,并且在很大程度上提高了自己對開發(fā)語言的駕馭能力。
1 偽距單點(diǎn)定位解算平差步驟
1.1 偽距單點(diǎn)定位原理
GPS單點(diǎn)定位的實(shí)質(zhì)是基于測量學(xué)中的空間距離后方交會的原理,在野外觀測中,我們通過接收機(jī)得到有關(guān)衛(wèi)星位置信息的數(shù)據(jù),解讀出這些衛(wèi)星的位置和衛(wèi)星到測點(diǎn)的距離(偽距),然后以衛(wèi)星為球心,以距離為半徑作球面[2]。如果同時觀測了3顆衛(wèi)星,我們便得到3個球面。用數(shù)學(xué)語言說,即可組成包括3個未知數(shù)(X,Y,Z)的3個方程式。這三個球面相交的這一點(diǎn),即為我們所要求的測點(diǎn)的位置,也就是說,對這3個方程式聯(lián)立求解,便可得到該點(diǎn)在WGS-84坐標(biāo)系下的三維坐標(biāo)。接收機(jī)測量的是偽距,其中包括3個坐標(biāo)分量未知數(shù)和1個鐘差未知數(shù)。為了實(shí)時求解這4個未知數(shù),以實(shí)現(xiàn)單點(diǎn)定位,必須至少同時觀測和得到4顆衛(wèi)星的偽距觀測值。
1.2 偽距單點(diǎn)定位基本方程
設(shè)為偽距觀測量,R為接收機(jī)到衛(wèi)星的真距離,為接收機(jī)鐘差,則觀測方程為:
式中,假定偽距觀測量已經(jīng)過星歷中的對流層和電離層改正;為衛(wèi)星的瞬時地心坐標(biāo),可由衛(wèi)星星歷電文中求出;為接收機(jī)的地心坐標(biāo),是待求量。
為了求解方便和數(shù)據(jù)處理的需要,將上式進(jìn)行微分,作線性化處理,并將接收機(jī)的概略坐標(biāo)作為初始值帶入,得到:
式中,為平差參數(shù)的中誤差;為偽距測量中誤差(單位權(quán)中誤差)。
2 程序設(shè)計
2.1 程序設(shè)計思路
C++是一門面向?qū)ο笳Z言,相對于面向過程語言而言,其具有易維護(hù)、效率高、易擴(kuò)展等優(yōu)點(diǎn)[5]。同時C++的可視化開發(fā)環(huán)境讓界面設(shè)計簡單、代碼具有條理性,以后的軟件維護(hù)方便,兼容性和延展性也很好,適合測繪程序的開發(fā),因此GPS單點(diǎn)定位程序選用VisualC++6.0作為開發(fā)平臺。此次程序開發(fā)的思路具體過程如下:
(1)讀取導(dǎo)航文件;(2)計算衛(wèi)星t時刻的瞬時坐標(biāo);(3)提取偽距值,測站近似坐標(biāo);(4)建立誤差方程并確定誤差方程系數(shù);(5)基于同一時刻4顆衛(wèi)星以上不同衛(wèi)星的數(shù)據(jù),重復(fù)1-3步驟;(6)利用最小二乘法,計算求得測站坐標(biāo)改正數(shù);(7)求得t時刻測站的WGS絕對坐標(biāo)。
根據(jù)程序開發(fā)的基本思路,設(shè)計程序基本框架如圖1所示。
2.2 程序功能框圖(如圖2所示)
2.3 主要模塊設(shè)計思路
2.3.1 讀取導(dǎo)航電文文件模塊
也就是通常說的N文件讀取模塊。程序采用了getline()函數(shù)逐行讀取數(shù)據(jù),并將讀取的數(shù)據(jù)存儲于自定義的Ephemeris結(jié)構(gòu)體中。結(jié)構(gòu)體代碼及存儲的部分內(nèi)容如下:
Struct Ephemeris//定義N文件的數(shù)據(jù)記錄結(jié)構(gòu)體
{int PRN;//衛(wèi)星PRN號
Int year;int month;int dat;int hour;int minute;double second;//衛(wèi)星鐘的參考時刻年月日時分秒
double GPSTIME;//GPS周當(dāng)前秒
double TTLSEC; //GPS時中的總秒數(shù)
double a0;//衛(wèi)星中的偏差
double a1;//衛(wèi)星中的漂移
double a2;//衛(wèi)星中的偏差
double IDOE;//數(shù)據(jù),星歷的發(fā)布時間
… ………
2.3.2 讀取觀測文件函數(shù)模塊
觀測值文件的文件頭存放有文件的創(chuàng)建日期、單位名稱、測站名、天線信息、測站近似坐標(biāo)、觀測值數(shù)量及類型、觀測歷元間隔等信息。觀測文件的數(shù)據(jù)紀(jì)錄區(qū)存放的是觀測過程中在某一觀測歷元所觀測到的衛(wèi)星偽距觀測數(shù)據(jù),所包含的實(shí)際觀測類型與接收機(jī)記錄的類型的格式轉(zhuǎn)換時的參數(shù)設(shè)置有關(guān)。觀測文件的文件頭只讀取測站近似位置及測站偏移量。而文件的數(shù)據(jù)記錄需要逐個歷元全部讀取,讀取方法和讀取導(dǎo)航電文相似,用到的是自定義EPH結(jié)構(gòu)體。
2.3.3 衛(wèi)星位置計算函數(shù)模塊
主要功能是計算觀測時刻衛(wèi)星的瞬時位置,其主要步驟為計算衛(wèi)星平均角速度、相對于參考?xì)v元的時間計算、計算平近點(diǎn)角及偏近點(diǎn)角、計算真近點(diǎn)角和升交點(diǎn)角距、計算各項(xiàng)改正數(shù)、計算衛(wèi)星在軌道平面上的位置及衛(wèi)星在地心坐標(biāo)系下的坐標(biāo)。經(jīng)過循環(huán),每個觀測歷元下每顆衛(wèi)星瞬時位置在地心坐標(biāo)系的坐標(biāo)已經(jīng)計算出來。其中運(yùn)算中涉及的編程技術(shù)是準(zhǔn)確調(diào)用已經(jīng)讀入的觀測值和導(dǎo)航電文數(shù)據(jù)。
2.3.4 參數(shù)估計模塊
根據(jù)線性化后的誤差條件方程,首先給A矩陣賦值,A矩陣的列數(shù)即為未知參數(shù)個數(shù),即三個坐標(biāo)改正值,三個接收機(jī)鐘差參數(shù),與連續(xù)觀測到的衛(wèi)星個數(shù)相等的整周模糊度參數(shù)。通過最小二乘法求出最可靠的參數(shù)估計值。
3 程序算例和精度分析
3.1 程序算例
以2015年11月23日某大學(xué)校區(qū)控制點(diǎn)觀測數(shù)據(jù)為例,利用該程序計算地面點(diǎn)坐標(biāo)。該數(shù)據(jù)利用中海達(dá)GPS接收機(jī)觀測,觀測時間為2小時。
利用本程序計算得到的控制點(diǎn)的坐標(biāo),由于歷元較多,篇幅較大,選取了所有歷元求得的地面點(diǎn)坐標(biāo)的平均值,如表1所示。
以該大學(xué)校 區(qū)控制網(wǎng)GPS靜態(tài)觀測數(shù)據(jù)為例,利用中海達(dá)GPS數(shù)據(jù)處理軟件HDS2003計算得到該控制點(diǎn)的坐標(biāo)如表2所示。
二者坐標(biāo)殘差如表3所示。
則點(diǎn)位誤差=6.937m。
3.2 精度分析
幾何精度因子(Geometric Dilution Precision,縮寫為GDOP)是衡量定位精度的很重要的一個系數(shù),它代表GPS 測距誤差造成的接收機(jī)與空間衛(wèi)星間的距離矢量放大因子[6]。實(shí)際表征參與定位解的從接收機(jī)至空間衛(wèi)星的單位矢量所勾勒的形體體積與GDOP成反比,故又稱為幾何精度因子。實(shí)際上,GDOP的數(shù)值越大,所代表的單位矢量形體體積越小,即接收機(jī)至空間衛(wèi)星的角度十分相似導(dǎo)致的結(jié)果,此時的GDOP會導(dǎo)致定位精度變差。好的GDOP,是指其數(shù)值小,代表大的單位矢量形體體積,導(dǎo)致高的定位精度。好的幾何因子實(shí)際上是指衛(wèi)星在空間分布不集中于一個區(qū)域,同時能在不同方位區(qū)域均勻分布。
利用本程序計算得到的算例控制點(diǎn)的坐標(biāo),其GDOP值如圖3所示。
根據(jù)分析可知:剛開始觀測的幾個歷元的GDOP值大于2,隨著觀測時間的增加,偽距單點(diǎn)定位的GDOP值穩(wěn)定在2以下,波動較小,且點(diǎn)位誤差d=6.937m,綜上,認(rèn)為本程序定位精度為10m是合理的。
4 結(jié)語
偽距單點(diǎn)定位在車輛導(dǎo)航等很多方面有很廣泛應(yīng)用,但是因其精度較低,在應(yīng)用過程中總會一些不如意的情況,本文闡述的程序開發(fā)思想,雖然在基本原理上與以往程序相同,但是達(dá)到了筆者加深對GPS理論理解,對以后GPS學(xué)習(xí)有很大的幫助。并且程序充分利用了C++面向?qū)ο蟮奶攸c(diǎn),把很多方法封裝成類,增加了程序的可拓展性與可讀性,達(dá)到了提高編程能力的目的。
參考文獻(xiàn)
[1]GPS測量與數(shù)據(jù)處理[M].武漢大學(xué)出版社,2010.
[2]誤差理論與測量平差基礎(chǔ)[M].測繪出版社,2010.
[3]陳藝軍,楊善婷,鄭加柱.GPS單點(diǎn)定位程序開發(fā)幾點(diǎn)思考[J].無線通信技術(shù),2011,(1):13-14.
[4]徐振堂,鮑峰.GPS偽距單點(diǎn)定位[J].硅谷,2012,(8):7-8.
[5]Watson K.C入門經(jīng)典[M].清華大學(xué)出版社,2002.
[6]趙彥剛,黨軍勇.GPS精密單點(diǎn)定位精度分析與應(yīng)用[J].北京測繪,2013,(5):80-82.