【GNSS】 Android GNSS数据采集入门:GNSSLogger完整配置指南

Android GNSS数据采集入门:GNSSLogger完整配置指南

本文内容基于以下SPIE会议论文:

Zixia Shang, “Off-line Data Processing Based on GNSSLOGGER, GNSS System Positioning Data Quality and Accuracy Analysis,” Fourth International Conference on Geology, Mapping, and Remote Sensing (ICGMRS 2023), Wuhan, China, 14-16 April 2023. Proceedings of SPIE, Vol. 12978. DOI: 10.1117/12.3019575

该论文收录于SPIE数字图书馆,分类号:TB96-53,馆藏号:019638/TB96-53/6:V.12978。论文实验数据已上传至GitHub:https://github.com/ZixiaShang/GNSSLOGGER-Data-8

在这里插入图片描述

一、为什么要用GNSSLogger?

全球导航卫星系统(GNSS)已经发展成为多系统同时运行的格局,包括美国的GPS、俄罗斯的GLONASS、中国的北斗卫星导航系统(BDS)以及欧洲的Galileo。目前,全球共有70-80颗可供GNSS使用的在轨卫星。对于导航和定位来说,数据质量至关重要,它直接决定了GNSS卫星导航定位的精度和可靠性。然而,数据质量会受到外部观测环境、接收器质量以及卫星健康状况等多重因素的影响。

自2016年Google I/O大会宣布Android系统支持获取原始GNSS观测数据以来,移动端高精度定位研究迎来了爆发式增长。GNSSLogger正是Google官方推出的数据采集工具,它可以帮助用户获取原始GNSS测量值GnssStatusNMEA数据导航消息以及RINEX日志

GNSSLogger的核心功能:

  • 记录原始GNSS测量数据(Raw GNSS Measurements)
  • 记录GnssStatus(卫星状态信息)
  • 记录NMEA语句(标准导航数据格式)
  • 记录导航消息(Navigation Messages)
  • 记录传感器数据(加速度计、陀螺仪等)
  • 生成RINEX格式日志

GNSSLogger可用于手机和手表,是GNSS研究者和开发者最基础、最权威的数据采集工具。

二、设备兼容性:你的手机能用吗?

2.1 Android版本要求

根据Android官方文档:

Android版本 原始GNSS测量支持
Android 10(API 29)及以上 必须支持
Android 9(API 28)及以下 硬件年份2016年或更新的设备必须支持

目前,超过90%的现有Android手机都具有原始测量数据能力

2.2 支持的测量字段

不同设备的GNSS芯片组不同,支持的字段也有所差异:

  • 伪距和伪距率(Pseudorange and pseudorange rate)
  • 导航消息(Navigation messages)
  • 自动增益控制器(AGC)值
  • 累计变化量(ADR)/ 载波相位
  • 多频段支持:Pixel、Motorola、Samsung、Xiaomi、OnePlus等厂商的大多数旗舰手机已支持L1和L5频段

⚠️ 特别注意:如果您的设备始终报告可用ADR为0,即使在停车状态下且已停用占空比也是如此,则表明您的设备不支持可用于高精度GNSS的载波相位测量。

三、GNSSLogger的安装方式

方式一:从Google Play安装(推荐)

这是最简单快捷的方式。直接在Google Play搜索 “GnssLogger” 即可安装。

应用由Google官方开发,支持:

  • 控制各种数据记录,如原始GNSS测量、GnssStatus、NMEA、导航消息等
  • 将GNSS和传感器数据记录为CSV和RINEX文件
方式二:从源码构建(适用于开发者)

如果你需要修改源码或进行二次开发,可以从GitHub获取源码。

详细步骤

  1. 安装Android Studio(如果尚未安装)
  2. 克隆项目代码

    git clone https://github.com/google/gps-measurement-tools.git
    
  3. 打开项目:在Android Studio中,选择File -> Open,定位到下载的仓库中的GNSSLogger目录
  4. 等待Gradle同步完成
  5. 构建项目:点击顶部面板的Build选项卡,选择Rebuild Project
  6. 连接手机:确保手机已开启开发者模式和USB调试,并显示在Android Studio的设备列表中
  7. 运行应用:点击Run选项卡 -> Run App

