502. Google Smartphone Decimeter Challenge 2022 | smartphone-decimeter-2022
感谢所有的比赛组织者以及那些与我们这些正在学习GNSS的人分享知识的参赛者。谁能想到GPS定位竟然如此复杂?
首先是WLS解决方案,它在每个点使用L1优化来确定接收机时钟偏差,从而得出最佳的X、Y、Z ECEF坐标。我用一个更复杂的模型替换了其中的卡尔曼平滑器,具体如下:
模型共有9个状态量:(3) x,y,z 坐标,(3) x,y,z 方向的速度,(3) x,y,z 方向的加速度。
测量值是来自WLS算法的位置和速度(速度源自多普勒频移)。
测量噪声由WLS确定,源自 device_gnss 中的伪距和伪距速度的不确定性,并利用L1解的雅可比矩阵计算得出。我实现了卡尔曼平滑,这实际上是向前和向后运行卡尔曼滤波器并正确合并结果。参考依据是 Art Gelb 的《Applied Optimal Estimation》(应用最优估计)。我通过简单的试错法调整了过程噪声(Q)和用于剔除测量值的阈值(马氏距离)。我将上述的OFFSET解决方案加入其中,但随着我的解变好,偏移量似乎变小了,所以最后这可能没起太大作用。
我生成了RTKLIB解决方案,最初用它发现的 Q!=2 的坏点替换为我在第1步中的解决方案。因为我的第1步方案优于其他公开可用的方案,这个解决方案让我领先了其他所有第一次尝试RTKLIB的人(Public LB 2.593)。
我曾希望能够利用RTKLIB的基准站位置来改善单点定位,以便我能在其上运行我的卡尔曼平滑器,但一直没能成功实现。
我尝试使用RTKLIB的电离层和对流层校正函数,而不是 device_gnss 文件中的那些,但没有看到改善。
我意识到 device_gnss 的一些条目中基线预测和伪距是空白的,但RTKLIB却能进行预测。仔细观察后,似乎可以直接从时间数据生成伪距估计。因此,我利用RTKLIB的观测数据,通过WLS/卡尔曼平滑算法生成了2个新的解决方案。
然后我开发了一个合并算法,该算法采用带有权重W的多个解决方案并计算加权平均值,其中每个点的权重为W除以该点的方差估计。这里棘手的部分是正确处理NaN。这种方法允许我从RTKLIB解决方案中移除“坏”测量值以及其他我认为是异常值的点。通过微调方差估计,我发现了一些小的改进。
时间快不够用了,我通过简单搜索最佳权重,合并了4个解决方案:
(a) RTKLIB, 我自己的WLS/平滑解, 来自RTKLIB观测数据的WLS, 来自RTKLIB的卡尔曼平滑WLS。
最后,真的没时间也没思路了,我快速计算了一下我的解决方案与基本真值之间是否存在任何经纬度偏移。我发现了一个非常小的偏移并将其作为修正加入,这带来了大约0.04的提升。
我从未针对排行榜进行拟合。我所有的计算和改进都是在训练集上完成的。每次(几乎)我提交解决方案时,分数都有所提高,且提高幅度大致等于训练集上的提高幅度。我从未根据排行榜的反馈来选择参数或方法,我想从过拟合的角度保持“清白”。