Android手机GNSS原始观测量

Android手机GNSS原始观测值

随着谷歌开放了Android手机GNSS原始观测值数据获取接口,使得测绘领域中高精数据处理手段如(RTD/RTK/PPP)在智能手机的应用成为了可能,有望进一步提高智能手机的定位性能,使得基于位置服务的体验更好。这篇文章主要对Android手机提供的原始观测值进行简要的介绍,并对它们的使用进行讨论。

手机GNSS原始观测值

我们可以通过Android提供的API接口,直接或间接计算获取所需的GNSS原始观测值。主要包括以下几类信息:
(1)时间信息:信号的接收时刻、发射时刻以及它们的不确定度,还有跳秒信息等。
(2)观测量:伪距(由接收时刻和发射时间计算得到)、多普勒信息(由伪距变化率计算获取)、载波相位(由ADR转换得到)。
(3)卫星信息:卫星ID、卫星系统、信号频率、信号类型等。
(4)状态信息:载噪比、周跳信息、多路径指示器、硬件钟的不连续性等。
这些信息具体的获取接口和描述在Android API文档中都有详细的介绍:https://www.apiref.com/android-zh/android/location/GnssClock.html
下图是Android GNSS API相关的接口:
Android GNSS API

手机中三类原始观测值的计算和生成

1. 手机伪距观测值的生成

通过计算信号接收和发射时间,来获得信号的传播时延,再乘上传播速度(这里传播介质是电磁波,速度为光速)。
(1)信号接收时间的计算:
首先是每个卫星系统接收时间的计算,由于信号发射时间是以周内秒的形式来表示,所以信号接收时刻也用相同的形式表达。
tRx=TimeNanos+TimeOffsetNanos-(FullBiasNanos+BiasNanos)-weekNumberNanos [ns]
其中第一部分 TimeNanos+TimeOffsetNanos 表示接收机在接收信号时的内部时钟,FullBiasNanos+BiasNanos 表示与GPS时起始时刻的偏差,weekNumberNanos 表示GPS时从起始时刻到目前整周的纳秒数。因此整个tRx是以GPS时作为时间基准的,在使用其他GNSS系统时,需要考虑时间系统的差异。
(2)信号发射时间:
可直接由Android API接口获得
tTx=ReceivedSvTimeNanos [ns]
相应的接收时间是每个卫星系统自己的周内秒时间,因此在不同系统使用时,需要将它的时间系统与tRx保持一致。同时需要考虑其跟踪状态是否valid。例如卫星TOW是否被decode,或者是否CODE_LOCK。
对于不同卫星系统的时间计算:
在这里插入图片描述
最后再计算得到伪距观测值:
在这里插入图片描述


2. 载波相位观测值生成

通过Android API中的累计距离计算得到:
在这里插入图片描述使用时需要注意AccumulatesDeltaRangeMeters的状态,只有的valid的观测值应该被计算和使用。
在这里插入图片描述

3.多普勒观测值

可以通过Android api 提供的伪距变化率中计算得到:
在这里插入图片描述
参考文档:https://galileognss.eu/wp-content/uploads/2018/05/Using-GNSS-Raw-Measurements-on-Android-devices.pdf

讨论

有了手机的伪距、载波相位和多普勒观测信息,我们完全可以使用传统的高精定位算法对其进行处理,但是由于手机自身硬件设备的原因,导致观测值质量较差,需要增加更多的质量控制策略。
1.随机模型的设置。区别于测量型接收机,我们需要对观测值噪声进行重新设置对不同机型做好适配。另外许多文献都表明基于载噪比模型的权重设置在手机上的性能要优于高度角模型,此外也可以综合手机输出的各类型信息的不确定度来作为方差的判定依据。
2.粗差的剔除。手机的硬件设备以及其工作环境,常会导致其观测值出现大量的粗差,需要综合考虑各类粗差探测手段,进行抗差处理。
3.周跳的处理。周跳探测是处理模糊度固定中必须的操作,由于手机大多以单频数据为主,常规的双频探测周跳方法有时并不适用,可以借助多普勒信息进行周跳的探测,也有文献在这方面做了一些工作。
4.钟跳。由于手机钟稳定性不高,有时会发生频繁的重置,可能会导致伪距整体出现大的粗差,甚至各频点的钟差都不一致,这时有必要考虑不同频点的钟差估计。

Android 12版本提供了通过GNSS原始观测API获取GPS原始观测的功能。你可以使用以下步骤来获取GPS原始观测: 1. 确保你的设备支持GNSS原始观测API。你可以在设备的设置中查找“GNSS原始观测”选项,如果找到了该选项,说明你的设备支持该API。 2. 在你的应用程序中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> ``` 3. 在你的应用程序中添加以下依赖项: ``` implementation 'com.android.support:support-v4:28.0.0' implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.google.android.gms:play-services-location:17.0.0' ``` 4. 创建一个LocationCallback对象来处理位置更新: ``` LocationCallback locationCallback = new LocationCallback() { @Override public void onLocationResult(LocationResult locationResult) { // 处理位置更新 } }; ``` 5. 创建LocationRequest对象以请求位置更新和GNSS原始观测: ``` LocationRequest locationRequest = new LocationRequest(); locationRequest.setInterval(1000); locationRequest.setFastestInterval(500); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); locationRequest.setNumUpdates(1); locationRequest.setWaitForAccurateLocation(true); locationRequest.setMinAccuracyMeters(10); locationRequest.setMinTime(5000); locationRequest.setMaxTime(10000); locationRequest.setBearingRequired(false); locationRequest.setSpeedRequired(false); locationRequest.setVerticalAccuracyMeters(10); locationRequest.setHorizontalAccuracyMeters(10); locationRequest.setPowerRequirement(LocationRequest.POWER_HIGH); locationRequest.setLocationPurpose(LocationRequest.PURPOSE_NAVIGATION); locationRequest.setNeedGnssMeasurement(true); ``` 6. 请求位置更新: ``` LocationServices.getFusedLocationProviderClient(context) .requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper()); ``` 7. 在onLocationResult回调方法中获取GNSS原始观测: ``` @Override public void onLocationResult(LocationResult locationResult) { if (locationResult == null) { return; } Location location = locationResult.getLastLocation(); if (location != null) { GnssMeasurement measurement = location.getExtras().getParcelable(Location.EXTRA_GNSS_MEASUREMENTS); if (measurement != null) { // 处理GNSS原始观测 } } } ``` 请注意,获取GNSS原始观测需要设备具有GNSS芯片,因此不是所有设备都支持此功能。另外,由于该功能涉及到敏感数据,因此需要向用户请求权限。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值