OpenCV如何使用KalmanFilter类作为ExtendedKF

时间:2014-02-03 16:57:52

标签: c++ opencv kalman-filter

docs所述,可以使用cv :: KalmanFilter类作为扩展卡尔曼滤波器(EKF)。有人可以解释我怎么样?

所有涉及的矩阵are declared as public因此我可以编辑所有这些矩阵。 source code用于正常(线性)卡尔曼滤波器。

我认为我应该使用非线性系统编辑transitionMatrix,即G。 这个矩阵是我的非线性系统之一,作为输入变量statePostcontrol;和ControlMatrix应该都是0.对吗?

但是我应该把G的雅各比派放在哪里?

我对更新过程有同样的疑问,我有一个非线性系统H用于measurementMatrix。

也许我有点困惑,有人能帮助我吗?

1 个答案:

答案 0 :(得分:10)

所以,我认为我想出了如何将cv::KalmanFilter类用作EKF。 这就是我的成就:

  1. 将临时变量保存为kf.statePosttemp = kf.statePost

  2. 放入kf.transitionMatrix过渡函数的雅可比行列式

  3. 执行KF的预测步骤

  4. 使用转换函数将kf.statePre更改为正确的值:kf.statePre = f(temp, control)

  5. 输入kf.measurementMatrix雅可比的测量(或修正)功能

  6. 执行KF的修正步骤

  7. 使用正确的值更改kf.temp5矩阵:kf.temp5 = measurement - h(statePre)其中h()是衡量(或更正)功能

  8. 使用正确的值更改kf.statePostkf.statePost = kf.statePre + kf.gain * kf.temp5

  9. 最后,您在kf.statePost中确定了系统的估计状态!