个人博客:xiuxiuing.gitee.io/blog
GPS定位实现原理解析
什么是GPS定位/h4>
我们手机上的GPS定位,是卫星定位的一种约定俗成的说法,严格来说应该叫做GNSS(GlobalNavigation Satellite System)定位。因为GPS确实只是GNSS的一种,是美国部署的一套全球卫星系统。这套系统给个简单的描述,就是
- 天上有24颗卫星在不断的绕地球运动(下图左),
- 每颗卫星不断发送“我是谁,我在哪里”的信
- GPS定位实际误差小,GPS认为自己误差小:天空无遮挡,卫星分布均匀,每颗卫星信噪比都很好,GPS选择了形状最饱满、信噪比最高的几颗卫星加以定位,因此其对定位误差很有信心。
- GPS定位实际误差小,GPS认为自己误差大:典型的是在较高的公共汽车和火车车厢里,这种情形信 强度很弱,但各颗卫星同等减弱,所以实际定位效果还可以,GPS却认为这个信噪比不靠谱,对此无信心,因此给出很大的误差半径。
- GPS定位实际误差大,GPS认为自己误差小:这是个严重误判,主要出现在高楼区域(最典型的如CBD),这些区域其实信 遮挡并不明显,卫星数并不少,有时候还会非常多,但某些卫星通过光滑表面(玻璃高楼)反射到接收机,GPS接收机被欺骗,误以为这个卫星发射过来的信 是“单一直射”过来的,从而采纳了这颗卫星的传播时间用来定位,当多颗卫星存在这种情形,而且总卫星数非常多时,卫星分布也非常饱满,则GPS接收机就会乐观过度,悲剧就此发生。
- GPS定位实际误差大,GPS认为自己误差大:主要出现在明确遮挡的区域(最典型的如高架下),某些的信 强度变得很差,从而接收机便不太信任这颗卫星。但身不由己,能用的卫星数太少,GPS接收机不得不用它来定位,所以卫星降低了对位置准确程度的预期,给出一个很大的半径。
关于GPS搜星的速度讨论
刚才说到GPS定位慢,这个确实不假。接下来我们细致的讨论下,为什么慢,以及在手机里是如何解决这个问题的。
搜星时间长,主要是两个因素构成的:第一是GPS信 的解调,可以认为需要用类似穷举的方式解出来真正的信息;第二是GPS卫星发送30秒一次的循环电文,这个循环电文已经包含了这段时间每一瞬间的卫星位置,一般总得一个循环完成后,才能收集到足够可以推算设备位置的信息。对于冷启动来说,后者是免不了的,前者则取决于接收机软硬件的优劣,这就是所谓GPS在没有任何知识的情况下启动至少要持续30秒的原因。
但实际上,有时候打开地图软件,都是看到瞬间定位,而有时候则可能几分钟乃至几十分钟都无法定位成功,这又是为什么/p>
你看到地图app定位成功,不一定都是GPS定位
首先,wifi定位已经可以做到很不错的精度,甚至在室内可以做到5M,这个精度已经不比GPS差了,在室外,wifi定位也可以做到20M量级,也就是比GPS稍稍差一些,在高楼林立的区域,wifi定位的精度会比GPS更好。
其次,在新版Android和市面上可见的IOS系统上,刻意屏蔽了“GPS是否定位成功”这么一个信息,表现为一旦使用定位,位置图标即展现,并且不闪烁(老Android系统,会有闪烁来表达GPS没有定位成功),以至于用户无法知道到底这个定位结果是谁产生的。
我们之前的讨论说起过,wifi定位,是可以瞬间完成的,所以这一切产生了“GPS”定位很快的错觉。
卫星分布状态不一定允许快速定位
GPS能知道自己算错了吗/h4>
如果你是个开发者,就会知道,各种手机系统几乎都提供对GPS定位获取误差的API接口,那么GPS能知道自己算错了吗又是如何计算其误差的呢br> 答案很复杂,一句话没法把这个问题说清楚,得分四种场景:
如何改善高楼区域的GPS定位精度/h4>
笔者先给出结论,纯粹靠端,并且把接收机当成黑盒,是无法做到的。
近年,学术界研究这玩意的Paper并不少,大致思路是两类:
第一个思路,真是在端上做,但不把接收机当成黑盒,而深入修改定位逻辑,显然开发者是做不了这个事情的。最多也只是极少数对驱动精通的人能做,app开发者是做不了的——试问Android和IOS开放了GPS接收机内部解算逻辑了吗有。其实这和radio内部是黑盒一样的,你见过哪个开发者声称能改善手机拍照性能、改善音频播放音质、改善信 质量吗S根本没把基本功能的实现逻辑开放出来,怎么改善能改善的都是耍流氓。
第二个思路,有可能能在手机上做,但paper一般基于楼的轮廓建立反射模型,举个例子,附近不是有个楼吗个楼多高,楼的地面轮廓是什么,我们都知道了,然后就根据卫星的细节情况(如方位、仰角、信噪比、是否参与定位)来猜测某些卫星发射到手机的信 ,是不是会受到干扰,如果两者连线穿过了楼,那么我们就有理由认为,这个卫星信 的传播距离可能比实际的要长,从而我们就把定位结果朝这个卫星的位置做一些修正。
就第二个思路,要想做好也是很困难的,因为这个思路从原理上说,有很多想当然的前提。比如,当时用户真实的位置并不知道,所以判断是否有反射也就无从谈起,只能将其作为隐变量来迭代求解。其他的坑也很多,如楼的数据从哪里搞来要说可以去人肉采集的,那我想先问一个问题,先不说楼高度如何测量,你在人肉测绘楼轮廓的时候,是不是也用GPS了你是如何保证当时楼轮廓的测量结果是准确的呢br> 不过,判断GPS是否真正的飘,这个比确定设备在GPS漂移时的真正位置,还是要容易一些的。首先GPS本身就给个半径出来,这个半径虽然不准,但也可以作为参考。其次GPS还有大量的卫星分布细节信息,是足以结合云端的统计结果来判断是否漂移的。只要能识别出GPS定位的真正误差,其意义就已经很大了,如在导航中,就会避免误偏航,在定位中,就可以用WIFI定位结果来替代GPS,做到真正的双向融合。不过,这个工作对开发者的模式识别功底,还是挺考验的。
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!