0

我正在实现一个融合 3d 位置数据(由 2 种不同的计算机视觉算法提供)的卡尔曼滤波器。我正在使用 9 维状态向量(位置、速度和加速度)对问题进行建模。但是,来自每个传感器的数据不会同时出现。由于我通过考虑接收先前数据和当前数据点之间的时间步长来计算速度,因此两个连续的数据点可能完全不同,但仅相隔很小的时间步长,因此看起来位置已经改变迅速。

我想知道是否有人对解决这个问题的最佳方法有见解或方向——卡尔曼滤波器本身是否能容忍这种行为?或者我应该将在一个时间窗口内收到的所有数据放入一个 bin 中,并在一批数据上不那么频繁地执行更新/预测周期?我看到的在对象跟踪中使用卡尔曼滤波器的资源只使用了一个相机(即同步数据),所以我很难找到与我的用例相关的信息。

很感谢任何形式的帮助!谢谢!

4

1 回答 1

0

从我从你的问题和我们在评论中的对话中了解到的所有信息,让我首先简要描述一下这个问题并提出解决方案。

快速回顾

您有一个带有两个独立传感器的系统,它们以不同的速率(30Hz 和 5Hz)进行测量(并且可能有一些时间抖动)。好消息是,每次这样的测量都完全足以进行卡尔曼滤波器的更新步骤。每个测量都有一个时间戳。

另一个重要的一点是,测量(可能)精度很差,因此位置的变化看起来不合理。

一个可能的解决方案

  1. 定义调用卡尔曼滤波器的最小时间间隔,这样接收到的测量值都不必等待太长时间才能处理。在我看来,100Hz 的频率可能是一个不错的首选。在这种情况下,您dt将是 0.01 秒。

  2. 根据所选择的设计你的F和矩阵(它们都强烈依赖于这个值)。Qdt

  3. 在没有测量的每个调用中执行预测步骤。测量值一到,就进行更新。所以你的调用序列看起来像:

调用顺序:

 init()
 predict()
 predict()
 predict()
 predict()
 update(sensor1)
 predict()
 update(sensor2)
 update(sensor1)
 predict()
 predict()
 update(sensor1)
 predict()
 and so on...
  1. 要处理精度问题,您可以使用参考信号(基本事实)。(x, y, z)与参考相比,分析每个信号的每个传感器读数的误差。卡尔曼滤波器仅适用于读数,其误差呈正态分布,均值为零。如果你看到一些系统性的偏移,也许你可以摆脱它。根据观察到的误差,您可以计算标准偏差(和方差),这样您就可以告诉您的过滤器测量结果有多好。这将是你的R矩阵。

  2. 如果您没有参考资料,您可以在原地不动的情况下进行一些测量。因此,您的参考位置将是恒定的,您可以查看读数的分散情况。

  3. 调整Q矩阵的元素并描述状态元素的可能动态。一个较小的位置 Q 元素会告诉过滤器不要太快改变它。因此,传感器的(可能)性能不佳将被部分消除(将低通滤波器视为直觉)。

我希望它可以帮助你。如果我理解错误,请纠正我。查看传感器读数的图(如果可能的话,参考轨迹)会很有帮助。

于 2019-06-13T07:57:49.330 回答