关于卫星定位,你想知道的一切

2020 年 11 月 14 日

关于卫星定位,你想知道的一切

5G 和北斗,是国之重器。北斗作为卫星定位系统,目前在国际上已处于领先地位,而且已经渗透到我们工作和生活的方方面面。本文将简要介绍卫星定位的原理和应用情况,方便大家对北斗、卫星定位有更多的了解。


卫星定位的原理


卫星定位系统的英文是 Global Navigation Satellite System(GNSS),虽然直接翻译过来是导航卫星系统,但它真正提供的能力是定位,能定位后,导航就变得相对简单了。卫星定位的原理,是利用卫星播发时间信号,当设备接收到后,可以根据信号发射时间和本地时间,计算出信号传输时间,再结合光速获得卫星-设备距离。



有了多颗卫星的信号,可以列出一组方程,求解 4 个未知数:设备的三维坐标 x/y/z,以及本地时间与 GNSS 系统的时间差。


式中的代表卫星 j 的三维坐标,这个坐标可以通过卫星星历计算获得。



星历是描述卫星运行轨道的一组参数,卫星轨道是一个椭圆,通过几个参数和时间,可以唯一确定卫星的准确位置。


星历的获取有两种方式,一种是卫星直接播发,这种方式的好处是定位过程不依赖卫星信号以外的任何输入,即使没有网络也可以定位成功,但问题是卫星链路带宽很小,要下载完整星历,需要 30 秒左右的时间,早期的手机和一些车载设备定位过程很慢,就是由于这个原因。


另一种方式,是通过互联网播发,这种方式叫 A-GNSS,具体的传输协议叫 SUPL(Secure User Plane Location),这种数据一般不对应用层透出,在手机上,操作系统会在底层定时请求 SUPL 数据,然后将获得的星历注入 GNSS 芯片。有了 A-GNSS,设备就可以在秒级获得定位,不需要任何等待过程,目前所有的手机都支持这种方式。A-GNSS 的服务提供商,主要是通信运营商,以及一些定位服务商,比如谷歌、千寻等。


卫星不间断的向地面广播信号,这个信号主要包括以下信息:


  • 卫星编号。用于从星历中查找卫星轨道,再结合时间戳获得当前卫星位置

  • 当前时间戳。用于获得卫星位置,另一方面计算伪距。伪距是(本地时间-信号发射时间)*光速,之所以叫伪距,是因为本地时间与卫星时间不同步,所以这个距离并不是真正的设备-卫星距离。

  • 星历数据。用于计算卫星位置。


像其他所有的通信技术一样,这些信息也是以报文的形式发送的,以 GPS 为例,卫星会每隔 6 秒发出一个包,而这个包会分解为数据位-CA 码序列-载波波形,通过天线发射到地面。地面设备持续锁定卫星,在解算时,计算每颗卫星当前时刻的时间戳(用最近一次收到的时间戳加上报文偏移量),然后进行位置解算。



载波的频率是 1.5G 左右,波长 20 厘米左右,比移动通信的波长稍长一些,所以信号的穿透性还是比较好的(波长越长,越容易绕开障碍物),可以穿透比较薄的墙壁或屋顶,所以在一些情况下即使无法直接看到天空,也是能定位的。但是卫星信号是从上往下,在室内很难穿越多层建筑。


卫星定位的另一个特点是可以解算出速度,其依据是多普勒频移原理(与交警用的测速仪原理一样)。当信号源与接收设备存在相对运动时,接收到的信号频率会发生变化。



频率变化量与相对速度存在如下公式:



其中,公式左边是频差和波长,v 是设备运动速度(矢量),vj 是卫星运动速度(矢量),1j 是卫星的投影方向,dt'是本地设备的频漂速度。只要测量了 4 颗星的频差,就可以解出本地设备的运动速度(与设备姿态无关)。


除了定位和测速,定位卫星还可以完成全球授时(解算过程中获得本地钟差),这也是目前成本最低的高精度授时方法,比绝大部分设备自带的时钟都要准确。


一般而言,伪距测量值精度不如频率测量精度高(伪距定位精度在 10 米左右,而多普勒定速精度可以达到 0.2 米/秒以内,授时精度在 20ns),原因是伪距测量容易受到多种路径误差影响(后面会介绍),而频率测量的干扰因素少很多。


卫星定位发展历程


