【问题标题】:Tracking position and velocity using a kalman filter使用卡尔曼滤波器跟踪位置和速度
【发布时间】:2015-12-15 13:45:03
【问题描述】:

我正在使用卡尔曼滤波器(恒速模型)来跟踪对象的位置和速度。我测量对象的 x,y 并跟踪 x,y,vx,vy 。这可行,但如果传感器读数 x、y、vx、vy 增加 +- 20 mm 的高斯噪声,即使该点不只是噪声移动,也会发生波动。对于足以满足我的需求的位置,但是当点静止时速度会发生变化,这会导致我的对象速度计算出现问题。有没有办法解决这个问题?如果切换到恒定加速度模型是否会对此有所改善?我正在通过摄像头跟踪机器人。

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

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

【问题讨论】:

    标签: opencv localization robotics kalman-filter


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-13
      • 2015-03-22
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 2012-01-17
      相关资源
      最近更新 更多