首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡尔曼滤波中异步数据的处理

卡尔曼滤波中异步数据的处理
EN

Stack Overflow用户
提问于 2019-06-12 05:14:59
回答 1查看 777关注 0票数 0

我正在实现一个卡尔曼滤波器,它融合了3d位置数据(提供了2种不同的计算机视觉算法)。我用一个9维的状态向量(位置、速度和加速度)来模拟这个问题.然而,来自每个传感器的数据并不是同时来的。由于我计算速度时,考虑到前一个数据接收点和当前数据点之间的时间步长,两个连续的数据点可能会有很大的不同,但只需很小的时间步长就可以分开,从而使位置看起来变化得很快。

我想知道是否有人对处理这个问题的最佳方法有洞察力或指导性--卡尔曼滤波器本身会容忍这种行为吗?或者,我是否应该将在时间窗口内接收的所有数据放入垃圾箱,并减少对一批数据执行更新/预测周期的频率?我所看到的用于目标跟踪的kalman滤波器资源只使用了一台相机(即同步数据),因此我很难找到与我的用例相关的信息。

任何帮助都是非常感谢的!谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-13 07:57:49

从你的问题和我们在评论中的谈话中我所了解到的一切,让我首先简短地描述这个问题,并提出解决方案。

--快速重述

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

另一个重要的问题是,测量(也许)的精度很差,所以位置的变化看起来不可信。

--可能的解决方案

  1. 定义一个最小的时间间隔来调用您的卡尔曼滤波器,这样任何接收到的测量都必须等待太长时间才能被处理。对我来说,100赫兹的频率可能是个不错的首选。在这种情况下,您的dt将是0.01 s。
  2. 根据所选的FQ矩阵(它们都强烈依赖于此值)设计dtdt矩阵。
  3. 在没有度量的每个调用中,执行预测步骤。一旦测量结果出现,就进行更新。所以你的通话顺序应该是:

呼叫顺序:

代码语言:javascript
复制
 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元素的位置将告诉过滤器不要改变它太快。因此,传感器的(可能的)不良性能将被部分消除(将低通滤波器视为直觉)。

我希望它能帮到你。如果我理解错了,请纠正我。它将有助于看到你的传感器读数的图表(如果可能的话,参考轨道)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56555068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档