目前定位導航技術中,精度最高、應用最廣泛的仍然是GPS,本文試着用不專業的方式說一下GPS的原理,僅供自己學習使用。
一、GPS定位數學模型
我們用一個不存在的數學模型來簡化模型,GPS定位,實際上就是通過四顆已知位置的衛星來确定GPS接收器的位置。

如上圖所示,圖中的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接收器的距離了。資料包是通過無線電波傳送的,那麼理想速度就是光速(實際情況會受到電離層等的影響,此處不考慮)C,把傳播時間記為Ti的話,用公式表示就是:
di = C * Ti(i = 1,2,3,4);
這就是di(i = 1,2,3,4)的來源了。
3.為什麼要四對參數?
根據立體幾何知識,三維空間中,三對[Position,do]這樣的資料就可以确定一個點了,為什麼需要四個呢?
因為根據上面的公式,di是通過C * Ti計算出來的,而我們知道C值是很大的(理想速度即光速),那麼對于時間Ti而言,一個極小的誤差都将會被放大很多倍進而導緻整個結果錯誤。也就是說,在GPS定位中,對時間的精度要求是極高的(這也就是為什麼我們要不斷提高時間精度)。GPS衛星上是用铯原子鐘來計時的,但是我們不可能為每個GPS接收器都配一個铯原子鐘(太貴了),同時,GPS衛星廣播的自己的位置也可能會有誤差。其他等等很多因素也會影響資料的精确度。
總之,這些誤差可能會導緻定位精确度降低,也可能直接導緻定位無效。**GetLocation(函數)**中多用了一組資料,正是為了來校正誤差。至于具體細節我們就不用關心了,我們隻要知道,多一組資料,就可以通過一些巧妙的算法,減小甚至消除誤差,確定定為有效。這就是為什麼必須有四顆衛星才能定位的原因。
4.GetLocation()函數傳回的位置資訊怎樣被GPS裝置識别呢?
前面所說的位置資訊都是用的空間坐标的形式表示的,但是對GPS裝置及應用程式而言,通常需要的是一個[精度,次元,高度]這樣的位置資訊。那麼我們可以想象,在GetLocation()函數傳回位置結果前,可以進行一個從空間坐标形式到經緯度形式的轉換,我們不妨再假設一個Convert(空間坐标,out經緯度)這樣的函數來進行這個轉換。
5.單點定位與差分定位
上面所說的定位原理隻是實際情況中的一種,稱為單點定位,或絕對定位。就是通過唯一的一個GPS接收器來确定位置。
目前定位精度最高的是差分定位,或稱相對定位。就是通過增加一個參考GPS接收器來提高定位精度。
上面是圍繞一個虛拟的GetLocation()函數談論的GPS定位的最基本原理,如果好奇心還沒滿租的話,請查閱相關書籍。