位置服務已成為愈來愈熱的1門技術,也將成為以后所有移動裝備(智能手機、掌上電腦等)的標配。而定位導航技術中,目前精度最高、利用最廣泛的,自然非GPS莫屬了。網絡上介紹GPS原理的專業資料很多,而本文試圖從編程人員的角度動身,以1種程序員易于理解的方式來簡單介紹1下GPS定位的基本原理,希望對做GPS開發的朋友有所啟發。固然,本文并沒有觸及具體的開發方面的技術。
之所以先介紹數學模型,是由于我認為這個數學模型多是程序員比較關心的問題。固然事前聲明,這個模型只是我根據1些GPS資料總專為程序員總結出來的1個簡化模型,細節方面可能其實不符合實際,想了解具體細節請參考專業的GPS講授資料。
GPS定位,實際上就是通過4顆已知位置的衛星來肯定GPS接收器的位置。
如上圖所示,圖中的GPS接收器為當前要肯定位置的裝備,衛星1、2、3、4為本次定位要用到的4顆衛星:
那末定位的進程,簡單來說就是通過1個函數GetLocation(),從已知的[Position1,d1]、[Position2,d2]、[Position3,d3]、[Position4,d4]4對數據中求出Location的值。用程序員熟習的函數調用來表示就是:
Location=GetLocation([Position1,d1],[Position2,d2],[Position3,d3],[Position4,d4]);
1看到這個函數調用,程序員們就該來勁了:這些參數從哪里來?這個函數又是如何履行?由誰來履行的呢?立體幾何還沒有忘干凈的可能還要問:為何必須要4對參數呢?那下面我們就來1起探究1下。
實際上,運行于宇宙空間的GPS衛星,每個都在時刻不停地通過衛星信號向全球廣播自己確當前位置坐標信息。任何1個GPS接收器都可以通過天線很輕松地接收到這些信息,并且能夠讀懂這些信息(這其實也是每個GPS芯片的核心功能之1)。這就是這些位置信息的來源。
我們已知道每個GPS衛星都在不辭辛勞地廣播自己的位置,那末在發送位置信息的同時,也會附加上該數據包發出時的時間戳。GPS接收器收到數據包后,用當前時間(當前時間固然只能由GPS接收器自己來肯定了)減去時間戳上的時間,就是數據包在空中傳輸所用的時間了。
知道了數據包在空中的傳輸時間,那末乘上他的傳輸速度,就是數據包在空中傳輸的距離,也就是該衛星到GPS接收器的距離了。數據包是通過無線電波傳送的,那末理想速度就是光速c,把傳播時間記為Ti的話,用公式表示就是:
di=c*Ti(i=1,2,3,4);
這就是di(i=1,2,3,4)的來源了。
這個函數是我為了說明問題而虛構的,事實上未必存在,但是1定存在這樣類似的運算邏輯。這些運算邏輯可以由軟件來實現,但是事實上可能大都是由硬件芯片來完成的(這可能也是每個GPS芯片的核心功能之1)。
根據立體幾何知識,3維空間中,3對[Positioni,di]這樣的數據就能夠肯定1個點了(實際上多是兩個,但我們可以通過邏輯判斷舍去1個),為何這里需要4對呢?理想情況下,的確3對就夠了,也就是說理想情況下只需要3顆衛星就能夠實現GPS定位。但是事實上,必須要4顆。
由于根據上面的公式,di是通過c*Ti計算出來的,而我們知道c值是很大的(理想速度即光速),那末對時間Ti而言,1個極小的誤差都會被放大很多倍從而致使全部結果無效。也就是說,在GPS定位中,對時間的精度要求是極高的。GPS衛星上是用銫原子鐘來計時的,但是我們不可能為每個GPS接收器也配1個銫原子鐘,由于1個銫原子鐘的價格可能已超過了這個GPS裝備再加上使用GPS的這輛名貴汽車的價格。
同時,由于速度c也會遭到空中電離層的影響,因此也會有誤差;再者,GPS衛星廣播的自己的位置也可能會有誤差。其他等等1些因素也會影響數據的精確度。
總之,數據是存在誤差的。這些誤差可能致使定位精確度下降,也可能直接致使定位無效。GetLocation(函數)中多用了1組數據,正是為了來校訂誤差。至于具體的細節,我們就不用關心了,我們只要知道,多用1組數據,就能夠通過1些奇妙的算法,消除或減小誤差,保證定位有效。這就是GetLocation()函數必須用4組數據的緣由,也就是為何必須有4顆衛星才能定位的緣由。
前面說在進行位置計算時都是用的空間坐標情勢表示,但是對GPS裝備及利用程序而言,通常需要用的是1個[經度,緯度,高度]這樣的位置信息。那末我們可以想象,在GetLocation()函數返回位置結果前,可能會進行1個從空間坐標情勢到經緯度情勢的轉換,我們無妨假定存在1個Convert(經緯度,空間坐標)這樣的函數來進行這個轉換。
實際上上面所說的只是定位原理中的其中1種,稱為單點定位,或絕對定位。就是通過唯1的1個GPS接收器來肯定位置。
目前定位精度最高的是差分定位,或稱相對定位。就是通過增加1個參考GPS接收器來提高定位精度。
上面我們已圍繞1個虛擬的GetLocation()函數基本弄清楚了GPS定位的基本數學模型,對編程而言,知道這些就足夠了(其實不知道也不影響編程)。如果好奇心還沒滿足的話,我們繼續了解1些GPS相干的背景知識。
(空話,固然是人發射的!地球人發射的?。?/p>
GPS(Global Position System,全球定位系統),全稱為NAVSTAR GPS(NAVigation Satellite Timing And Ranging Global Position System,導航星測時與測距全球定位系統)。GPS是1個由美國國防部開發的空基全天侯導航系統,它用以滿足軍方在地面或近地空間內獲得在1個通用參照系中的位置、速度和時間信息的要求。
GPS系統=空間部份+控制部份+用戶部份
GPS空間部份主要由24顆GPS衛星構成,其中21顆工作衛星,3顆備用衛星。24顆衛星運行在6個軌道平面上,運行周期為12個小時。保證在任1時刻、任1地點高度角15度以上都能夠觀測到4顆以上的衛星。
主要作用:發送用于導航定位的衛星信號。
構成:24顆衛星=21顆工作衛星+3顆備用衛星
GPS控制部份由1個主控站,5個檢測站和3個注入站組成。
組成:GPS控制部份=主控站(1個)+監測站(5個)+注入站(3個)
作用:監測和控制衛星運行,編算衛星星歷(導航電文),保持系統時間。
散布情況:
GPS用戶裝備部份包括GPS接收器及相干裝備。GPS接收器主要由GPS芯片構成。
如車載、船載GPS導航儀,內置GPS功能的移動裝備,GPS測繪裝備等都屬于GPS用戶裝備。
組成:主要為GPS接收器
作用:接收、跟蹤、變換和丈量GPS信號的裝備,GPS系統的消費者。
GPS定位是目前最為精確、利用最為廣泛的定位導航技術,以后將會成為每個移動裝備的標配之1?,F在的中高端只能手機,有相當1部份已配備了GPS硬件。那末針對GPS定位的開發技術也將成為1項主流常規技術。本文目的在于讓準備進行GPS定位開發的編程人員對GPS有1個大致的了解,這對編程可能沒有甚么直接的幫助,但是我想了解1下GPS的大致工作原理,在編程進程中就可以夠對GPS裝備的工作特性有1個感性的認識,這對開發回是有很大間接好處的。想了解關于GPS定位的具體開發技術,請參考《為Windows Mobile裝備創建位置感知的利用程序》。