从我从你的问题和我们在评论中的对话中了解到的所有信息,让我首先简要描述一下这个问题并提出解决方案。
快速回顾
您有一个带有两个独立传感器的系统,它们以不同的速率(30Hz 和 5Hz)进行测量(并且可能有一些时间抖动)。好消息是,每次这样的测量都完全足以进行卡尔曼滤波器的更新步骤。每个测量都有一个时间戳。
另一个重要的一点是,测量(可能)精度很差,因此位置的变化看起来不合理。
一个可能的解决方案
定义调用卡尔曼滤波器的最小时间间隔,这样接收到的测量值都不必等待太长时间才能处理。在我看来,100Hz 的频率可能是一个不错的首选。在这种情况下,您dt
将是 0.01 秒。
根据所选择的设计你的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 元素会告诉过滤器不要太快改变它。因此,传感器的(可能)性能不佳将被部分消除(将低通滤波器视为直觉)。
我希望它可以帮助你。如果我理解错误,请纠正我。查看传感器读数的图(如果可能的话,参考轨迹)会很有帮助。