GPS定位基本原理解析

       最近看到咱們國內的的導航:北斗導航已經完全部署完了麼,然後就去查找資料瞭解了一下導航這個玩意,最後發現其實不管什麼導航其實都差不多,只是用的衛星不一樣,如果用GPS導航可能就是使用美國那邊發射的衛星,如果使用北斗導航,就使用咱們國家自己發射的衛星。最後都是從衛星哪兒接受到數據,然後本地設備接收到數據進行計算得出當前位置信息,過程差不多就是這樣,然後發現有篇文章寫的還不錯,是站在碼農角度去解析分析導航的過程的,個人覺得比較好理解,轉載記錄一下,相互學習。

       位置服務已經成爲越來越熱的一門技術,也將成爲以後所有移動設備(智能手機、掌上電腦等)的標配。而定位導航技術中,目前精度最高、應用最廣泛的,自然非GPS莫屬了。網絡上介紹GPS原理的專業資料很多,而本文試圖從編程人員的角度出發,以一種程序員易於理解的方式來簡單介紹一下GPS定位的基本原理,希望對做GPS開發的朋友有所啓發。當然,本文並沒有涉及具體的開發方面的技術。

一、GPS定位數學模型

之所以先介紹數學模型,是因爲我認爲這個數學模型可能是程序員比較關心的問題。當然事先聲明,這個模型只是我根據一些GPS資料總專爲程序員總結出來的一個簡化模型,細節方面可能並不符合實際,想了解具體細節請參考專業的GPS講解資料。

GPS定位,實際上就是通過四顆已知位置的衛星來確定GPS接收器的位置。

GPS_thumb22

如上圖所示,圖中的GPS接收器爲當前要確定位置的設備,衛星1、2、3、4爲本次定位要用到的四顆衛星:

  • Position1、Position2、Position3、Position4分別爲四顆衛星的當前位置(空間座標),已知
  • d1、d2、d3、d4分別爲四顆衛星到要定位的GPS接收器的距離,已知
  • Location 爲要定位的衛星接收器的位置,待求

那麼定位的過程,簡單來講就是通過一個函數GetLocation(),從已知的[Position1,d1]、[Position2,d2]、[Position3,d3]、[Position4,d4]四對數據中求出Location的值。用程序員熟悉的函數調用來表示就是:

Location=GetLocation([Position1,d1],[Position2,d2],[Position3,d3],[Position4,d4]);

一看到這個函數調用,程序員們就該來勁了:這些參數從哪裏來?這個函數又是如何執行?由誰來執行的呢?立體幾何還沒有忘乾淨的可能還要問:爲什麼必須要4對參數呢?那下面我們就來一起探究一下。

1.Position1、Position2、Position3、Position4這些位置信息從哪裏來?

實際上,運行於宇宙空間的GPS衛星,每一個都在時刻不停地通過衛星信號向全世界廣播自己的當前位置座標信息。任何一個GPS接收器都可以通過天線很輕鬆地接收到這些信息,並且能夠讀懂這些信息(這其實也是每一個GPS芯片的核心功能之一)。這就是這些位置信息的來源。

2.d1、d2、d3、d4這些距離信息從哪裏來?

我們已經知道每一個GPS衛星都在不辭辛勞地廣播自己的位置,那麼在發送位置信息的同時,也會附加上該數據包發出時的時間戳。GPS接收器收到數據包後,用當前時間(當前時間當然只能由GPS接收器自己來確定了)減去時間戳上的時間,就是數據包在空中傳輸所用的時間了。

知道了數據包在空中的傳輸時間,那麼乘上他的傳輸速度,就是數據包在空中傳輸的距離,也就是該衛星到GPS接收器的距離了。數據包是通過無線電波傳送的,那麼理想速度就是光速c,把傳播時間記爲Ti的話,用公式表示就是:

di=c*Ti(i=1,2,3,4);

這就是di(i=1,2,3,4)的來源了。

3.GetLocation()函數是如何執行的?

這個函數是我爲了說明問題而虛構的,事實上未必存在,但是一定存在這樣類似的運算邏輯。這些運算邏輯可以由軟件來實現,但是事實上可能大都是由硬件芯片來完成的(這可能也是每一個GPS芯片的核心功能之一)。

4.爲什麼要必須要四對參數?

根據立體幾何知識,三維空間中,三對[Positioni,di]這樣的數據就可以確定一個點了(實際上可能是兩個,但我們可以通過邏輯判斷捨去一個),爲什麼這裏需要四對呢?理想情況下,的確三對就夠了,也就是說理想情況下只需要三顆衛星就可以實現GPS定位。但是事實上,必須要四顆。

