Monday, 14. August 2006, 15:23:17
- GPS 工作原理又一次在文章基本上完成的时候,停电了!再次被考验意志了,我一定要坚持完成,而且要比第一次写的更好。
声明:本文所有的内容均来自于我自己的理解,或者从网上学习得来,如果有不对的地方请指正。众所周知,GPS 系统通过 GPS 专用卫星来定位,GPS 卫星总共有24颗,全部由美国发射并维护,其中21颗用于运行,3颗备用。24颗卫星运行于近地20000公里的轨道上,平均的分布在6个轨道平面上,轨道倾角为55度,各个轨道平面之间相距60度。卫星的运行速度为每12小时绕地球飞行一圈。这样,我们的GPS 接收模块在任何时间至少可以在地平线以上看到4颗卫星,而事实上,4颗卫星可见也是接收模块进行定位的基本要求。
首先,我们搞清楚,GPS 接收模块通过接收卫星发射来的信息来进行自身的定位,然后才是进行进一步的数据处理,然后交给其他的部件,比如某种软件进行进一步的数据应用,比如导航,测速等等。那么接收模块是如何通过卫星提供的信息进行自身定位的呢?
学习过空间解析几何的朋友都知道,如果已知在三维空间中三个点的坐标,同时知道自身与这三个点之间的 距离,那么就可以把自身的坐标锁定在两个确定点之内。而如果还有第四个点做参考的话,那么可以从这两个点中筛选出自身的精确空间坐标。也就是说如果GPS接收模块能同时知道空中3颗卫星的空间坐标,以及距离这三颗卫星的距离的话,那么就可以定位出两个点,而现实中,GPS 接收模块没有必要联系第四颗卫星,即可确定自身的坐标,因为我们都清楚我们在地球上,因此可以排除另一个点。
对于卫星的空间坐标来讲,这个好办,因为所有卫星的轨道都是固定的,至少是可以非常精确预测或者计算的,所以时时刻刻卫星都知道自己在什么位置,并且可以通过广播的方式发射出去。OK. 那么我们假定天空中三颗卫星已经被你锁定,获取了他们的空间坐标,并且此时此刻他们是不动的,下一步,也是最重要的一步,就是你需要获得与他们之间的距离。如何获得?让卫星告诉我们吗?显然不行,因为卫星要同时给地球上所有的GPS接收模块服务,它不会帮我们计算,所以我们只能使用这个公式,距离=速度×时间。
无线电波无论通过什么频率在发射,它的速度我们常识上认为和光速是一致的,(虽然不同频率的电波在穿过大气层以及其他被其他空间物质所阻碍时会在不同程度上的改变速度,但是此时我们暂时忽略不计,事实上,这个偏差也确实不大);而时间呢,我们想象,如果在接收模块和卫星那段都有非常非常非常精确的时钟的话,当卫星在广播自身的空间坐标的同时加上时间戳,经过接收机对比本系统的时钟,就可以获悉电波的运行时间了。而事实上,在卫星上可以配备非常非常非常精确的原子钟,但是在GPS接收模块上的时钟却远没有卫星上的精确,试想无线电以如此快的速度传播,并且距离最多不过20000公里,一旦时间上有微小的偏差,那么定位距离将产生显著的差错。理论上似乎没有办法获得卫星与接收模块的精确距离了...
这时,工程相对于理论的优势就可以发挥作用了,也是时候请第四颗卫星出马了。注意,我们意识到所有的24颗卫星的时间都是一致并且是精确可靠的,而接收模块相对于卫星的时间误差也是一致的,所以只要找到这个误差值,那么问题就迎刃而解了。当我们发现通过已知的三个卫星数据计算出自身的坐标不对时,比如发现自己不在地球上,那么就需要用逼近的方法来不停的调整这个误差值,然后计算与第四颗卫星之间的理论距离,并与测算出来的距离进行比较,直到这个误差被消除为止。这样我们就得到了这个关键的参数,修正值,也就是在GPS软件中常常被显示的参数 - fix.
到此为止,重要的问题基本上已经被解决了。但是还有两个问题不可忽略,一个是,我们在前面假定四颗被锁定的卫星是固定不动的,事实上这样做是为了分析方便,实际上,卫星是在高速运动的,但是这并没有给数学建模造成多大的复杂度,因为当今对于 GPS 接收模块来说,存储所有卫星的星历,或者计算其星历都不是什么难事,也就是说固定时间内其行进的距离是可以计算出来的。另外一个问题就是无线电波在传输过程中的速度损失,而这是有理论依据,根据其传输频率,可以计算出其速度损失,从而做相应的调整。
除此之外,还会有各种干扰,以及其他一些不可测的因素会影响定位的精确性,这是无论如何也不能被避免的,这也是为什么一般来讲定位精度会在10米,而不是0.00001 毫米。
另外还有几个有意思的因素,一是有些时候你的 GPS 接收模块是不能同时看到4颗卫星的,虽然几率不大,但是确实存在这样的情况。二是你的 GPS 接收模块的核心性能参数不是其计算能力,而是其通道个数和时钟的准确程度,时钟直接决定了定位准确度以及做逼近所需的时间,而所谓的通道个数是指接收模块能同时和几个卫星通讯,理论上通道越多越好,假如有四个通道,那么初次定位以及计算修正值都不会因为通道切换而影响精确度,如果仅仅有一个通道,那么要轮询接收来自四颗卫星的数据,卫星可以以1000次/妙的间隔广播,但是你的接收模块恐怕难有这么快的轮询频率的。一般的民用设备会有三个通道。
还有,你知道为什么美国要让卫星以这么快的速度运行吗?答案是为了便于维护,因为这样的话,每颗卫星每天至少两次掠过管理中心的上空,管理机构每天可以对其进行两次维护,做必要的调整,比如对卫星做时钟校准操作等等。
- 相关的通讯协议前面介绍的是接收模块和卫星之间的通讯原理,似乎离用户还是远了一些,我们只需要知道这个无线电辐射对人无害就足够了。而接收模块和 GPS 软件之间的通讯协议其实更有意思。
GPS 接收模块可能和软件集成在一个设备上,比如那些支持内置 GPS 模块的 PDA,而很多时候,GPS 接收模块和掌上设备或者说软件载体是分离的,他们之间相连的话,一般采用USB 直接连接或者蓝牙连接等方式,不论如何,我们认为这是物理层或者链路层的协议,甚至传输层的协议我们也不需要关心,这里我们关心的是 GPS 客户端软件如何与 GPS 接收模块交换数据。
对于专有品牌的硬件和其相应的软件产品往往他们之间采用私有的通讯协议,我们也不作探讨。对于标准的或者说通用的数据传输方式来讲,常用的是 NMEA (National Marine Electronics Association) 协议/标准,通过这个协议,GPS 接收模块可以实时的将初步加工好的数据传送给软件客户端,软件客户端也可以通过这个协议和硬件之间交换“路点”,“路径”文件(?待确认)。
事实上NMEA 不仅定义了坐标等信息的传输语句的格式,还针对硬件参数制定了很多规范。基本上对于地理信息的都是以 $ 开头的以行为单位的语句,其数据类型为纯文本。而实际上某些特定品牌,比如 Garmin, 甚至是基于同样的语法做的vendor 扩展,非常类似 Radius 协议。举个简单的例子说明,
语句为:
$PGRME,15.0,M,45.0,M,25.0,M*22
解释为:
PGRMEP 表示为厂商扩展,GRM 是Garmin的厂商代码,E 是语句类型,只被Garmin 识别
15.0,M Estimated horizontal position error in metres (HPE)
45.0,M Estimated vertical error (VPE) in metres
25.0,M Overall spherical equivalent position error
关于 NMEA 定义的进一步信息我会找时间再研究,或者是有需要的时候再进一步研究,感兴趣的朋友可以参考下面的参考文献。似乎没有针对NMEA 的RFC

参考文献:
http://www.gpsinformation.org/dale/nmea.htmhttp://vancouver-webpages.com/peter/nmeafaq.txt