我正在实现一个融合3d位置数据(由2种不同的计算机视觉算法提供)的卡尔曼滤波器。我正在使用9维状态向量(位置,速度和加速度)对问题进行建模。但是,来自每个传感器的数据不是同时出现的。由于我通过考虑接收前一个数据和当前数据点之间的时间步长来计算速度,因此两个连续的数据点可以完全不同,但仅相隔很小的时间步长,因此看起来位置已经改变迅速。
我想知道是否有人对解决此问题的最佳方法有见识或方向-卡尔曼滤波器本身会容忍这种行为吗?还是应该将在一个时间窗口内接收到的所有数据放入一个容器中,并以较低的频率对一批数据执行更新/预测周期?我在对象跟踪中利用卡尔曼过滤器获得的资源仅使用了一个摄像头(即同步数据),因此在查找与用例相关的信息时遇到了麻烦。
非常感谢您的帮助!谢谢!
答案 0 :(得分:0)
从我从您的问题中了解到的所有信息以及我们在评论中的谈话开始,我首先简要地描述问题并提出解决方案。
快速回顾
您有一个带有两个独立传感器的系统,它们以不同的速率(30Hz和5Hz)进行测量(可能会有一些时间抖动)。好消息是,每次这样的测量都足以进行卡尔曼滤波器的更新步骤。每次测量都有一个时间戳。
另一个重要的一点是,(可能)测量结果的精度较差,因此位置的变化看起来不合理。
可能的解决方案
定义一个最小的时间间隔来调用您的卡尔曼滤波器,这样就不会有收到的测量结果等待太长时间才能被处理。在我看来,100Hz速率可能是一个不错的首选。在这种情况下,您的dt
为0.01s。
根据所选的F
设计Q
和dt
矩阵(它们都强烈依赖于此值)。
在没有测量的每个呼叫中执行预测步骤。一旦测量到,就进行更新。因此您的通话顺序如下:
通话顺序:
init()
predict()
predict()
predict()
predict()
update(sensor1)
predict()
update(sensor2)
update(sensor1)
predict()
predict()
update(sensor1)
predict()
and so on...
要处理精度问题,可以使用参考信号(地面真实情况)。与参考相比,分析每个传感器(x, y, z)
的每个传感器读数中的误差。卡尔曼滤波器只能与读数一起很好地工作,其误差通常以零均值分布。如果您看到一些系统的偏移,也许您可以摆脱它。根据观察到的误差,您可以计算标准偏差(和方差),因此可以告诉您的过滤器测量结果如何。这将是您的R
矩阵。
如果没有参考,可以在静止不变的位置进行一些测量。因此,您的参考位置将是恒定的,您可以查看读数的离散度。
调整Q
矩阵的元素,并描述状态元素的可能动态。较小的Q元素位置会告诉滤波器不要将其更改得太快。因此,传感器的(可能)较差的性能将得到部分消除(将直觉视为低通滤波器)。
我希望它可以为您提供帮助。如果我理解有误,请纠正我。 查看传感器读数的曲线图(如果可能,还可以参考轨迹)。