Android NDK开发详解传感器之GNSS 原始测量数据

Android 框架在多款 Android 设备上支持获取 GNSS 原始测量数据。
注意:Google 已经发布了 GNSS Analysis 应用的 3.0.3.0 版。如需了解详情,请参阅 GNSS Analysis 应用 v3.0.3.0 版本说明。

本文列出了支持 GNSS 原始测量数据的 Android 设备,以及用于记录和分析 GNSS 数据的工具。您可以在 GitHub 上的 GPS 测量工具代码库中找到这些工具,其中包括 GNSS 日志记录器 APK、适用于 Linux 、Windows、macOS 的 GNSS Analysis 应用及安装和用户手册。
注意:有些版本的 Linux 存在 MATLAB 2018 方面的全局性问题。如果您在 Linux 计算机上启动应用时遇到问题,请参阅这篇 MATLAB 文章,了解如何解决此问题。

原始设备制造商 (OEM)、开发者和研究人员可以利用本页中的工具来测试新的手机设计、验证功能、开发新算法、评估对 GNSS 系统实现的改进以及构建增值应用。

SUPL 客户端代码示例

注意:Google 提供了可用于获取实时星历的开源 SUPL 客户端代码示例。

Suplclient 是访问 supl.google.com 以获取实时星历的代码示例。SuplTester 类提供了关于如何使用 SUPL 客户端项目的示例。SuplTester 会设置 SUPL TCP 连接规范,然后在指定的经纬度发送 LPP SUPL 请求并输出 SUPL 服务器响应。

支持 GNSS 原始测量数据的 Android 设备

要想获取 GNSS 原始测量数据输出,您需确保设备能够捕获此类数据。大多数在 2016 年或之后生产并且搭载 Android 7.0 或更高版本的设备都可以提供 GNSS 数据。

根据设备的不同,GNSS 原始测量数据可以包含以下全部或部分数据:

伪距和伪距率。
导航消息。
累计变化量或载波。
硬件 (HW) 时钟。

下表列出了支持 GNSS 原始测量数据的设备及其提供的数据。这不是一个完整的列表。若要确定特定的设备是否支持 GNSS 原始测量数据,请联系制造商。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1 Exynos,EMEA 设备,型号:G960F 或 G965F
2 Exynos,EMEA 设备,型号:G950F 或 G955F
3 QCOM,美国设备,型号:G950U 或 G955U
4 仅当 GPS 位置可用时才提供原始测量数据。
5 无工作周期。仅适用于非移动网络版 Nexus 9。

如需详细了解设备提供的数据,请参阅全球卫星导航系统。

记录原始测量数据

您可以使用 Android Studio 构建一个应用来捕获 GNSS 原始测量数据并将其记录到一个文件中。GPS 测量工具项目中包含 GNSS 日志记录器,这是一个展示如何记录与 Android 位置相关的数据(包括 GNSS 原始测量数据)的应用示例。

下载 GNSS 日志记录器 APK,将该示例应用安装到您的设备中。

要通过该示例应用获取 GNSS 输出,您的设备必须支持 GNSS 原始测量数据。如需了解详情,请参阅支持 GNSS 原始测量数据的 Android 设备。

使用 GNSS 日志记录器捕获 GNSS 日志后,您可以将设备中的日志文件复制到计算机上,以便进行进一步分析。在 GNSS 日志记录器中,您可以通过电子邮件将这些文件发送给自己,也可以将它们保存到 Google 云端硬盘。您也可以使用设备上的文件管理应用保存文件,或者使用 Android 调试桥 (ADB),如将文件复制到设备/从设备复制文件中所述。

要浏览源代码示例,请查看 GitHub 上的 GPS 测量工具代码库中的 GNSSLogger 文件夹。

分析原始测量数据

GNSS Analysis 应用会读取 GNSS 日志记录器收集的 GPS/GNSS 原始测量数据,并使用这些数据来分析 GNSS 接收器的行为,如图 1 所示。

您可以下载适用于 Linux、Windows 和 macOS 系统的应用,或者下载安装和用户手册。

GNSS 日志记录器和 GNSS Analysis
在这里插入图片描述

图 1. GNSS 日志记录器收集可供 GNSS Analysis 使用的测量数据。

GNSS Analysis 应用是基于 MATLAB 构建的,但您无需为了运行该应用而安装 MATLAB。该应用已被编译为可执行文件,该可执行文件会安装 MATLAB 运行时的副本。

GNSS Analysis 控制台

您可以通过 GNSS Analysis 控制台(如图 2 中所示)管理诸如以下的应用功能:

