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

        位置服務已經成爲愈來愈熱的一門技術,也將成爲之後全部移動設備(智能手機、掌上電腦等)的標配。而定位導航技術中,目前精度最高、應用最普遍的,天然非GPS莫屬了。網絡上介紹GPS原理的專業資料不少,而本文試圖從編程人員的角度出發,以一種程序員易於理解的方式來簡單介紹一下GPS定位的基本原理。固然,本文並無涉及具體的開發方面的技術。程序員

GPS定位數學模型

        之因此先介紹數學模型,是由於這個數學模型多是程序員比較關心的問題。固然這個模型只是根據一些GPS資料而爲程序員總結出來的一個簡化模型,細節方面可能並不符合實際,想了解具體細節請參考專業的GPS講解資料。
        GPS定位,實際上就是經過四顆已知位置的衛星來肯定GPS接收器的位置。
 
        GPS_thumb22
        如上圖所示,圖中的GPS接收器爲當前要肯定位置的設備,衛星一、二、三、4爲本次定位要用到的四顆衛星:
  1. Position一、Position二、Position三、Position4分別爲四顆衛星的當前位置(空間座標),已知
  2. d一、d二、d三、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.Position一、Position二、Position三、Position4這些位置信息從哪裏來?

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

2.d一、d二、d三、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
相關文章
相關標籤/搜索