MobileGNSS-SPP
An EKF-based SPP system optimized for smartphone
MobileGNSS-SPP 是一个基于 RTKLIB 的开源单点定位(SPP)项目,专门针对智能手机 GNSS 芯片进行了优化。虽然项目最初为特定 GNSS 芯片设计,但其优化思路具有通用性和启发性,可广泛应用于其他 GNSS 硬件。该项目不以算法或框架的先进性为核心,而是聚焦于工程化实现以及算法在多样化场景下的鲁棒性,因此可作为从开源代码到工程化方案的参考路线图。
核心特性
- 智能手机优化 GNSS 处理:针对低质量数据的移动设备,优化算法以提升定位精度。
- 多样场景鲁棒性:在开阔高速公路到复杂城市峡谷等多种环境中经过广泛测试。
- 全面测试框架:提供 Python 工具集,用于批量处理、精度评估和深入数据分析。
算法优化
项目对 RTKLIB 核心代码(主要在 rtklib_src/pntpos.c
文件)进行了多项改进,以提升定位精度和鲁棒性:
- M估计(抗差估计):采用迭代最小二乘法构建权阵 W,使用 Huber 核函数,并对大残差项进行截断处理以提高稳定性。
- 零速修正:优化静态或低速场景下的定位精度,适用于智能手机典型用例。
- SNR加权模型:对伪距和多普勒测量值均应用信噪比(SNR)加权,提升信号质量评估。
- 多路径误差补偿:基于芯片测试经验,补偿伪距残差中的多路径效应,增强复杂环境下的性能。
- 自适应 Q 矩阵:通过扩展卡尔曼滤波(EKF)预测速度与鲁棒加权最小二乘(RWLS)速度差值,动态调整 EKF 中速度协方差。
- 基于二次规划的代价最小化:采用二次规划优化方法,减少定位误差(该部分使用Python实现,仅针对后处理)。