最早的卫星定位系统,是美国在 1960 年代开发的子午仪系统,后续在 70 年代开发出了 GPS 定位系统,目前的 GPS 系统由 24 颗卫星构成。除了 GPS,世界多国也开发出了自己的卫星定位系统,主要的有中国的北斗系统、欧盟的伽利略系统、俄罗斯的格洛纳兹系统,此外日本和印度在开发区域定位系统。



除了天上的卫星,各定位系统还需要地面站对卫星的运行进行监测,包括健康度、轨道参数(计算完成后要注入卫星实现全球播发)、信号质量等,另外还需要对卫星进行控制。


各种卫星定位系统使用的技术类似,大多采用中轨道卫星(MEO,卫星高度 2 万公里),少数采用了地球同步轨道(GEO,卫星高度 4 万公里)和地球倾斜同步轨道(IGSO)。同时,信号播发大多采用 CDMA 技术,实现在同一个频率上传输多颗卫星的信号。为了让地面设备能够较好的接收来自几万公里外的信号,信号的数据速率都比较低,比如 GPS L1 频段的数据传输速率只有 50 字节/s,根据香农定理,C=B*log2(1+S/N), 在频率带宽 B 固定的情况下,随着传输速率 C 的降低,接收端在信噪比(S/N)比较低的时候也可以解出正确的信号,有利于持续的锁定、跟踪卫星信号。


与其他定位系统相比,北斗的特点主要有:


  • 亚太地区覆盖好。北斗系统由3颗地球同步卫星、3颗地球倾斜轨道同步卫星和24颗中轨道卫星构成,与GPS相比,北斗有6颗星持续覆盖亚太地区,极大提升了亚太地区可见卫星的颗数,一方面提高定位成功率,另一方面也能提升精度(改善了GDOP,减少了误差)。

  • 北斗的同步卫星可用来进行通信,地面设备可以将短报文发送到卫星(只用GEO卫星支持短报文)上,然后转发给目标终端,这种通信是免费的,但是需要专门的天线和设备(需要将信号发射到4万公里远的地方,普通手机肯定是不行的)。



多个卫星定位系统的信号同时被收到时,所有的卫星可以一同参与解算(每增加一个系统,只需增加一个新的参数,即这个系统相对于 GPS 系统的时间差),使得定位精度可以获得提升。目前手机上无法选择参与定位的星座或者卫星,所以我们无法指定只用北斗或者不用 GPS 定位。


我们对比了手机端 GNSS 定位时,使用不同系统的占比,可以看出 GPS 和格洛纳兹由于发展的比较早,在手机芯片侧的渗透率比较高,因此被使用的比例也最高,其次就是北斗。



按参与定位的卫星颗数统计,北斗排在第二位,仅次于 GPS。



因为各系统技术类似,其定位精度也是类似的,北斗也不例外,水平定位误差一般在 10 米以内。垂直定位精度一般会差一些,主要是由于卫星都分布在设备的一侧,垂直方向上的误差难以修正。


卫星定位接收机构成



卫星定位接收机的原理图如上图所示,主要的模块包括:


  1. 天线


用于接收卫星信号。由于卫星信号微弱,天线当然是越大越好,但是由于接收机需要移动,天线尺寸受到制约。天线的主要作用是放大信号和抑制多径,主要的类型有以下几种



左边的是比较常见的天线,内部是陶瓷天线,外部带磁铁,可以吸附在车顶;中间的是专业天线,旁边带扼流圈,可以抑制来自四周和地面反射的信号,只接收从天顶方向来的信号,这种天线的效果最好,一般用于专业研究和高精测绘;右侧是手机天线,长度只有几厘米,效果最差。


卫星信号的电磁波是圆极化的(传播时在垂直于传播方向的一个平面上波动),因此,采用圆极化天线(如平面的陶瓷天线)接收效果最好。但手机上天线尺寸太小,只能采用线极化天线,信号捕获能力大幅下降,再加上缺乏信号屏蔽(扼流圈),极易受到多径效应以及其他信号干扰。


  1. 射频前端


这个模块主要是将原始信号进行下变频、功率放大以及滤波,提取真正有用的信号,便于解码处理。


  1. 基带处理


这个模块是对卫星信号进行解码,获得卫星报文。每颗卫星的信号需要一个单独的通道进行处理,如果有 100 颗卫星,2 个频段,那可能需要 200 个通道才能有效处理这些信息。通道数越多,可以获得的卫星观测值也就越丰富,定位精度也就越高。


