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

时间:2015-12-15 13:45:03

标签: opencv localization robotics 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/

1 个答案:

答案 0 :(得分:3)

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

  • 错误协方差有单位。它的标准偏差是平方的。所以你的位置误差在"长度平方"和速度"每时间平方的长度"。这些矩阵中的值将根据您是以m还是mm工作而不同。
  • 您正在实施"恒定速度"模型,但" processNoiseCov"从示例中为位置和速度过程噪声设置相同的值。这意味着由于你的速度错误,你的位置可能会出错,你可能错了,因为物体以一种独立于速度的方式传送到周围。在CV模型中,您可能会认为位置过程噪声非常低(仅基于数值原因而非基于非零并且涵盖建模误差),并且系统的真实未知运动将归因于未知速度。这个问题也会干扰KF从位置输入推断速度的能力,因为传送错误"位置不归因于速度变化。
  • 如果你输入+/- 20mm的误差(如果你想模拟理想行为,你应该加入高斯噪声),​​你的标准偏差大约是11.5mm,方差是(11.5mm) ^ 2。不知道你的单位是多少(mm或m)我不能说出" measurementNoiseCov"的数值。应该是,但它不是0.1(如例子中所示)。

最后,即使所有这些都正确,请记住KF最终是一个线性过滤器。无论你输入什么噪音都会出现在输出中,只是按某种因素(卡尔曼增益)进行缩放。