docs所写,可以将cv::KalmanFilter类用作扩展卡尔曼过滤器(EKF)。有人可以解释一下我吗

所有矩阵都涉及are declared as public,因此我可以对其全部进行编辑。
source code用于常规(线性)卡尔曼滤波器。

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

但是我应该把G的雅可比行列在哪里?

对于更新过程,我也有同样的疑问,我对MeasurementMatrix具有非线性系统H

也许我有点困惑,有人可以帮我吗?

最佳答案

因此,我认为我想出了如何将cv::KalmanFilter类用作EKF。
这是我的方法:

  • kf.statePost保存在临时变量中:temp = kf.statePost
  • 放在kf.transitionMatrix中的转换函数
  • 的雅可比行列
  • 做KF的预测步骤
  • 使用转换函数将kf.statePre更改为正确的值:kf.statePre = f(temp, control)
  • 放入kf.measurementMatrix中的测量(或校正)函数的雅可比行列
  • 执行KF的更正步骤
  • 使用正确的值更改kf.temp5矩阵:kf.temp5 = measurement - h(statePre)其中h()是测量(或校正)函数
  • 使用正确的值更改kf.statePost:kf.statePost = kf.statePre + kf.gain * kf.temp5

  • 最后,您可以在kf.statePost中获得系统的估计状态!

    关于c++ - OpenCV如何将KalmanFilter类用作ExtendedKF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21533093/

    10-12 14:49