解码的过程,分为搜索-锁定-跟踪三步,首先生成每颗卫星的伪码,然后与信号进行自相关操作,相关度达到一定程度就可以锁定卫星,然后进行码锁定、位同步、帧同步,最终提取出报文。这个过程要持续进行,因为多普勒效应,信号的频率会不断变化,所以本地生成的伪码也要不断变换频率去适配卫星的变化。一旦失去锁定,就会丢失信号,也就无法定位了。


  1. PVT解算


PVT 包括 Position,Velocity 和 Time。这一步是真正进行定位的步骤,是利用基带解码获得的报文,提取出时间戳、星历等信息,代入公式进行计算,然后将计算结果输出给应用程序。


定位误差来源与精度提升


卫星定位虽然已经很准确了,但是在某些场景下,还是无法满足需求,比如,打车的时候定位点离车辆有一定距离、步导的时候难以区分方向甚至会定位到马路对面、静止的时候定位点总数飘来飘去、室内的时候定位点乱飘。这需要从卫星信号的发射、传输、接收过程来解释。



卫星信号从发射到被设备接收,需要经过大气层,其中,大气电离层有数千公里厚,这部分大气非常稀薄,但是存在大量被电离的电子,这部分电子会让电磁波变慢一点,从而产生延迟。在对流层,也会产生一定的延迟。在地表附近,由于各种建筑、山体、水面的影响,卫星信号可能被反射或折射(多径效应),产生延迟。


在卫星信号发射侧和接收侧,也有很多系统相关的误差,比如时钟偏差、处理延迟等,这些延迟加上传输延迟,使得卫星信号的传输时间,并不是准确的等于物理距离/光速,另一方面,卫星的星历也有误差,卫星位置和真实位置存在偏差,最终造成了定位结果产生偏差。


要提升定位精度,需要想办法消除这些误差,主要有以下几种方案。


双频 GNSS


不同频率的电磁波通过电离层时会有不同的延迟,人们发现,对两个或多个频率的观测值进行线性组合,可以消除电离层误差,从而能提升精度。这就是双频 GNSS 定位的原理。小米 8 是业界第一款支持双频 GNSS 定位的手机,后续各大厂商均进行了跟进,一些高端手机均采用双频定位。消除电离层误差后,定位精度可以提升到 5 米以内。


地基/星基增强


星历误差、卫星时钟误差、甚至是电离层和对流层误差都是可以观测或建模的,一旦计算出了实时的误差值,就可以通过一个单独的通道进行播发,接收设备在定位过程中使用这些修正项,就可以提升定位精度。播发的通道一般有两种,一种是直接通过卫星播发,称为 SBAS(Satellite-Based Augmentation System),好处是覆盖广,但设备需要增加额外的信号接收通道;另一种是地基增强,比如通过互联网,这需要设备具备联网能力。


这些增强方式对于精度提升是有限的,还是有很多误差项无法消除,比如电离层误差。


高精定位-差分定位(RTK)


RTK 是 Real - time kinematic 的缩写,是一种差分定位。其原理是利用一个参考站提供基准观测值,然后用设备的观测值与基准站的观测值进行差分,差分后可以消掉星历误差、卫星钟差、电离层误差,再进行星间差分后可以进一步消除掉设备的钟差,最终可以算出设备相对基准站的相对坐标,如果基准站位置已知,就可以完成准确的绝对坐标,精度可以达到厘米级甚至毫米级。


RTK 能提升精度的另一个原因是引入了载波相位观测,相比伪距观测值,载波相位观测值的误差更小。


使用 RTK,需要在附近 20km 内有参考站(距离太远,电离层误差不一样,做差分无法完全消除误差),同时需要持续不断的获得参考站的观测数据(一般通过互联网传输,使用 RTCM 协议),因此相对普通的定位,RTK 定位成本较高,但对于一些对精度要求很高的场景,比如车道级定位、自动驾驶等,是必不可少的。


RTK 服务一般由专业服务商提供,如千寻、六分,这些服务商在全国范围内部署了数千个基准站,持续对订阅用户播发数据。


高精定位-精密单点定位(PPP)


RTK 需要布设密集的参考站,有没有办法不依赖参考站?PPP(precise point positioning)就是一种方法,它的原理是对每一种误差进行准确建模,最终求解出卫星和设备之间的准确距离。为了确定准确的误差,PPP 定位时需要不断的迭代内部参数,而且,一些卫星的误差只有当卫星位置变化后才能体现出来,所以 PPP 需要比较长的收敛时间,一般需要 30 分钟才能收敛到理想的精度,如何更快的收敛是目前学术界的一个研究热点。


