502. Google Smartphone Decimeter Challenge 2022 | smartphone-decimeter-2022
感谢主办方举办这场精彩的比赛。
在比赛开始时,我曾担心这场比赛不会吸引很多 Kagglers,因为在去年的比赛中,机器学习对 GNSS 数据的效果并不明显,但令我惊讶的是,最终比赛的水平非常高。
我想在这里分享我的解决方案:
我参考了 @taroz1461 的 去年比赛的第一名方案,并结合了 我作为第5名方案的思路。
该方案的关键点是将 GNSS 观测值(伪距、伪距率/多普勒、ADR)的积分和轨迹平滑作为一个单一的优化问题进行建模和求解。这带来了以下优势:由于卫星星座导致的卫星定位精度在轨迹平滑中被自动考虑,即使卫星数量暂时少于所需数量,卫星定位也能继续进行。此外,通过向所有 GNSS 观测值添加可切换约束,卫星定位变得更加稳健。
优化是通过编写评估函数和使用 TensorFlow(非神经网络)处理等式约束的自定义求解器完成的。深度学习框架的灵活性有助于快速测试想法,但在本次比赛中,大多数想法并没有对提高精度做出贡献。最终,优化部分相当简单。

原始 GNSS 日志 (supplemental/gnss_log.txt):
device_gnss.csv 中的 SignalType、卫星位置等列存在空行。因此我使用了 gnss_log.txt 并向获取的数据框中添加了列。
基站伪距观测值:
我使用了 UNAVCO 的15秒间隔观测数据,计算了基站伪距与卫星-基站距离之间的残差。虽然在相对定位中不需要校正电离层和对流层延迟,但在进行多基站集成时,我也使用了长基线长度的基站数据,因此我对基站和智能手机都进行了电离层和对流层延迟校正。
精密星历:
我使用了来自 GNSS IGS MGEX Products 的卫星轨道数据来获取卫星的位置和速度。虽然在相对定位中卫星位置的精度不是那么关键,但从精密星历中插值位置数据比从导航电文中计算卫星轨道更容易。
基站位置数据:
我从 Nevada Geodetic Laboratory 下载了基站位置的时间序列数据,并使用了测试数据期间(2021/4/28 - 2022/4/25)的平均值作为基站位置。
电离层延迟数据:
它用于补偿基站位置和智能手机位置之间电离层延迟的差异。由于电离层延迟大部分应通过相对定位消除,使用电离层延迟的外部数据对最终精度的贡献应该很小。
device_gnss.csv 中的 WlsPosition:
我使用主办方提供的基线位置的平滑结果来预计算 Sagnac 效应、电离层延迟和对流层延迟。
IMU 传感器数据:
我在本次比赛中完全没有使用 IMU 传感器数据,因为传感器数据嘈杂且不规则。在去年的比赛中,我在传感器数据的信号处理上做了很多工作,但这对我分数的提高贡献不大。
真值数据:
由于我没有使用机器学习,我仅使用真值数据来检查预测结果的准确性。
智能手机的位置、速度、加速度和加加速度(加速度的导数)在 ECEF 坐标系中表示,并假设加加速度是分段恒定的,创建了离散状态方程。
<img src="https