面向Android智能终端的多模GNSS实时非差精密定位
2019-05-16李子申张少添
汪 亮,李子申,周 凯,张少添,袁 洪
(1. 中国科学院光电研究院,北京 100094; 2.中国科学院大学,北京 100049)
0 引言
基于智能终端的高精度定位是未来实现大众高精度位置服务的重要手段。在硬件设备允许的情况下,早期的Android系统支持输出经度、纬度和高程等位置信息,并提供相关的应用程序开发接口(Application Programming Interface,API)。2016年5月18日,Android 7.0(Nougat)系统公开亮相于Google I/O开发者大会,Google宣布自Android 7.0(API level 24)系统开始,新增了输出全球导航卫星系统(Global Navigation Satellite System,GNSS)的原始观测值的API—Android Location API (android.location)[1]。对于GNSS开发者来说,这是首次能够从Android智能终端系统获取GNSS载波和码的观测数据以及导航电文等信息,Android系统GNSS原始数据的开放为Android位置服务的应用带来了重要机遇。
现有的卫星导航定位方法主要包括差分定位和非差定位两大类,相应的代表性技术分别为基于载波相位的实时动态定位(Real-Time Kinematic,RTK)技术和精密单点定位(Precise Point Positioning,PPP)技术[2-3]。针对Android终端如何实现高精度定位处理的现有研究[4-17],主要集中于对其观测数据特性的分析以及进行差分定位处理方面,实验结果绝大部分以事后处理为主,基于实时PPP手段实现智能终端实时高精度定位的研究则明显较少。基于差分定位技术实现智能终端高精度位置服务密切依赖于地面基准站(网)的支持,难以直接实现大众高精度位置服务的大规模应用。相对而言,基于PPP非差方式的定位技术,不受地面基准站的限制,只需通过网络实时接收精密卫星轨道和钟差以及电离层等改正信息即可实现全球尺度的高精度定位,适合以智能手机为主的大众高精度位置服务的大规模应用。因此,本文针对基于Android智能终端开放的GNSS原始数据如何实现实时非差精密定位进行了研究,在Android智能终端上实现了实时PPP高精度定位,并开发了智能终端实时PPP定位原型软件,显著提升了智能终端的定位精度。
1 智能终端GNSS原始观测数据获取与生成
早期Android系统中的位置服务主要是通过android.gsm.location这一应用程序开发接口完成的,虽然可以通过一些基本的Android指令配置GNSS芯片,但开发者也只能获得GNSS芯片上报给操作系统的位置、速度和时间(Position Velocity and Time, PVT)解算结果等信息。从Android 7.0(API level 24)系统开始及之后的系统中,Android系统引入了新的Location API(android.location),提供了关于GNSS原始观测数据的相关类,主要包括:1) GNSS Clock类,该类提供了用于计算信号接收时刻的GNSS芯片时间以及钟偏等信息;2) GNSS Navigation Message类,该类提供了所有卫星系统的导航电文等相关信息;3) GNSS Measurement类,该类提供了卫星信号的发射时间以及与计算载波相位和多普勒等观测量的相关信息。关于GNSS Clock、GNSS Measurement以及GNSS Navigation Message类中的数据成员以及含义具体可参见文献[1]和Android源码,本文不做详细介绍。
由于伪距和载波相位等观测量并没有直接在Android Location API中给出,使用这些API提供的GNSS原始测量信息进行定位解算的前提是计算出定位解算所需的伪距、载波相位、多普勒等观测量信息。例如,GNSS Clock可以计算出信号接收时间,GNSS Measurement提供卫星信号发射时间,由这2个信息便可以计算得到伪距。下面对GNSS伪距、载波相位、多普勒等原始观测量的计算方法做简要介绍。
根据Android Location API,GNSS伪距的计算可以表示为
(1)
式中,tRx和tTx为在同一时间系统下的信号接收和发射时间,tTx可直接由GNSS Measurement类中的ReceivedSvTimeNanos成员获得,为
tTx=ReceivedSvTimeNanos[ns]
(2)
对全球定位系统(Global Positioning System,GPS)、北斗卫星导航系统(BeiDou Navigation Satellite System,BDS)和GALILEO而言,ReceivedSv-TimeNanos为相应的周内秒时间(Time of Week,TOW);对GLONASS而言,其为相应的天内秒时间(Time of Day,TOD)。需要注意的是,若要获得有效的信号发射时间,需要根据该类中成员State的相应值来判断当前卫星信号的跟踪状态。其中,要求GPS和BDS满足STATE_TOW_DECODED,GLONASS满足STATE_GLO_TOD_DECODED,而GALILEO满足STATE_TOW_DECODED和STATE_GAL_E1C_2ND_CODE_LOCK,具体可参看Android源码中的定义。
GNSS系统时间可以通过Location API中的内部硬件时钟以及硬件时钟和GPS起始时间之间的偏差等信息计算。早期的Android版本对硬件层进行了封装,在Android 7系统的GNSS Clock类中对硬件时钟进行了开源,支持输出自GPS初始至今的纳秒数。根据硬件时钟可以换算得到当前GPS时间,信号接收时刻的完整GPS时间tRxGPS可按式(3)计算得到
tRxGPS=TimeNanos-(FullBiasNanos(1)+
BiasNanos(1))[ns]
(3)
式中,TimeNanos为接收机内部时钟(ns),BiasNanos为接收机时钟纳秒以内偏差(ns),FullBiasNanos为接收机内部时钟与GPS起始时间之间的差异(ns)。将其换算到当前周内秒时间,则为:
tRx=tRxGPS-weekNumberNanos[ns]
(4)
式中,weekNumberNanos为自GPS时间起始时刻开始至当前周的总纳秒数。这样,在求得tRx和tTx后便可求得伪距值。需要注意的是,这里tRx表示相对于GPS的信号接收时间,而tTx给出的是各自系统下的信号发射时间。因此,对非GPS而言,需要将tTx与tRx转换到一致的时间系统下,详细的伪距计算与时间转换可查阅文献[1]。
在Android Location API中,载波相位的测量值是由变量AccumulatedDeltaRangeMeters以m为单位给出的,将其除以波长便可得到以cycle为单位的载波相位测量值CarrierPhaseCycles,具体为
AccumulatedDeltaRangeMeters=k*CarrierPhaseCycles
(5)
这里,k表示由信号中心频率f确定的一个常量,即波长(k=c/f)。载波相位测量值的有效性是由AccumulatedDeltaRangeState一值给出的,以告诉用户是否发生了周跳和相位重置等信息,相应的状态有4种,分别是:ADR_STATE_UNKNOWN、ADR_STATE_VALID、ADR_STATE_RESET以及ADR_STATE_CYCLE_SLIP。
由卫星与接收机间的相对运动导致的多普勒频移可以从PseudorangeRate-MetersPerSecond获得,这个变量给出的是伪距率(m/s),当该变量为正值时,表示卫星正在远离接收机。伪距率PseudorangRateMetersPerSecond和多普勒频移DopplerShiftHz之间的关系可以由式(6)表示,据此可求得多普勒频移观测量
PseudorangRateMetersPerSecond=
-k*DopplerShiftHz
(6)
2 智能终端GNSS原始数据特性分析
深入分析Android系统获得的GNSS原始观测数据质量,是基于智能终端实现高精度定位的基础。针对此,使用Nexus-9 Pad(以下简称Nex9)采集了不同场景下的实验数据,包括:空旷环境下的静态实验以及一般城市道路环境下的车载动态实验。其中,静态实验数据采集于中国科学院光电研究院科研楼顶,周边视野开阔,无明显遮挡,测试时长约为250min。车载动态实验数据采集于北京市海淀区城市道路,实验路线为光电院-邓庄南路-友谊路-北清路-G7高速-光电院,测试终端安装于试验车顶,测试时长约90min,其中试验车辆在实验开始前的35min内处于静止状态。
下面从信号载噪比C/N0值、伪距残差特性以及载波相位测量性能3个方面对上述采集的GNSS原始数据基本特性进行分析。
2.1 C/N0值特性
图1中给出了静态实验场景下Nex9的GPS卫星C/N0值的大小分布及其与高度角之间的关系。从图1中可以看出,智能终端的卫星C/N0值绝大多数分布在25~40dB·Hz范围内,少数历元部分卫星的C/N0值低于25dB·Hz。同时,其C/N0值与卫星高度角之间的相关性并不明显,在卫星高度角较低(<30°)时,其C/N0值仍然较高。另外,从图1中还能看到,智能设备的C/N0值变化剧烈,许多卫星在部分时段即使其高度角在不断升高,但其C/N0值却急剧降低。智能终端的这种C/N0特性主要跟其采用小型化、低成本与线极化工作方式的接收天线密切相关,这给其后续信号捕获和跟踪环路的工作性能带来了巨大挑战,进而影响了伪距和载波相位的测量性能以及最终的定位性能。
(a)
(b)图1 静态场景下Nex9的GPS卫星C/N0值分布(a)及其与高度角的关系(b)Fig.1 Probability density distribution ofC/N0(a) andC/N0vs.elevation (b) for GPS satellites of Nex9 in static scenario
2.2 伪距残差特性
一般说来,卫星的高度角越低,其信号在大气层中传播的路径就越长,所受到的电离层延迟效应和对流层延迟效应的影响也就越大,同时也越容易受到多路径效应的影响,于是其测量值的误差相应地也就越大。另外,对于一般的测量和导航用户而言,其码伪距测量误差主要以由热噪声引起的码相位测量噪声为主。通常C/N0值越高,由热噪声引起的码相位测量误差就越小,伪距测量精度就越高;反之,C/N0值越低则伪距测量误差就越大。为分析智能终端伪距测量性能,利用一台高精度测量型接收机(天宝NetR9)采用超短基线(约15cm)方法对Nex9静态观测数据进行评估。由于高精度测量接收机和天线具有良好的多路径抑制效果和较低的测量噪声,因此,与其相关的残余误差可以忽略不计,单差残差可认为主要是由于智能终端本身的测量性能造成的。
图2中给出了静态实验场景中Nex9的GPS卫星伪距单差残差与高度角之间的关系,以及G12卫星的伪距单差残差随卫星高度角的变化情况示例。从图2中可以看到,伪距残差与卫星高度角二者之间并无明显相关性,甚至当卫星高度角较高时其伪距残差依然较大,当卫星高度角处于70°~80°时的伪距残差明显较高度角为50°时的要大。以G12卫星为例可以看到,在3.5h左右的时段内其高度角为整个实验时段内最高(35°~38°),但是对应的伪距残差绝对值反而增大到30m以上;而在2.0h左右的时段内其卫星高度角最低(10°左右),但此时的伪距残差基本上为10m以内。
(a)
(b)图2 静态实验中Nex9的GPS伪距单差残差随卫星高度角的变化(a)以及G12卫星示例(b)Fig.2 Single-differenced pseudorange residuals of GPS satellitesagainst the elevation (a) and an example of G12 satellite (b) forNex9 in static scenario
图3中给出了静态实验场景中Nex9的GPS卫星伪距单差残差与C/N0值之间的关系,以及G12卫星的伪距单差残差随C/N0的变化情况示例。从图3中可以直观地看到,随着C/N0值的升高,其对应的伪距残差也整体上随之减小,当C/N0值最大时对应的伪距残差也整体上最小,表明此时伪距测量精度整体上最高;而当C/N0值较低时其伪距残差也随之较大,其较大的伪距残差也更集中在当C/N0低于25dB·Hz的情形下。同样,以G12卫星为例,其在3.5h左右的C/N0值降低至25dB·Hz以下时对应的伪距残差绝对值增大到30m以上;而当C/N0值升高时,对应的伪距残差也随之减小,这很好地说明了伪距测量误差与C/N0之间的强相关性。
(a)
(b)图3 静态实验中Nex9的GPS伪距单差残差随C/N0的变化(a)以及G12卫星示例(b)Fig.3 Single-differenced pseudorange residuals of GPS satellitesagainst theC/N0(a) and an example of G12 satellite (b) forNex9 in static scenario
2.3 载波相位测量性能
Android系统在给出载波相位观测量AccumlatedDeltaRangeMeters的同时,给出其状态标记AccumlatedDeltaRangeState以告诉用户是否发生了周跳或相位重置等。另外,由于智能终端内置GNSS芯片的连续工作将会增加耗电量缩短续航时间,生产商在Android系统里普遍采用一种名叫Duty Cycle(称为工作周期或者占空比)的技术来降低GNSS芯片功耗。Duty Cycle机制即为在一个时间周期(1s)内,对GNSS信号的跟踪只开启一小段时间,然后随即关闭。Duty Cycle机制的存在直接影响GNSS芯片对载波相位测量的连续性,这将在很大程度上限制基于载波相位的RTK和PPP高精度定位的应用实现。关于Duty Cycle机制的更多介绍具体可参见文献[1]。根据Google给出的相关信息可知,Nex9(非蜂窝版)这一款智能终端没有开启Duty Cycle控制机制,因此,其GNSS芯片可以向用户提供连续的载波相位测量结果。
以GPS卫星为例,图4中给出了车载动态实验中Nex9各GPS观测卫星的载波相位跟踪状态,具体包括Phase Valid和Cycle Slip两种,其中,Phase Valid(连续有效)对应状态值为ADR_STATE_VALID,Cycle Slip(发生周跳)对应状态值为ADR_STATE_RESET 或ADR_STATE_CYCLE_SLIP。
表1中给出了车载动态实验(纯车载动态时段)中Nex9的GPS和GLONASS可观测卫星的载波相位周跳比以及相应的平均周跳比的统计结果,其中,周跳比的定义是发生周跳的历元个数与实际的观测值历元总数的比值。
图4 车载场景(先静后动)下Nex9各GPS观测卫星的载波相位跟踪状态Fig.4 The carrier phase tracking states for visible GPSsatellites of Nex9 in kinematic scenario(static mode for the first 35min)
卫星周跳比/%卫星周跳比/%G0217.12R0333.15G0512.70R044.97G0624.58R1246.94G0729.43R1321.31G135.34R1831.67G153.38R1910.74G2124.83R204.00G295.61R2142.47G3020.42——平均15.93平均24.41
从图4中可以看到,当处于动态实验开始前的UTC 8:30-9:05静态时段内,Nex9的GPS各卫星载波相位状态除个别起始历元外都标记为Valid/连续有效;然而,当从UTC 9:05开始进行动态跑车时,许多历元各卫星的载波相位被标记为Cycle Slip/发生周跳,这是由于城市动态环境引起的环路跟踪性能变差和其自身探测到发生周跳的缘故。从表1中给出的周跳比定量统计结果可以看到,城市车载动态环境下Nex9对GPS信号的跟踪发生载波相位周跳的比例平均为15.9%,部分GPS卫星的周跳比可达20%~30%;而其对GLONASS信号的跟踪发生载波相位周跳的比例平均为24.4%,部分GLONASS卫星的周跳比可达30%~50%,明显要高于GPS卫星。从上述现象和结果可以看出,在城市动态场景下,受观测环境和用户运动等因素的影响,智能终端GNSS模块对卫星信号的跟踪容易发生失锁,载波相位测量值存在较多的周跳,这给基于载波相位的高精度定位带来了巨大挑战。
3 智能终端实时非差精密定位实现与结果分析
3.1 Android终端GNSS实时非差精密定位实现
从第2节对智能终端GNSS原始观测量的数据质量和特性的分析中可以看到:1)载噪比C/N0通常都较低且波动剧烈,与卫星高度角之间的相关性很弱;2)原始伪距测量噪声大、精度低、粗差多;3)载波相位观测量周跳频繁,这给利用智能终端GNSS数据进行高精度定位带来了巨大挑战。本文在深入分析智能终端原始GNSS数据特性的基础上,融合多模GNSS观测数据,将实时的精密卫星轨道和钟差改正产品以及电离层改正产品应用于智能终端非差精密定位中[18-20],并设计了专门针对智能终端数据特性的数据处理与质量控制策略,以及自适应的运动学模型[21],自主研制了面向Android平台的实时非差精密定位软件—PPPAnd (PPP for Android),可在智能终端设备上实时实现GPS+GLONASS+BDS+GALILEO四系统融合的伪距单点定位以及精密单点定位。
PPPAnd软件的设计架构如图5所示,主要包括UI、数据获取、数据解析以及定位解算四部分组成。UI部分主要是进行人机交互操作与定位结果的实时显示。数据获取部分的主要功能是获取实时精密定位所需的原始观测数据、RTCM格式的广播星历数据,以及误差改正数据(即SSR产品)。其中,原始观测数据使用标准Android Location API从内置GNSS芯片获取,RTCM数据流则通过网络按照NTRIP协议由Client从Caster服务器上获取。数据解析部分的主要功能是将从Android系统获取的原始观测信息数据进行解析得到伪距、载波相位、多普勒、载噪比等定位解算所需观测量,同时,对RTCM电文进行解码获得广播星历参数以及实时精密卫星轨道和钟差改正数与电离层参数信息。定位解算部分的功能是实现非差精密定位解算获得用户坐标等。
图5 Android实时非差精密定位软件(PPPAnd)设计框架Fig.5 Design scheme of the real-time un-differencedprecise positioning software for Android (PPPAnd)
为测试和验证智能终端实时非差精密定位性能,分别进行了多种场景下的实际定位实验,所需的RTCM实时数据流从中国科学院光电研究院的Caster服务器上获取。其中,广播星历使用RTCM3EPH-MGEX数据流,实时精密卫星产品与电离层产品分别为中国科学院自主计算的CAS01和CAS10产品;测试终端为Nex9,测试时将其放置于测量型天线旁边(车载测试时设备安装于车顶),并使二者尽可能处于同一水平面上,测试场景如图6所示。实时定位时使用的卫星系统为GPS和GLONASS双系统,参考坐标由测量型接收机(NovAtel PP6)数据做事后RTK解算得到,精度统计时忽略测试机与测量型天线二者之间的水平位置偏差(~10cm)。
(a)
(b)图6 静态(a)和车载动态(b)测试场景示意图Fig.6 Test scenarios for the static and kinematic experiments
3.2 伪距单点定位结果
图7中给出了实时伪距单点定位结果在水平(H)和垂直(V)方向上的时间误差序列及统计结果,包括均方根值(Root-Mean-Square, RMS)、68%概率值(CEP68,1σ)和95%概率值(CEP95,2σ)。可以看到,绝大多数历元的平面定位误差都在0~2m范围内波动,高程方向上的定位误差绝对值在0~3m范围内,相应的误差RMS分别为水平方向1.16m和垂直方向1.51m。从概率分布上看,水平和垂直方向上的1σ精度(CEP68)分别可达到1.22m和1.73m,2σ精度(CEP95)分别为1.72m和2.56m。
图7 实时伪距单点定位误差序列Fig.7 Time series of the positioning errors ofreal-time single point positioning in static scenario
3.3 实时精密单点定位结果
图8中给出了实时PPP静态定位结果在水平(H)和垂直(V)方向上的时间误差序列及其误差统计结果(RMS、CEP68和CEP95)。可以看到,经过约500s(8min)的收敛时间后,水平和垂直方向上的定位误差将稳定地收敛至1m以内,甚至0.5m左右,并且随着观测时间的累积,定位误差亦能收敛至0.2m左右。对整个测试时段内的全部定位解而言,误差RMS分别为水平方向0.62m和垂直方向0.66m。从概率分布上看,水平和垂直方向上的1σ精度(CEP68)分别可达到0.42m和0.44m,2σ精度(CEP95)分别为1.55m和1.27m。
图8 实时静态PPP定位误差序列Fig.8 Time series of the positioning errors of real-time precise point positioning in static scenario
图9中给出了在城市道路环境下的实时PPP动态定位结果在水平(H)和垂直(V)方向上的时间误差序列及其误差统计结果(RMS、CEP68和CEP95)。其中,用于比对的参考坐标由NovAtel接收机观测数据做事后RTK解算得到,图中缺失的部分时段历元是因为NovAtel接收机数据缺失的缘故。可以看到,绝大多数历元的平面定位误差都在0~2.5m范围内波动,高程方向上的定位误差绝对值在0~1.5m范围内波动。对整个测试时段内的全部定位解而言,相应的误差RMS分别为水平方向1.32m和垂直方向0.81m。从概率分布上看,水平和垂直方向上的1σ精度(CEP68)分别可达到1.54m和0.93m,2σ精度(CEP95)分别为2.19m和1.28m。对比静态PPP结果可知,实时动态定位结果明显较差,这主要是因为智能终端GNSS环路对导航信号的跟踪和测量的性能受城市复杂观测环境和动态的影响而变差的缘故。另外从结果中可以看到,该组动态实验的垂直精度优于水平精度,这主要是因为车辆行进过程中高程方向上的运动变化平缓,对其使用运动学模型进行约束的效果较水平方向上的约束效果要好。
图9 实时车载动态PPP定位误差序列Fig.9 Time series of the positioning errors of real-time precise point positioning in kinematic scenario
3.4 结果对比
表2汇总给出了3组定位实验中基于原始数据的解算结果与Android终端PVT Location结果的水平和垂直精度统计对比情况。对于实验一而言,测试终端的PVT结果的水平和垂直方向误差RMS统计结果分别为3.88m和6.21m,而基于原始数据解算的静态SPP解的相应统计精度为1.16m和1.51m,较前者改善程度分别为70.1%和75.7%。对于实验二而言,测试终端的PVT结果在水平和垂直方向上的RMS精度分别为5.14m和3.61m,而基于原始数据解算的静态PPP解算精度可达亚米级水平,分别为0.62m和0.66m,较PVT结果分别提高了87.9%和81.7%。在实验三即车载动态实验中,测试终端的PVT结果在水平和垂直方向上的RMS精度分别为2.18m和2.33m,而基于原始数据解算的动态PPP解算精度为1.32m和0.81m,较前者分别提高了39.4%和65.2%。
表2 三组实验中基于原始数据的解算结果与Android终端PVT结果的精度统计对比
4 结论
本文通过采用Android系统最新开放的GNSS原始测量数据进行实时非差高精度定位,以期达到改善智能终端定位精度的目的。利用实测数据从信号载噪比特性、伪距残差特性以及载波相位测量性能这3个方面对智能终端GNSS原始数据的基本特性进行了分析。在此基础上,基于智能终端原始GNSS数据实现了实时非差精密定位,并研制了面向Android系统的实时非差精密定位软件PPPAnd,开展了多种条件下的实际定位测试。结果表明:1)Android终端PVT结果的平面定位精度(RMS)约为3~5m;2)基于Android终端GNSS原始数据的静态SPP定位水平精度可达1.2m左右,较PVT结果提高了70%,静态PPP定位水平精度可达亚米级,较PVT结果提高了88%;3)静态PPP经过约8min的收敛,其定位误差将稳定地收敛至1m以内,并且随着观测时间的累积定位误差亦能收敛至0.2m左右;4)动态PPP定位结果的水平精度约为1.3m,较PVT结果提高了39%,改善效果不及静态场景明显;5)基于Android终端原始测量数据的实时非差定位结果在高程方向上的定位改善效果最为明显,较PVT结果平均提高了约74%。