四、GNSSLogger的配置与使用

4.1 首页(Home Tab)配置

打开GNSSLogger应用后,在“Home”标签页中可以看到多种数据记录开关:

开关选项 说明 论文中的使用
Fix 记录定位解算结果(含FLP/GPS/NLP) ✅ 开启
Raw 记录原始GNSS测量值(伪距、载波相位等) ✅ 开启
NMEA 记录NMEA语句 按需开启
Rinex 记录RINEX格式数据 按需开启
GnssStatus 记录卫星状态信息 按需开启
Sensors 记录加速度计、陀螺仪等传感器数据 按需开启

论文中的配置:论文《Off-line Data Processing Based on GNSSLOGGER》使用GNSSLogger v3.0.5.6进行数据采集。

4.2 Settings Tab 关键设置

在开始记录之前,建议进行以下设置:

  • 开启“Screen Always ON” :防止屏幕熄灭后应用被系统休眠,导致数据记录中断
  • 开启“Location”权限:这是获取GNSS数据的前提
  • 开启“Measurement”开关:启用GNSS测量功能
4.3 开始记录数据

Step 1:开启权限
在手机设置中为GNSSLogger授予位置权限

Step 2:等待卫星可用
在Settings Tab中开启“Location”和“Measurement”开关后,等待显示 “GNSS Measurement are Available” 。该提示在4颗以上卫星可用时才会显示。

Step 3:开始记录
点击 “Start Log” 按钮,应用开始记录数据。论文中的实验在晴朗天气的下午进行数据采集,以尽量减少“雨衰”对卫星信号的影响。

Step 4:停止并导出
完成数据采集后,点击 “Stop Log” 停止记录。

4.4 日志文件位置

日志文件保存在手机的内部存储中:

/Android/data/com.google.android.apps.location.gps.gnsslogger/files/gnss_log/

如果需要将文件导出到电脑进行分析,可以通过USB连接手机后复制该目录下的文件。

五、日志文件格式详解

5.1 行前缀(Row Prefixes)

GNSSLogger输出的每一行都以特定的字符串前缀标识数据类型:

前缀 数据类型 说明
Raw 原始GNSS测量数据 伪距、载波相位、多普勒、C/No等
Fix 定位解算结果 经纬度、高度、速度、精度等
Nav 导航消息 卫星导航电文
NMEA NMEA语句 标准导航数据格式
Accel / UncalAccel 加速度计数据 m/s²
Gyro / UncalGyro 陀螺仪数据 rad/s
5.2 Fix 行格式(重点)

Fix行是后续MATLAB数据分析中最常处理的数据类型,包含17个CSV字段:

Fix,Provider,Lat,Lon,Alt,Speed,Accuracy,Bearing,UnixTimeMs,...

各字段含义:

列号 字段 说明
1 Fix 固定标识符
2 Provider 定位提供者:FLP / GPS / NLP
3 Lat 纬度(度)
4 Lon 经度(度)
5 Alt 海拔高度(米)
6 Speed 速度(米/秒)
7 Accuracy 定位精度(米)

三种Provider的区别

Provider 全称 数据来源
GPS GNSS Location Provider 纯GNSS卫星定位
NLP Network Location Provider 基站和Wi-Fi接入点定位
FLP Fused Location Provider 多GNSS数据 + NLP融合定位

论文研究表明,融合系统(FLP)的稳定性、刚性和精度远优于单一GNSS系统(GPS)

5.3 Raw 行格式

Raw行记录的是最原始的GNSS观测数据:

  • 伪距(Pseudorange)
  • 载波相位(Carrier Phase / ADR)
  • 多普勒频移(Doppler)
  • 载波噪声密度(C/No)

这些数据是进行高精度定位分析的基础。

六、GNSSLogger v3.1 测量屏幕详解(进阶)

借助GNSSLogger v3.1,用户可以在测量屏幕上实时查看和分析原始GNSS数据。

6.1 顶部卡片:GNSS时钟与硬件状态

左上角:显示GNSS时钟数据(对应GnssClock类)

  • 当前GNSS时间
  • 时钟偏差等信息

