【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。论文实验数据已上传至GitHubhttps://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测量值、GnssStatus、NMEA数据、导航消息以及RINEX日志。GNSSLogger的核心功能记录原始GNSS测量数据Raw GNSS Measurements记录GnssStatus卫星状态信息记录NMEA语句标准导航数据格式记录导航消息Navigation Messages记录传感器数据加速度计、陀螺仪等生成RINEX格式日志GNSSLogger可用于手机和手表是GNSS研究者和开发者最基础、最权威的数据采集工具。二、设备兼容性你的手机能用吗2.1 Android版本要求根据Android官方文档Android版本原始GNSS测量支持Android 10API 29及以上必须支持Android 9API 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获取源码。详细步骤安装Android Studio如果尚未安装克隆项目代码gitclone https://github.com/google/gps-measurement-tools.git打开项目在Android Studio中选择File - Open定位到下载的仓库中的GNSSLogger目录等待Gradle同步完成构建项目点击顶部面板的Build选项卡选择Rebuild Project连接手机确保手机已开启开发者模式和USB调试并显示在Android Studio的设备列表中运行应用点击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》使用GNSSLoggerv3.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 PrefixesGNSSLogger输出的每一行都以特定的字符串前缀标识数据类型前缀数据类型说明Raw原始GNSS测量数据伪距、载波相位、多普勒、C/No等Fix定位解算结果经纬度、高度、速度、精度等Nav导航消息卫星导航电文NMEANMEA语句标准导航数据格式Accel/UncalAccel加速度计数据m/s²Gyro/UncalGyro陀螺仪数据rad/s5.2 Fix 行格式重点Fix行是后续MATLAB数据分析中最常处理的数据类型包含17个CSV字段Fix,Provider,Lat,Lon,Alt,Speed,Accuracy,Bearing,UnixTimeMs,...各字段含义列号字段说明1Fix固定标识符2Provider定位提供者FLP/GPS/NLP3Lat纬度度4Lon经度度5Alt海拔高度米6Speed速度米/秒7Accuracy定位精度米三种Provider的区别Provider全称数据来源GPSGNSS Location Provider纯GNSS卫星定位NLPNetwork Location Provider基站和Wi-Fi接入点定位FLPFused 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 22041216CXiaomi M2007J17CHUAWEI DBY-W09八、常见问题与解决方案问题可能原因解决方案手机不支持原始GNSSAndroid版本过低或硬件太旧检查Android版本≥7.0确认硬件年份≥2016日志文件为空未开启Location或Measurement权限检查权限设置等待“GNSS Measurement are Available”提示ADR始终为0设备不支持载波相位测量检查设备是否在支持列表中信号质量差处于建筑物密集区域选择开阔环境采集数据不同设备结果差异大GNSS芯片组不同了解设备具体的GNSS能力九、下一步预告本文是“GNSS数据采集、处理与可视化全流程”系列的第一篇。在后续文章中我们将第二篇使用GNSSAnalysis和MATLAB对采集的数据进行质量分析第三篇使用MATLAB读取和筛选GNSSLogger的Fix数据第四篇基于速度进行分段彩色轨迹绘制第五篇对比单系统与多系统融合的定位精度第六篇全流程复盘与工程化建议十、参考资料GNSS 原始测量数据 | Android Developers使用 GnssLogger 分析原始测量数据 | Android DevelopersGPS Measurement Tools GitHub仓库论文实验数据https://github.com/ZixiaShang/GNSSLOGGER-Data-8 系列文章索引第一篇Android GNSS数据采集入门GNSSLogger完整配置指南本文第二篇GNSS数据解析与质量分析从GNSSAnalysis到MATLAB第三篇MATLAB读取GNSSLogger数据Fix记录筛选与提取实战第四篇MATLAB地理轨迹可视化基于速度的分段彩色地图绘制第五篇多GNSS系统定位对比单系统与融合系统精度分析第六篇GNSS数据处理全流程复盘从手机到地图的完整链路