因爲根據上面的公式,di是通過c*Ti計算出來的,而我們知道c值是很大的(理想速度即光速),那麼對於時間Ti而言,一個極小的誤差都會被放大很多倍從而導致整個結果無效。也就是說,在GPS定位中,對時間的精度要求是極高的。GPS衛星上是用銫原子鐘來計時的,但是我們不可能爲每一個GPS接收器也配一個銫原子鐘,因爲一個銫原子鐘的價格可能已經超過了這個GPS設備再加上使用GPS的這輛名貴汽車的價格。

同時,由於速度c也會受到空中電離層的影響,因此也會有誤差;再者,GPS衛星廣播的自己的位置也可能會有誤差。其他等等一些因素也會影響數據的精確度。

總之,數據是存在誤差的。這些誤差可能導致定位精確度降低,也可能直接導致定位無效。GetLocation(函數)中多用了一組數據,正是爲了來校正誤差。至於具體的細節,我們就不用關心了,我們只要知道,多用一組數據,就可以通過一些巧妙的算法,消除或減小誤差,保證定位有效。這就是GetLocation()函數必須用四組數據的原因,也就是爲什麼必須有四顆衛星才能定位的原因。

5.GetLocation()函數返回的位置信息怎樣被GPS設備識別呢?

前面說在進行位置計算時都是用的空間座標形式表示,但是對GPS設備及應用程序而言,通常需要用的是一個[經度,緯度,高度]這樣的位置信息。那麼我們可以想象,在GetLocation()函數返回位置結果前,可能會進行一個從空間座標形式到經緯度形式的轉換,我們不妨假設存在一個Convert(經緯度,空間座標)這樣的函數來進行這個轉換。

6.單點定位與差分定位

實際上上面所說的只是定位原理中的其中一種,稱爲單點定位,或絕對定位。就是通過唯一的一個GPS接收器來確定位置。

GPS_thumb11

目前定位精度最高的是差分定位,或稱相對定位。就是通過增加一個參考GPS接收器來提高定位精度。

GPS_thumb1

 

上面我們已經圍繞一個虛擬的GetLocation()函數基本搞清楚了GPS定位的基本數學模型,對於編程而言,知道這些就足夠了(其實不知道也不影響編程)。如果好奇心還沒滿足的話,我們繼續瞭解一些GPS相關的背景知識。

 

二、GPS衛星是哪裏來的?

(廢話,當然是人發射的!地球人發射的!)

GPS(Global Position System,全球定位系統),全稱爲NAVSTAR GPS(NAVigation Satellite Timing And Ranging Global Position System,導航星測時與測距全球定位系統)。GPS是一個由美國國防部開發的空基全天侯導航系統,它用以滿足軍方在地面或近地空間內獲取在一個通用參照系中的位置、速度和時間信息的要求。

1.GPS發展歷程

  • 1957年10月第一顆人造地球衛星SputnikⅠ發射成功,空基導航定位由此開始
  • 1958年開始設計NNSS-TRANSIT,即子午衛星系統; 
    1964年該系統正式運行; 
    1967年該系統解密以供民用。
  • 1973年,美國國防部批准研製GPS; 
    1991年海灣戰爭中,GPS首次大規模用於實戰; 
    1994年,GPS全部建成投入使用; 
    2000年,克林頓宣佈,GPS取消實施SA(對民用GPS精度的一種人爲限制策略)。

2.美國政府的的GPS策略

  • 兩種GPS服務: 
    SPS--標準定位服務,民用,精度約爲100M; 
    PPS--精密定位服務,軍用和得到特許的民間用戶使用,精度高達10M.
  • 兩種限制民用定位精度的措施(保障國家利益不受侵害): 
    SA--選擇可用性,認爲降低普通用戶的測量精度,限制水平定位精度100M,垂直157M(已於2005年5月1日取消); 
    AS--反電子欺騙。

3.其他衛星導航系統

  • GLONASS(全球軌道導航衛星系統),前蘇聯
  • Galileo-ENSS(歐洲導航衛星系統,即伽利略計劃),歐盟
  • 北斗導航系統,中國

 

三、GPS系統的構成

GPS系統=空間部分+控制部分+用戶部分

 

 GPS_thumb23

1.空間部分

GPS空間部分主要由24顆GPS衛星構成,其中21顆工作衛星,3顆備用衛星。24顆衛星運行在6個軌道平面上,運行週期爲12個小時。保證在任一時刻、任一地點高度角15度以上都能夠觀測到4顆以上的衛星。

主要作用:發送用於導航定位的衛星信號。

構成:24顆衛星=21顆工作衛星+3顆備用衛星

 

2.控制部分

GPS控制部分由1個主控站,5個檢測站和3個注入站組成。

組成:GPS控制部分=主控站(1個)+監測站(5個)+注入站(3個)