右上角:显示GNSS硬件(HW)中断次数(来自GnssClock.getHardwareClockDiscontinuityCount()

  • 当此计数器递增时,表示GNSS信号的连续观测中断
  • 这有助于判断是否启用了占空比周期性调制(一种省电模式)
  • 占空比调制开启时,GNSS信号接收会周期性中断,影响高精度定位
6.2 中部卡片:测量结果汇总

“# 有效的测量” :测量结果被视为有效需要满足的条件:

  • 必须在GnssMeasurement.getState()中设置STATE_CODE_LOCK(码锁定)
  • 并且设置STATE_TOW_KNOWN(周内时已知)或STATE_TOW_DECODED(周内时已解码)

“# 可用的累积差值范围(ADR)” :ADR(载波相位)被视为可用于定位的条件:

  • 必须设置ADR_STATE_VALID标志
  • 不能设置ADR_STATE_RESET(重置)或ADR_STATE_CYCLE_SLIP(周跳)
6.3 底部卡片:单个卫星测量值

底部卡片中,每一行代表一个单独的GnssMeasurement(一颗卫星的一个信号):

代码类型列:使用RINEX 4.01中定义的代码类型显示GNSS信号的确切类型

  • 例如,GPS L1信号的代码类型为“C”,表示L1 C/A码
  • GPS L5信号将具有“Q”代码类型

Rx SV Time (ns)列:如果测量结果有效,文本显示为绿色

状态列:显示GnssMeasurement.getState()字段中设置的按位标志的人类可读版本,有效时也显示为绿色

七、数据采集实操建议

基于论文的实践经验,以下是数据采集的关键建议:

建议 说明
选择晴朗天气 减少“雨衰”对卫星信号的影响
选择开阔环境 避免建筑物群遮挡卫星信号
保持屏幕常亮 在Settings中开启“Screen Always ON”
保证设备电量 长时间记录会消耗较多电量
固定设备位置 如需高精度对比,建议使用三脚架固定手机
多设备对比 不同厂商的GNSS芯片性能差异显著

论文中使用的实验设备:

  • Xiaomi 22041216C
  • Xiaomi M2007J17C
  • HUAWEI DBY-W09

八、常见问题与解决方案

问题 可能原因 解决方案
手机不支持原始GNSS Android版本过低或硬件太旧 检查Android版本≥7.0,确认硬件年份≥2016
日志文件为空 未开启Location或Measurement权限 检查权限设置,等待“GNSS Measurement are Available”提示
ADR始终为0 设备不支持载波相位测量 检查设备是否在支持列表中
信号质量差 处于建筑物密集区域 选择开阔环境采集数据
不同设备结果差异大 GNSS芯片组不同 了解设备具体的GNSS能力

九、下一步预告

本文是 “GNSS数据采集、处理与可视化全流程” 系列的第一篇。在后续文章中,我们将:

  • 第二篇:使用GNSSAnalysis和MATLAB对采集的数据进行质量分析
  • 第三篇:使用MATLAB读取和筛选GNSSLogger的Fix数据
  • 第四篇:基于速度进行分段彩色轨迹绘制
  • 第五篇:对比单系统与多系统融合的定位精度
  • 第六篇全流程复盘与工程化建议

十、参考资料

  1. GNSS 原始测量数据 | Android Developers
  2. 使用 GnssLogger 分析原始测量数据 | Android Developers
  3. GPS Measurement Tools GitHub仓库
  4. 论文实验数据:https://github.com/ZixiaShang/GNSSLOGGER-Data-8

📌 系列文章索引

  • 第一篇:Android GNSS数据采集入门:GNSSLogger完整配置指南(本文)
  • 第二篇:GNSS数据解析与质量分析:从GNSSAnalysis到MATLAB
  • 第三篇:MATLAB读取GNSSLogger数据:Fix记录筛选与提取实战
  • 第四篇:MATLAB地理轨迹可视化:基于速度的分段彩色地图绘制
  • 第五篇:多GNSS系统定位对比:单系统与融合系统精度分析
  • 第六篇:GNSS数据处理全流程复盘:从手机到地图的完整链路
© 版权声明

相关文章