选择显示哪些卫星。
控制用于计算测量数据误差的参考位置、速度和时间 (PVT)。
生成分析报告。
定义开始到结束的数据测量时间窗口。

GNSS Analysis 控制台
在这里插入图片描述

图 2. GNSS Analysis 控制台

GNSS Analysis 互动图

GNSS Analysis 应用提供分为三列(射频 (RF)、时钟和测量数据)显示的互动图,如图 3 所示。
在这里插入图片描述

GNSS Analysis 互动图

图 3. 显示互动图的 GNSS Analysis 应用。

RF 列显示以下数据:

每个卫星群中信号最强的 4 颗卫星。
每颗卫星的载波噪声密度比 (C/No) 时间图。
卫星分布天空图。

时钟列显示以下数据:

伪距。

接收器时钟的偏移频率,该频率是使用以下参考位置之一计算的:
    自动计算的平均位置。
    用户输入的纬度、经度和海拔。
    包含实际参考 PVT 的美国国家海洋电子协会 (NMEA) 文件。

    注意:使用原始测量数据的一个主要好处,就是您能够以不低于十亿分之一 (ppb) 的精确度观察接收器时钟的行为。在构建设备时考虑这一点非常重要,因为参考振荡器附近的任何热源都可能导致时钟误差率迅速上升。

在接收器重置主振荡器的占空比时用于保持时间的备用时钟的偏移量。

测量数据列显示以下数据:

从原始伪距获得的加权最小二乘法位置结果。加权是使用所报告的每个测量数据的不确定度来计算的,这是原始测量数据 API 规范的一部分。
每次测量的每个伪距的误差。

每次测量的每个伪距率的误差。

    注意:原始测量数据的一个主要好处,就是您可以分析每次测量的误差,从而深入了解信号环境和接收器行为。

GNSS Analysis 测试报告

GNSS Analysis 可生成如图 4 所示的测试报告,用于评估 API 实现、收到的信号、时钟行为和测量数据准确度。对于每种情况,应用都会将测量结果与已知基准进行对比,来报告接收器是否通过了测试。该测试报告对设备制造商非常有用,他们可以在新设备的设计和实现过程中以该报告为参考。要生成测试报告,请点击 Make Report。

GNSS Analysis 测试报告
在这里插入图片描述

图 4. GNSS Analysis 测试报告

如图 5 所示,Compare 标签页提供了几个 GNSS 日志文件中的 C/No 数据的并行比较,这在比较多个设备的 RF 表现时非常有用。

C/No 数据的并行比较
在这里插入图片描述

图 5. 多个日志文件中的 C/No 数据的并行比较

对源代码感兴趣?GPS 测量工具项目提供了一个开源 MATLAB 示例,您可借助该示例利用 GPS 卫星群信号执行以下操作:

读取通过 GNSS 日志记录器示例应用捕获的数据。
计算并以可视方式呈现伪距。
计算加权最小二乘法位置和速度。
查看和分析载波相位。

GNSS Analysis 应用 v3.0.3.0 版本说明

GNSS Analysis 应用版本 3.0.3.0 包含以下更新:

添加了以下图表:
    基于加权最小二乘法 PVT 的卡尔曼滤波位置
    基于 ADR(载波相位)的加权最小二乘法相对位置
    ADR(载波相位)单差残差
添加了刷新位置以根据所选的卫星重新生成位置图。
添加了截止高度角控制。
优化了星历文件的下载,在 Matlab 运行时内对所有 BKG *.gz 压缩文件使用原生解压。
添加了设备位置作为参考 PVT 的选项。
添加了 CustomDataFilter.m 功能,用于对任何 # Raw 标头值进行过滤。

提供反馈

我们希望改进 Android 上的 GNSS 支持。如果您在 Android 对 GNSS 的支持方面发现任何问题,请通过 GNSS 问题跟踪器告诉我们。在提交您的问题之前,请先检查问题是否已在常见问题解答中解决。

如果您使用过 GNSS Analysis 工具,请通过回答一个简短的调查来向我们提供反馈。如果您有其他问题或需要获得支持,请参阅开发者支持资源。

您可以在 GNSS Analysis 工具常见问题解答中找到常见问题的解答。

本页面上的内容和代码示例受内容许可部分所述许可的限制。Java 和 OpenJDK 是 Oracle 和/或其关联公司的注册商标。

最后更新时间 (UTC):2019-12-27。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
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芯片,因此不是所有设备都支持此功能。另外,由于该功能涉及到敏感数据,因此需要向用户请求权限。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五一编程

程序之路有我与你同行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值