返回列表

1st place solution

447. Google Smartphone Decimeter Challenge | google-smartphone-decimeter-challenge

开始: 2021-05-12 结束: 2021-08-04 自动驾驶感知 数据算法赛
第一名解决方案

第一名解决方案

作者: Taro
发布时间: 2021-08-06

首先,我要感谢所有参与这次比赛的人。这两个月过得非常愉快。

虽然我是 GNSS 领域的研究员,但这还是我第一次处理来自智能手机的原始 GNSS 数据。将智能手机的原始 GNSS 数据与用于无人机和移动机器人的商用 GNSS 接收器相比,我有以下几点印象:

  • 伪距噪声非常大,GNSS 观测质量不佳。
  • 存在大量数据缺失重复时间跳变等情况,非常复杂。

我意识到我平时接触的都是非常干净的 GNSS 数据……由于大量的路线和各种智能手机(还有很长的变量名……),这次比赛非常非常艰难。老实说,我不想再看智能手机上的 GNSS 数据了!😐

解决方案的关键点

  • 通过因子图优化技术对位置和速度进行全局优化。
  • 通过累积增量距离(ADR)进行速度约束。
  • 通过基站之间的差分伪距进行绝对位置约束。
  • 没有使用机器学习(或者说,由于时间限制,无法实现)。

输入数据

  • Phone_Gnsslog.txt
  • GNSS 基站的 RINEX 文件(我使用了来自这里的 Verizon 基站数据)。
  • 地面真值(仅限市中心区域)。

最后,我没有使用 Phone_derived.csv。Phone_derived.csv 文件中有一些数据缺失。我直接从 RINEX 导航文件计算了卫星的位置和速度。基准位置和 IMU 数据也没有使用。

因子图优化

因子图是一类图形模型,其中包含变量和因子。变量代表问题中的未知量,因子代表变量子集上的函数。因子图中的边总是在因子和变量之间,表示特定因子依赖于特定变量。(摘自此处)

我方法的核心是使用基于因子图全局优化方法。这里和这里已经使用了几种优化方法,并取得了良好的效果。因子图优化是一种可以应用各种复杂非线性约束并同时优化所有状态变量(整个行驶轨迹)的方法。各种约束(图中的边)中有许多异常值,但鲁棒的优化技术消除了手动设置异常值阈值参数的需要。有关因子图的更多信息,请参阅此页面。

因子图结构

我尝试了许多不同的图结构,最终使用以下因子图进行了图优化。

因子图结构

图节点 \(X_i\) 表示不同时刻的状态变量,连接两个节点的边表示误差函数 \(e(\cdot)\);每条边对应一个观测值 \(Z_i\)。在图中,误差函数 \(e(\cdot)\) 表示应用于指定时间步状态的概率约束。优化因子图可以写成如下形式。

优化公式

这里,\(\Omega_i\) 是信息矩阵(协方差矩阵的逆),决定了观测值 \(Z_i\) 的精度。我们将以下内容定义为图的节点(估计状态)。

状态定义1

状态定义2

其中 \(r\) 和 \(\dot{r}\) 是地心地固坐标系(ECEF)中的三维位置/速度。\(t\) 和 \(\dot{t}\) 表示每个 GNSS 信号中的接收机钟偏差和漂移。

这里,图中的 \(s\) 是一个可切换约束,它是一个取值在 0 到 1 之间的变量状态。可切换约束的值通过优化同时估计。在异常值的边上,可切换约束会自动优化为 0,并充当观测值的权重。优化问题可以描述如下。

同比赛其他方案