【Android】GPS定位基本原理淺析

Leo.cheng發表於2014-02-27

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

GPS定位數學模型

        之所以先介紹數學模型,是因為這個數學模型可能是程式設計師比較關心的問題。當然這個模型只是根據一些GPS資料而為程式設計師總結出來的一個簡化模型,細節方面可能並不符合實際,想了解具體細節請參考專業的GPS講解資料。
        GPS定位,實際上就是通過四顆已知位置的衛星來確定GPS接收器的位置。
 
        GPS_thumb22
        如上圖所示,圖中的GPS接收器為當前要確定位置的裝置,衛星1、2、3、4為本次定位要用到的四顆衛星:
  1. Position1、Position2、Position3、Position4分別為四顆衛星的當前位置(空間座標),已知
  2. d1、d2、d3、d4分別為四顆衛星到要定位的GPS接收器的距離,已知
  3. 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這些位置資訊從哪裡來?

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

2.d1、d2、d3、d4這些距離資訊從哪裡來?

  1. 我們已經知道每一個GPS衛星都在不辭辛勞地廣播自己的位置,那麼在傳送位置資訊的同時,也會附加上該資料包發出時的時間戳。
  2. GPS接收器收到資料包後,用當前時間(當前時間當然只能由GPS接收器自己來確定了)減去時間戳上的時間,就是資料包在空中傳輸所用的時間了。
  3. 知道了資料包在空中的傳輸時間,那麼乘上他的傳輸速度,就是資料包在空中傳輸的距離,也就是該衛星到GPS接收器的距離了。
  4. 資料包是通過無線電波傳送的,那麼理想速度就是光速c,把傳播時間記為Ti的話,用公式表示就是:di=c*Ti(i=1,2,3,4);
  5. 這就是di(i=1,2,3,4)的來源了。

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

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

4.為什麼必須要四對引數?

  1. 根據立體幾何知識,三維空間中三對[Positioni,di]這樣的資料就可以確定一個點了(實際上可能是兩個,但我們可以通過邏輯判斷捨去一個),為什麼這裡需要四對呢?理想情況下,的確三對就夠了,也就是說理想情況下只需要三顆衛星就可以實現GPS定位。但是事實上,必須要四顆。
  2. 因為根據上面的公式,di是通過c*Ti計算出來的,而c值是很大的(理想速度即光速),那麼對於時間Ti而言,一個極小的誤差都會被放大很多倍從而導致整個結果無效。也就是說,在GPS定位中,對時間的精度要求是極高的。GPS衛星上是用銫原子鐘來計時的,但是我們不可能為每一個GPS接收器也配一個銫原子鐘,因為一個銫原子鐘的價格可能已經超過了這個GPS裝置再加上使用GPS的這輛名貴汽車的價格。
  3. 同時,由於速度c也會受到空中電離層的影響,因此也會有誤差;再者,GPS衛星廣播的自己的位置也可能會有誤差。其他等等一些因素也會影響資料的精確度。
  4. 總之,資料是存在誤差的。這些誤差可能導致定位精確度降低,也可能直接導致定位無效。GetLocation(函式)中多用了一組資料,正是為了來校正誤差。至於具體的細節,我們就不用關心了,我們只要知道,多用一組資料,就可以通過一些巧妙的演算法,消除或減小誤差,保證定位有效。這就是GetLocation()函式必須用四組資料的原因,也就是為什麼必須有四顆衛星才能定位的原因。

5.GetLocation()函式返回的位置資訊怎樣被GPS裝置識別呢?

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

6.單點定位與差分定位

  • 實際上上面所說的只是定位原理中的其中一種,稱為單點定位,或絕對定位:就是通過唯一的一個GPS接收器來確定位置
    GPS_thumb11
  • 目前定位精度最高的是差分定位,或稱相對定位:就是通過增加一個參考GPS接收器來提高定位精度
    GPS_thumb1
  1. 上面我們已經圍繞一個虛擬的GetLocation()函式基本搞清楚了GPS定位的基本數學模型,對於程式設計而言,知道這些就足夠了(其實不知道也不影響程式設計)。
  2. 如果好奇心還沒滿足的話,我們繼續瞭解一些GPS相關的背景知識。

GPS系統的構成

  • GPS系統=空間部分+控制部分+使用者部分
    GPS_thumb23

空間部分

  1. GPS空間部分主要由24顆GPS衛星構成,其中21顆工作衛星,3顆備用衛星。
  2. 24顆衛星執行在6個軌道平面上,執行週期為12個小時。
  3. 保證在任一時刻、任一地點高度角15度以上都能夠觀測到4顆以上的衛星。
  4. 主要作用傳送用於導航定位的衛星訊號。
  5. 構成:24顆衛星=21顆工作衛星+3顆備用衛星
    GPS_thumb1

控制部分

  1. GPS控制部分由1個主控站,5個檢測站和3個注入站組成。
  2. 組成:GPS控制部分=主控站(1個)+監測站(5個)+注入站(3個)
  3. 作用監測和控制衛星執行,編算衛星星曆(導航電文),保持系統時間。
    1. 主控站:從各個監控站收集衛星資料,計算出衛星的星曆和時鐘修正引數等,並通過注入站注入衛星;向衛星釋出指令,控制衛星,當衛星出現故障時,排程備用衛星。
    2. 監控站:接收衛星訊號,檢測衛星執行狀態,收集天氣資料,並將這些資訊傳送給主控站。
    3. 注入站:將主控站計算的衛星星曆及時鐘修正引數等注入衛星。 
        GPS_thumb3
 
    4.分佈情況
  1. 主控站:位於美國科羅拉多州(Calorado)的法爾孔(Falcon)空軍基地。
  2. 注入站:阿鬆森群島(Ascendion),大西洋;迭戈加西亞(Diego Garcia),印度洋;卡瓦加蘭(Kwajalein),東太平洋。
  3. 監控站:1個與主控站在一起;3個與注入站在一起;另外一個在夏威夷(Hawaii),西太平洋。
    GPS_thumb2

使用者部分

  1. GPS使用者裝置部分包含GPS接收器及相關裝置。
  2. GPS接收器主要由GPS晶片構成。
  3. 如車載、船載GPS導航儀,內建GPS功能的移動裝置,GPS測繪裝置等都屬於GPS使用者裝置。
  4. 組成:主要為GPS接收器
  5. 作用接收、跟蹤、變換和測量GPS訊號的裝置,GPS系統的消費者。

參考文章

  • http://blog.csdn.net/webgeek/article/details/18220891
 

相關文章