502. Google Smartphone Decimeter Challenge 2022 | smartphone-decimeter-2022
首先,感谢主办方组织这次比赛。这是我参加过的最需要耐心的比赛之一,因为有很多缺失的数据,并且需要大量的领域知识。我向所有参加这次比赛的选手表示敬意。
以下是我的简要解决方案:
我认为在本次比赛中获得金牌的关键点有以下两点:
这两点是由 @taroz1461 在讨论区中提到的。除了这两点之外,我的解决方案通过集成在各种设置下计算的结果提高了分数。
我的解决方案流程如下:
我的方法基于一些公开的 Notebook,属于基础方法。
我使用了公开的 RTKLIB 和 RTKLIB-py 来通过基站观测值修正伪距。(我想自己实现代码,但我没有足够的知识和时间。如果有好的文献或代码参考,请告诉我。)
RTKLIB 的输出已经应用了卡尔曼平滑,但其速度估算精度似乎低于步骤2中使用 ADR 的结果。因此,我在步骤3中使用 ADR 速度估算值对 RTKLIB 的输出(即经基站修正的位置)进行了重新平滑。此外,我在多种条件下计算了位置,例如卫星仰角的阈值,并将结果进行了集成。由于 RTKlib 和 RTKLib-py 使用不同的卫星类型,两者的结果都被用于集成。
基于公开代码 carrier-smoothing-robust-wls-kalman-smoother,我通过加权最小二乘法直接从 ADR 估算速度。正如上一届比赛的第一名解决方案所述,其精度高于基于多普勒频移的结果。当 ADR 缺失时,使用从多普勒频移计算的速度。
ADR 数据有许多缺失点。特别是由于缺失经常发生在突然加速和减速时,插值可能很困难,并且会在该点周围产生位置误差。因此,我调整了参数以尽可能减少缺失。例如,将卫星选择的仰角阈值设定得更低。此外,我在选择卫星时忽略了“ADR State”。这些设置可能会因多径效应或周跳而恶化分数,但我的本地验证分数和 LB 分数都得到了提高。虽然未经证实,但调整与位置估算分离的速度估算参数可能也提高了分数。
位置平滑是通过两种方法根据上述估算的位置和速度计算得出的。卡尔曼平滑基于公开代码 carrier-smoothing-robust-wls-kalman-smoother。代价最小化基于上一届比赛的第五名解决方案。
这些方法在分数上没有很大差异,但结果的集成提高了分数。此外,在每个部分中,通过改变参数(如卡尔曼滤波器的更新条件)来采用集成结果。
@taroz1461, @saitodevel01, @timeverett
感谢你们分享伟大的想法和代码。