Android移动智能终端高精度 导航定位技术研究
2019-12-20邢伟坡于臻徐斌王玉林
邢伟坡 于臻 徐斌 王玉林
摘 要:近年来,Android高精度定位技术迅速发展,相继提供了访问GNSS原始数据的API和Wifi往返时延定位技术RTT,定位精度可达到1米级。本文系统介绍了Android平台 RTT技术和基于GNSS原始观测量的定位技术,为基于Android平台的航海导航应用开发提供借鉴。
关键词:Android,GNSS,RTT
0 引 言
Android智能终端定位服务动态定位精度通常在10 m左右。2016年,谷歌在“I/O大会”上,宣布Android操作系统自7.0版本开始,开放GNSS 原始观测量的访问接口,开发者可以通过这些接口访问GNSS原始观测量。谷歌这一举措意义重大,开发者可以使用伪距、多普勒频率及载波相位等原始观测数据实现RTK、PPP高精度定位,从而拓展高精度GNSS 的实现空间和应用领域。2018年,谷歌在Android P引入了Wifi RTT定位技术,能够在室内提供高精度定位。虽然智能终端在定位精度方面永远不会超越高端的大地测量仪器,但由于智能终端应用的普遍性,这可能会促进以前无法想象的新应用程序的出现。
1 Wifi往返时延定位技术[1]
1.1 原理
Wifi往返时延定位技术(Wifi RTT)是基于WiFi射频信号传播时间实现定位的技术。2018年,谷歌基于IEEE 802.11mc测距协议在Android 9.0加入了RTT定位技术。RTT主要用于Android智能终端的室内定位,定位精度可达1~2 m。Wifi RTT定位原理如下:
首先,智能终端扫描标准的Wifi信号,发现附近的Wifi接入点,并根据Wifi信标帧和探测帧特定比特位确定Wifi接入点是否支持RTT,以选择其中的某些Wifi接入点实现测距。测距时,智能终端向接入点发送请求,接入点在响应时启动一个Ping-Pong协议。发送至智能终端的ping称为精确时间测量数据包,返回Wifi接入点的pong是认可上述数据包数据。智能终端和接入点都记录信号的离开和到达时间,但智能终端要计算总体的往返时间需要所有的4个时间数据。因此,Wifi接入点再次向智能终端发送一个数据包,这个数据包包含了Wifi接入点记录的时间信息。智能终端根据4个时间数据计算出信号的往返时间,再乘以光速就可求得距离。执行上述测距过程次数越多,测距的精度越高。一般情况下,需要8次,这样系统可计算距离平均值和误差。在获得距离数据后,就可以利用类似于GPS单点定位的方法,根据3个以上独立的接入点的距离数据采用最小二乘法计算得到智能终端的位置。
目前,Wifi RTT技术存在一些问题。测量得到的距离会有固定的误差,有时能达半米;还会存在多路径效应,使测量的距离变长。这些问题可采用天线分集技术解决。
Wifi RTT定位需要Wifi接入点支持IEEE 802.11mc协议。2018年底Google Wifi开始默认支持RTT定位。韩国也开始了支持RTT Wifi的大规模建设。
1.2 RTT定位實现
WifiRttManager类提供了实现RTT定位的主要API。实现RTT定位时,首先判断智能终端是否支持Wifi RTT定位,应利用getPackageManager.hasSystemFeature(PackageManager.FEATURE_WIFI_RTT)方法判断;再利用WifiManager.startScan方法扫描周围的Wifi接入点;然后将扫描结果添加到RangingRequest.Builder构建RangingRequest实例。此时就可调用WifiRttManager.startRanging方法进行测距,RangingResultCallback参数返回测距结果,如图1所示。
2 GPS原始观测量[1-2]
谷歌自Android操作系统自7.0版本开始开放了访问GNSS原始数据的API。GNSS原始观测量可通过GnssClock和GnssMeasurement类来获取,共28种,详见表1。
在使用智能终端获取载波相位数据时,需将周期性定位(cycle duty)模式关闭。当利用智能终端导航时,位置点会连续移动,用户会认为GPS在连续工作。实际上为了节省电量,在一秒钟时间内GPS打开几分之一秒,然后其他时间关闭,如此循环。GPS采用周期性定位的工作方式。在利用智能终端进行载波相位测量时,要连续、不间断地跟踪载波相位信号,需将周期性定位模式关闭。自Android 9.0开始为开发者提供了有关API,由开发者选择是否关闭周期性定位。
2.1 GPS原始观测数据获取
要获取GNSS原始测量数据,需调用LocationManager的registerGnssMeasurementsCallback方法注册类型为GnssMeasurementsEvent.Callback的GPS测量回调函数。开发者需重写onGnssMeasurementsReceived方法,获取GNSS原始观测数据。
2.2 伪距计算
伪距是GPS定位中最重要的基本参数之一。为了缩短首次定位时间,智能终端在TOW(GPS周时)未解码前大量使用GNSS测量值,这些测量值在传统GNSS定位中认为是无效的。因此,智能终端并未显式提供伪距值,需根据伪距定义计算。
伪距ρ=c×(tAu-tTs)
上式中c表示光速,tAu表示用户接收机测量的导航信号到达时间;tTs表示未改正的卫星信号发射时间。
卫星信号发射时间tTs可通过GnssMeasurement.getReceivedSvTimeNanos方法获得,该值是相对于当前GPS周的周时。
GNSS接收机测量的卫星信号到达时间tAu计算方法如下:
tAu=tmesurement-(tfullbias+tbias)-tweeknumbernanos
上式中tAu表示卫星信号到达GNSS接收机的GPS周时;tmesurement是GNSS接收机测量时刻,tmesurement=TimeOffsetNanos+TimeNanos;tfullbias是接收机时钟相对于GPS时间整纳秒偏差,值为FullBiasNanos;tbias接收机时钟相对于GPS时间的亚纳秒偏差,值为BiasNanos;tmesurement-(tfullbias+tbias)是测量时刻的GPS时间,起算点为1980年1月6日UTC 0时;tweeknumbernanos表示当前GPS周起算点,值为604 800×109×floor(FullBiasNanos×10-9/604 800)。
2.3 基于原始觀测数据的高精度定位
开发者可利用Android移动终端输出的GNSS原始观测数据实现精密单点定位(PPP)、伪距差分、实时动态载波相位差分测量(RTK)等高精度定位。法国航天局基于Android智能终端开发了具有精密单点定位功能的App,定位精度达到了分米级;《基于Android智能移动终端的高精度差分软件设计》[3]在Android智能移动终端开发了高精度动态定位软件,软件基于原始测量值,利用RTK参考基站的差分信息实现了RTK定位,定位精度在2 m以内。
3 结论
本文总结了近年来Android系统RTT、GPS高精度定位技术原理及实现。目前,Android定位服务无论是室内还是在室外,定位精度均可达到1m级,较之前定位精度有了大幅提高,将在智能交通、社交网络、虚拟网络等领域得到广泛应用。
参考文献
[1] how to achive 1-meter accuracy in android. Frank Van Diggelen. GPS World,2018.
[2] Precise Positioning Using Raw GPS Measurements from Android Smartphones. Simon Banville.GPS Word,2016.
[3] 基于Android智能移动终端的高精度差分软件设计.杨春媚等.电脑知识与技术,2018,Vol(14):100-103.
作者简介:
邢伟坡,硕士研究生,从事海洋测绘研究,18920280537