组合定位


卫星定位的一个最大问题,就是丢失卫星信号后如何定位,这就需要其他定位方式来补充。组合定位是利用卫星信号和其他定位技术,比如惯性导航,来完成定位,二者相互配合。最简单的一个例子,就是卫星定位是有一个最高频率的,一般最多是 10Hz,在两次定位之间,可用惯导来进行位置推算,获得更高频率的位置输出。而组合导航最重要的作用,是提升精度,比如,利用卡尔曼滤波方法,用惯导计算推算位置,用卫星定位提供观测量,对推算位置进行修正,这可以让定位结果更加平滑,而且可以对异常的卫星观测量进行过滤或降权。


手机上的卫星定位


在移动互联网出现以前,卫星定位终端是一个很专业的领域,只有测绘、军事等领域会应用这种技术,定位需要使用专用的接收机,比如 Trimble、ublox 等。随着智能手机将卫星定位芯片集成,卫星定位的应用得到爆发式增长,终端数量一下子提升到几十亿量级,也产生了海量的位置数据。


手机上的卫星定位与专业接收机,还是存在比较大的差异,主要体现在:


  • 手机受限于尺寸,天线比较小,对原始信号的捕获、锁定、去噪能力都比较差,造成接收到的信号质量天然不如专业接收机。

  • 手机上芯片成本比较低,支持的通道数比较有限,一次定位能够解码的卫星数量和系统数量都比较少,主要是单频,少数是双频,没有三频。

  • 手机上对功耗、性能开销的要求比较高,不能花费大量资源在定位上,解算算法的复杂度比较低,效果也比较有限,精度比较差。


苹果手机


苹果手机的定位能力是完全封闭的,对外只透出定位结果,外部基本无法拿到任何定位相关的原始观测量,比如卫星数量、类型等。好消息是,iPhone12 终于开始支持北斗了。从苹果的 API 上,外界甚至无法区分定位结果到底是来自卫星定位还是网络定位(目前仅能通过速度的符号来判断,但苹果对此没有任何承诺)。所以,基于苹果手机,我们基本无法做出优化,苹果手机上高德地图的定位点都是 iOS 底层直接提供的。


安卓手机


安卓手机比苹果手机开放的多,在定位能力方面提供了一系列 API:


  • 可以单独获取卫星定位结果或网络定位结果,也可以同时进行两种定位。

  • 提供了NMEA格式(一种卫星定位结果的规范化表达)的结果数据,可以获取每颗卫星的ID、类型、信号强度,以及xDOP等细粒度的误差描述。

  • 提供了GnssStatus来描述每颗卫星的状态,内容比NMEA更全面。

  • 提供了GnssMeasurement来描述原始观测量,包括伪距测量值、载波相位测量值、卫星锁定状态等。

  • 提供了GnssClock描述本地时钟的状态。

  • 提供了GnssNavigation透出最原始的未解码报文。


有了这些信息,通过一些 App 就可以实时看到当前的卫星状态,例如 Androits gps test, GPStest 等



另外,我们还可以进行卫星定位的软解算,对卫星定位结果进行修正,甚至替代。我们主要尝试解决两类问题:


  • 定位不准:对卫星定位结果进行质量判断,识别其中的大误差点,优化精度,或者优化精度半径,使下游使用定位点的时候,能够差异化的处理。



定位不准的原因,主要是来自卫星信号中含有误差,而影响最严重,也是最难抑制的,就是多径造成的影响。


另一类定位不准的问题,是系统将其他定位结果伪造为卫星定位结果。比如,将网络点冒充为卫星定位点。


  • 无法定位:系统不输出定位结果时,尝试进行软件解算。


无法定位最主要的原因,是信号接收条件不好,比如室内遮挡、高架遮挡、高楼遮挡。在开阔地带无法定位,一般是设备 Bug,重启设备后一般都能解决。


卫星定位未来展望


随着移动用户量持续增长,以及物联网的大范围普及,卫星定位技术还会持续快速发展。


在卫星侧,将出现低轨定位卫星(距地面几百公里)。传统上的定位卫星由于要覆盖较大的地理范围,高度一般都比较高,运行在中轨轨道上。随着火箭发射技术的革命,卫星发射成本急剧下降,向太空发射大批量低成本卫星的方案成为可能。比如 spacex 已经发射了上千颗“星链”卫星。


