当前定位导航技术中,精度最高、应用最广泛的仍然是GPS,本文试着用不专业的方式说一下GPS的原理,仅供自己学习使用。

一、GPS定位数学模型

我们用一个不存在的数学模型来简化模型,GPS定位,实际上就是通过四颗已知位置的卫星来确定GPS接收器的位置。

GPS定位方程python gps定位数学原理_GPS定位方程python


如上图所示,图中的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接收器来提高定位精度。

GPS定位方程python gps定位数学原理_GPS定位方程python_02


上面是围绕一个虚拟的GetLocation()函数谈论的GPS定位的最基本原理,如果好奇心还没满租的话,请查阅相关书籍。