作用:監測和控制衛星運行,編算衛星星曆(導航電文),保持系統時間。

  • 主控站:從各個監控站收集衛星數據,計算出衛星的星曆和時鐘修正參數等,並通過注入站注入衛星;向衛星發佈指令,控制衛星,當衛星出現故障時,調度備用衛星。
  • 監控站:接收衛星信號,檢測衛星運行狀態,收集天氣數據,並將這些信息傳送給主控站。
  • 注入站:將主控站計算的衛星星曆及時鐘修正參數等注入衛星。 

GPS_thumb3

 

分佈情況:

  • 主控站:位於美國科羅拉多州(Calorado)的法爾孔(Falcon)空軍基地。
  • 注入站:阿松森羣島(Ascendion),大西洋;迭戈加西亞(Diego Garcia),印度洋;卡瓦加蘭(Kwajalein),東太平洋。
  • 監控站:1個與主控站在一起;3個與注入站在一起;另外一個在夏威夷(Hawaii),西太平洋。

 

GPS_thumb2

3.用戶部分

GPS用戶設備部分包含GPS接收器及相關設備。GPS接收器主要由GPS芯片構成。

如車載、船載GPS導航儀,內置GPS功能的移動設備,GPS測繪設備等都屬於GPS用戶設備。

組成:主要爲GPS接收器

作用:接收、跟蹤、變換和測量GPS信號的設備,GPS系統的消費者。

 

GPS定位是目前最爲精確、應用最爲廣泛的定位導航技術,以後將會成爲每一個移動設備的標配之一。現在的中高端只能手機,有相當一部分已經配備了GPS硬件。那麼針對GPS定位的開發技術也將成爲一項主流常規技術。本文目的在於讓準備進行GPS定位開發的編程人員對於GPS有一個大致的瞭解,這對於編程可能沒有什麼直接的幫助,但是我想了解一下GPS的大致工作原理,在編程過程中就能夠對GPS設備的工作特性有一個感性的認識,這對於開發還是有很大間接好處的。

衛星授時原理:

北斗和GPS的原理基本一致,出於種種考慮(你懂的),這裏說下GPS的授時原理。
GPS的星座由24顆衛星組成,不同的衛星分配不同的僞隨機碼進行區別,衛星上一般都配有3-4臺的原子鐘以進行時間保持,同時地面上的主控站還會將修正數據(包括衛星軌道,時間修正等)不定期發給衛星,以使24顆衛星之間保持時間同步。
由於GPS的星座經過精心設計,所以地球上絕大多數地方都可以同時看到最少4顆衛星。
同時用戶接收機有4個未知數(經度,緯度,高度,本地時間),通過解一個四元二次方程組即可求出接收機的座標和時間,這樣就完成了一次定位和授時。
 

授時可以分爲三步來完成:
1、有一個基準源:無論GPS和北斗衛星上一般搭載原子鐘,老GPS是銫鐘,部分新星是銣鍾。鐘的頻率考慮了相對論效應,保證衛星距離引力場的距離和高速運動帶來的相對論效應下依然能達到設計頻率,做法是假設要產生精確10.23Mhz,實際調校的頻率是比這個差一點點的,剛好抵消掉相對論效應。有了這樣精確的時鐘,加上地面站的不斷校正,GPS會在自己的電文中播發一個GPS時間,播發這個時間的幀的第一個bit的邊沿是和這個時間值嚴格對應的。比如播發的時間是1445s(指從這一週開始經過的秒數,稱周內秒),那麼這一幀的第一個bit反轉的邊沿就應該剛好從這個時刻從天線出去。這樣通過測量這個反轉沿,可以在本地恢復出一個精確的秒的變化邊沿,這個邊沿是與發射時刻同步的,而接收機要授時是要獲得精確的本地時間,那麼剩下的就是計算信號從天線傳播到接收機經過的時間了。
2、知道自己與基準的差:這一步比較複雜,基本實現方法是通過解方程的方式完成,通過設一個本地與衛星原子鐘差的未知數Δt。這一步和定位是一起完成的,也就是說定位精度越高,其授時精度理論上也應該越高。基本定位方法是通過對衛星信號中播發的C/A碼進行觀測,計算接收機與至少4顆衛星的距離(這個距離就是前面各位說的僞距,它並不是真實的距離,實際上應該是真實距離加上光速乘以之前設的未知數Δt,所以接下來可以列方程求出它)。然後是根據衛星播發的電文中的軌道參數,計算出能看到的每一顆衛星的具體位置。然後再設接收機座標xyz三個未知數,連立4個三維空間求距離的方程,左邊是xyz與衛星的距離,右邊是僞距加上c*Δt,這樣就可以解出xyz和Δt了。由於僞距觀測量會有誤差,所以定位和授時會有誤差,所以GPS的定位精度是有上限的,除非使用載波測量的方式可以極大提高精度,這個就不說了....
3、算個加減法:獲得了2裏面的時間差Δt之後,和1裏面的秒反轉沿進行加減運算即可獲得精確的GPS時間,然後根據GPS和UTC時間的變換關係就可以獲得精確的UTC時間。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章