低轨卫星进行定位有几个好处:


  • 距离近,信号更强,设备侧接收到的卫星信号更好。

  • 可以传输更多的数据,比如各种修正数据。

  • 位于电离层底部,电离层误差小。

  • 卫星仰角变化快,PPP定位可以更快收敛。


在设备侧,高精定位将大范围普及,华为 P40 是首个支持 RTK 的智能手机,可以做到 0.5 米的精度。高通也即将发布支持 RTK 的移动芯片,在 2021 年上半年,更多支持 RTK 的智能手机将会上市。


在应用侧,高精定位的应用场景会不断涌现,现在的一些典型应用场景包括:


  • 传统测绘

  • 精准农业,机械化自动化种植和收割

  • 车道级导航和自动驾驶

  • 共享单车的精准停放

  • 无人机导航


参考资料


北斗官方网站 http://www.beidou.gov.cn/


GPS 官方网站 https://www.gps.gov/


伽利略官方网站 https://www.gsa.europa.eu/


本文转载自公众号高德技术(ID:amap_tech)。


原文链接


关于卫星定位,你想知道的一切


2020 年 11 月 14 日 14:002767

评论

发布
暂无评论
发现更多内容

JVM系列笔记 - 寄存器

朱华

JVM

优质数据库管理工具盘点,看看这三个软件的区别

CloudQuery社区

数据库 sql 云原生 工具 编辑器

商业模式和盈利模式的思考

iHTC

商业模式 盈利模式 地摊经济

第四周总结

_

极客大学架构师训练营 第四周总结

区块链需与5G等技术打好“组合拳”

CECBC区块链专委会

区块链 5G

正则表达式知识总结

iHTC

正则表达式

当我们在谈论跨平台的时候 ——— 我们在说什么

iHTC

跨平台

第四周 系统架构学习总结

钟杰

极客大学架构师训练营

面经手册 · 第13篇《除了JDK、CGLIB,还有3种类代理方式?面试又卡住!》

小傅哥

Java 字节码编程 asm 动态代理 cglib

一个草根的日常杂碎(10月9日)

刘新吾

随笔杂谈 生活记录 社会百态

一个草根的日常杂碎(10月11日)

刘新吾

随笔杂谈 生活记录 社会百态

我们可以把Adapter精简到什么地步

mengxn

RecyclerView BetterAdapter Adapter

技术解读丨分布式缓存数据库Redis大KEY问题定位及优化建议

华为云开发者社区

云计算 华为 技术

融合与共生之下,区块链都能“+”什么?

CECBC区块链专委会

区块链 大数据

iOS Handle Refunds 处理退款 --- WWDC20(Session 10661)

iHTC

WWDC2020 wwdc iap 苹果退款 iOS退款

通俗易懂和你聊聊寄存器那些事(精美图文)

cxuan

后端 计算机 汇编

华为程序员发现孩子不是自己的,怒提离婚!女方不要孩子!绿他的竟然是个酒吧混混!

程序员生活志

华为 程序员

为什么学Go(二)

soolaugust

go

数字货币交易所系统开发app,交易所搭建源码

WX13823153201

数字货币交易所系统开发

华为云专家带你解读文本情感分析任务

华为云开发者社区

内容 数据 分析

Apple Developer 开发者账号申请&实名认证【2020】

iHTC

Apple Developer iOS Developer 苹果实名认证

一个草根的日常杂碎(10月10日)

刘新吾

随笔杂谈 生活记录 社会百态

Guava-技术专题-Cache用法介绍

李浩宇/Alex

优秀开源项目、博客、书籍整理

小铁匠

收藏教程 资源汇总

CECBC区块链专委会副主任吴桐主讲全国社保基金数字货币讲座

CECBC区块链专委会

区块链 数字货币

极客时间 - 架构师一期 - 第四周作业

_

第四周作业 架构师一期

OpenResty 项目脚手架

小铁匠

lua nginx openresty

随想

Nydia

你不知道的java对象序列化的秘密

程序那些事

Java java序列化 序列化的秘密

JDK14性能管理工具:jmap和jhat使用介绍

程序那些事

内存泄露 JDK14 jmap jhat

每个数据科学家都应该知道的5个概念

计算机与AI

学习 数据科学

关于卫星定位,你想知道的一切-InfoQ