0

我似乎无法找到有关此特定问题的主题,因此我自己发布了一个。

我正在从事一个大型导航项目,在该项目中我可以访问车辆的里程计和从 LiDAR 数据得出的位置估计。我可以将来自 LiDAR 估计的样本从 1 到 20 赫兹以不同的质量进行更改,并且里程计数据以 40 赫兹的频率传输。

我已经实现了一个标准的卡尔曼滤波器,遵循这些方程(来自维基百科):

预言

在此处输入图像描述

在此处输入图像描述

更新

在此处输入图像描述

我现在的问题是,当来自不同信息源的采样率不同时,您如何(最佳)使用卡尔曼滤波器?

4

1 回答 1

0

有两种方法:

首先,让我们假设“迭代”是卡尔曼滤波器预测 + 更新

  1. 变量 dt:如果您可以测量卡尔曼滤波器迭代之间的增量时间,则基本上可以在每次从任何传感器到达新测量值时运行新的迭代。
  2. 静态 dt:如果您的增量时间必须保持静态,您只能以固定速率运行迭代。因此,您必须存储在每次迭代运行之间到达的传感器测量值。

现在有一个普遍的问题,您是否可以将测量分解为不同的“子更新”,这意味着您运行单个预测,并且对于进入的每个传感器测量,您执行单独的更新步骤。从理论上讲,这将允许您仅对已提供新数据的传感器执行更新(适用于上述两种情况)。它看起来像这样:

  1. 预测()
  2. update() 与传感器 A
  3. 跳过传感器 B 的 update(),因为没有测量到
  4. 带有传感器 c 的 update()
  5. 重复

从理论上讲,您不应该这样做,原因如下:

  1. 如果在每次更新之前不进行预测,您将面临系统的真实世界动态超过过滤器的风险。update() 方法将真实世界的测量值与根据预测状态专门计算的预测测量值进行比较。如果在 predict() 和 update() 之间经过了足够的时间,update() 基本上会将新测量值与旧预测值进行比较。如果您的过滤器运行速度比系统状态在现实世界中的变化快得多,那么您就可以了。但是,如果与实际系统中的状态变化相比,您的过滤器运行速度相对较慢,您将在过滤器对状态的估计中遇到滞后/不准确。
  2. 为每个测量执行单独的更新将导致大量不必要的冗余数学矩阵运算(如果 F 很大,这可能会非常昂贵)。假设您的 F 和 H 具有非对角分量(因此状态/观察是相互关联的),然后对所有最近的测量值进行一次预测和一次更新,以最大限度地减少昂贵的矩阵计算。如果 F 是纯对角线,或者它的部分是纯对角线,那么你有某些完全独立的状态或状态组。为了节省矩阵计算,您应该将它们分成不同的卡尔曼滤波器。

其他人建议,为了避免上述问题 2,您将 H 矩阵(以及因此关联的 y、z、S、K)拆分为每个传感器的单独的较小矩阵。因此,传感器 A 将拥有自己的 H、y、z、S、K 矩阵,传感器 B 将拥有自己的一组矩阵,等等。如果您在 F 或 H 中有非对角线元素,这不是最佳的。非对角元素意味着一个状态对另一个状态的依赖,因此它们会表现出协方差。K 最终是根据预测的状态协方差和预测的观察协方差计算的(还请记住,如果您有状态协方差,它通常会通过 H 将协方差注入预测的观察值,更不用说 H 可能会自行创建额外的协方差)。如果您开始将系统范围的 H、S 矩阵分割成每个传感器的单独 H、S 矩阵,您最终会切断模型的相互关联状态/观察之间的关系。这导致了一个次优的 K,因为某些协方差被移除了。

于 2021-02-09T17:21:02.623 回答