返回列表

3rd Place Solution

502. Google Smartphone Decimeter Challenge 2022 | smartphone-decimeter-2022

开始: 2022-05-02 结束: 2022-07-29 自动驾驶感知 数据算法赛
第三名解决方案

第三名解决方案

作者:UEMU
发布时间:2022-08-02

首先,感谢主办方组织这次比赛。这是我参加过的最需要耐心的比赛之一,因为有很多缺失的数据,并且需要大量的领域知识。我向所有参加这次比赛的选手表示敬意。

以下是我的简要解决方案:

摘要

我认为在本次比赛中获得金牌的关键点有以下两点:

  • 直接根据 ADR(累积距离增量)估算速度。
  • 利用参考站观测值修正伪距偏差。

这两点是由 @taroz1461 在讨论区中提到的。除了这两点之外,我的解决方案通过集成在各种设置下计算的结果提高了分数。

我的解决方案流程如下:

  • 步骤1:使用 RTKLIB 从 GNSS 数据估算位置。
  • 步骤2:使用 WLS(加权最小二乘法)从 GNSS 数据中的 ADR 估算速度。
  • 步骤3:使用卡尔曼平滑和代价最小化进行位置平滑。

我的方法基于一些公开的 Notebook,属于基础方法。

1. 使用 RTKLib 从 GNSS 数据估算位置

我使用了公开的 RTKLIBRTKLIB-py 来通过基站观测值修正伪距。(我想自己实现代码,但我没有足够的知识和时间。如果有好的文献或代码参考,请告诉我。)

RTKLIB 的输出已经应用了卡尔曼平滑,但其速度估算精度似乎低于步骤2中使用 ADR 的结果。因此,我在步骤3中使用 ADR 速度估算值对 RTKLIB 的输出(即经基站修正的位置)进行了重新平滑。此外,我在多种条件下计算了位置,例如卫星仰角的阈值,并将结果进行了集成。由于 RTKlib 和 RTKLib-py 使用不同的卫星类型,两者的结果都被用于集成。

2. 使用 WLS 从 ADR 数据估算速度

基于公开代码 carrier-smoothing-robust-wls-kalman-smoother,我通过加权最小二乘法直接从 ADR 估算速度。正如上一届比赛的第一名解决方案所述,其精度高于基于多普勒频移的结果。当 ADR 缺失时,使用从多普勒频移计算的速度。

ADR 数据有许多缺失点。特别是由于缺失经常发生在突然加速和减速时,插值可能很困难,并且会在该点周围产生位置误差。因此,我调整了参数以尽可能减少缺失。例如,将卫星选择的仰角阈值设定得更低。此外,我在选择卫星时忽略了“ADR State”。这些设置可能会因多径效应或周跳而恶化分数,但我的本地验证分数和 LB 分数都得到了提高。虽然未经证实,但调整与位置估算分离的速度估算参数可能也提高了分数。

3. 使用卡尔曼平滑和代价最小化进行位置平滑

位置平滑是通过两种方法根据上述估算的位置和速度计算得出的。卡尔曼平滑基于公开代码 carrier-smoothing-robust-wls-kalman-smoother。代价最小化基于上一届比赛的第五名解决方案

这些方法在分数上没有很大差异,但结果的集成提高了分数。此外,在每个部分中,通过改变参数(如卡尔曼滤波器的更新条件)来采用集成结果。

致谢

@taroz1461, @saitodevel01, @timeverett
感谢你们分享伟大的想法和代码。

同比赛其他方案