使用卡尔曼滤波器跟踪位置和速度

Ham*_*aya 6 robotics opencv localization kalman-filter

我正在使用卡尔曼滤波器(恒速模型)来跟踪物体的位置和速度.我测量对象的x,y并跟踪x,y,vx,vy.哪个有效但是如果向传感器读数x,y,vx,vy添加+ - 20 mm的gausian噪声,即使该点不仅仅是噪声,也会波动.对于满足我需要的位置,但当点静止时速度会发生变化,这会导致我的物体速度计算出现问题.有没有解决这个问题的方法?如果切换到恒定加速模型改进呢?我正在通过相机跟踪机器人.

我正在使用opencv实现,我的kalman模型与[1]相同

[1] http://www.morethantechnical.com/2011/06/17/simple-kalman-filter-for-tracking-using-opencv-2-2-w-code/

Ben*_*son 3

设计卡尔曼滤波器最重要的不是数据,而是误差估计。该示例中的矩阵似乎是任意选择的,但您应该使用系统的特定知识来选择它们。尤其:

  • 误差协方差有单位。它是标准差的平方。所以你的位置误差是“长度平方”,速度是“长度/时间平方”。这些矩阵中的值会有所不同,具体取决于您使用的是 m 还是 mm。
  • 您正在实现“恒定速度”模型,但示例中的“processNoiseCov”为位置和速度过程噪声设置相同的值。这意味着你可能会因为你的速度错误而导致你的位置错误,并且你可能会因为对象以独立于速度的方式传送而错误。在 CV 模型中,您会期望位置过程噪声非常低(基本上仅出于数值原因和覆盖建模误差而非零),并且系统的真正未知运动将归因于未知速度。这个问题还会干扰 KF 从位置输入推断速度的能力,因为位置的“隐形传态误差”并不归因于速度变化。
  • 如果您输入 +/-20mm 的误差(如果您想模拟理想行为,则确实应该输入高斯噪声),​​您的标准偏差大约为 11.5mm 或方差为 (11.5mm)^2。不知道你的单位是什么(毫米或米),我无法说出“measurementNoiseCov”的数值应该是什么,但它不是 0.1(如示例中所示)。

最后,即使所有这些都是正确的,请记住 KF 最终是一个线性滤波器。无论您输入什么噪声,都会显示在输出中,只是按某个因子(卡尔曼增益)缩放。