地图定位技术揭秘(二)

个人博客:xiuxiuing.gitee.io/blog

GPS定位实现原理解析

什么是GPS定位/h4>

我们手机上的GPS定位,是卫星定位的一种约定俗成的说法,严格来说应该叫做GNSS(GlobalNavigation Satellite System)定位。因为GPS确实只是GNSS的一种,是美国部署的一套全球卫星系统。这套系统给个简单的描述,就是

  1. 天上有24颗卫星在不断的绕地球运动(下图左),
  2. 每颗卫星不断发送“我是谁,我在哪里”的信号
  3. 接收机(比如手机GPS芯片)收到了多颗卫星发出的这样的信号,根据信号传播时间推算出离卫星的距离,进而解出了接收机自己的位置,顺便可以得到当前准确时间(下图右)。
    地图定位技术揭秘(二)
    上图中,可见22颗卫星,锁定使用了20颗卫星,左面的国旗揭露了奥秘,是的,现在手机的所谓GPS接收模块中,很多都拥有多种卫星的接收能力,实际可用的卫星主要是三种:GPS、格洛纳斯、北斗。多个卫星系统共同定位,产生比单一GPS更好的定位效果。
    如何确定你的手机支持哪些卫星呢为一个使用者,可以直接下载GPS软件来看国旗的颜色来大致了解,作为一个开发者,可以获取GPS的卫星伪随机码作为编号,具体可参看Android中关于GPSStatus类的描述。
    之所以多套卫星定位系统存在的原因,要从部署卫星定位系统的初衷说起。一个国家部署卫星定位系统,主要目的是为了在作战中,能精确定位,便于精确调度进行打击。当然在平年代(比如说当代中国),这种卫星系统更普遍地出现在民用领域,如车载导航仪等。
    那么就会有人问,既然这样,为什么要另起炉灶,部署那么多套呢如中国为什么不沿用GPS,而要花大量人力做一套北斗系统呢因就是GPS卫星的部署者(美国军方)是可以对信号设置干扰的,一旦干扰产生,普通的接收机便无法正确定位,而美国由于知道具体的干扰加密策略,它可以无损解密,依然正常定位。从技术角度说,形成GPS垄断难度并不大(当然这样也确实非常损人品),这样的后果却是很不可想象的——首先对中国主权构成很大的威胁,其次各行各业的正常生产也都会受到极大的影响。因此,一个有实力的国家,都应该有一套属于自己的卫星导航系统。
    自从2000年中国发射了第一个北斗导航卫星至今,已经有17颗卫星在天空中默默地提供定位服务,目前北斗只能在亚太地区提供局部的定位能力,当所有35颗卫星都发射完毕后,就可以提供全球范围的定位服务,届时北斗系统的定位能力便可正式比肩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轨迹(绿色)对比。
    地图定位技术揭秘(二)
    图中右面有个高楼,接收机(手机)收到的某卫星的信号,实际由两个分支构成,一部分是直射,一部分是发射到墙上再反射回来的卫星,GPS可能会被这样的信号所欺骗,甚至以为右面那部分信号才是直射过来的信号,于是就导致了它计算信号传播时间就错了,最终定位发生很大偏差。

    GPS能知道自己算错了吗/h4>

    如果你是个开发者,就会知道,各种手机系统几乎都提供对GPS定位获取误差的API接口,那么GPS能知道自己算错了吗又是如何计算其误差的呢br> 答案很复杂,一句话没法把这个问题说清楚,得分四种场景:

    • GPS定位实际误差小,GPS认为自己误差小:天空无遮挡,卫星分布均匀,每颗卫星信噪比都很好,GPS选择了形状最饱满、信噪比最高的几颗卫星加以定位,因此其对定位误差很有信心。
    • GPS定位实际误差小,GPS认为自己误差大:典型的是在较高的公共汽车和火车车厢里,这种情形信号强度很弱,但各颗卫星同等减弱,所以实际定位效果还可以,GPS却认为这个信噪比不靠谱,对此无信心,因此给出很大的误差半径。
    • GPS定位实际误差大,GPS认为自己误差小:这是个严重误判,主要出现在高楼区域(最典型的如CBD),这些区域其实信号遮挡并不明显,卫星数并不少,有时候还会非常多,但某些卫星通过光滑表面(玻璃高楼)反射到接收机,GPS接收机被欺骗,误以为这个卫星发射过来的信号是“单一直射”过来的,从而采纳了这颗卫星的传播时间用来定位,当多颗卫星存在这种情形,而且总卫星数非常多时,卫星分布也非常饱满,则GPS接收机就会乐观过度,悲剧就此发生。
    • GPS定位实际误差大,GPS认为自己误差大:主要出现在明确遮挡的区域(最典型的如高架下),某些的信号强度变得很差,从而接收机便不太信任这颗卫星。但身不由己,能用的卫星数太少,GPS接收机不得不用它来定位,所以卫星降低了对位置准确程度的预期,给出一个很大的半径。

    如何改善高楼区域的GPS定位精度/h4>

    笔者先给出结论,纯粹靠端,并且把接收机当成黑盒,是无法做到的。
    近年,学术界研究这玩意的Paper并不少,大致思路是两类:
    第一个思路,真是在端上做,但不把接收机当成黑盒,而深入修改定位逻辑,显然开发者是做不了这个事情的。最多也只是极少数对驱动精通的人能做,app开发者是做不了的——试问Android和IOS开放了GPS接收机内部解算逻辑了吗有。其实这和radio内部是黑盒一样的,你见过哪个开发者声称能改善手机拍照性能、改善音频播放音质、改善信号质量吗S根本没把基本功能的实现逻辑开放出来,怎么改善能改善的都是耍流氓。
    第二个思路,有可能能在手机上做,但paper一般基于楼的轮廓建立反射模型,举个例子,附近不是有个楼吗个楼多高,楼的地面轮廓是什么,我们都知道了,然后就根据卫星的细节情况(如方位、仰角、信噪比、是否参与定位)来猜测某些卫星发射到手机的信号,是不是会受到干扰,如果两者连线穿过了楼,那么我们就有理由认为,这个卫星信号的传播距离可能比实际的要长,从而我们就把定位结果朝这个卫星的位置做一些修正。
    就第二个思路,要想做好也是很困难的,因为这个思路从原理上说,有很多想当然的前提。比如,当时用户真实的位置并不知道,所以判断是否有反射也就无从谈起,只能将其作为隐变量来迭代求解。其他的坑也很多,如楼的数据从哪里搞来要说可以去人肉采集的,那我想先问一个问题,先不说楼高度如何测量,你在人肉测绘楼轮廓的时候,是不是也用GPS了你是如何保证当时楼轮廓的测量结果是准确的呢br> 不过,判断GPS是否真正的飘,这个比确定设备在GPS漂移时的真正位置,还是要容易一些的。首先GPS本身就给个半径出来,这个半径虽然不准,但也可以作为参考。其次GPS还有大量的卫星分布细节信息,是足以结合云端的统计结果来判断是否漂移的。只要能识别出GPS定位的真正误差,其意义就已经很大了,如在导航中,就会避免误偏航,在定位中,就可以用WIFI定位结果来替代GPS,做到真正的双向融合。不过,这个工作对开发者的模式识别功底,还是挺考验的。

    来源:咻咻ing

    声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年10月13日
下一篇 2018年10月13日

相关推荐