如docs所述,可以使用cv :: KalmanFilter类作为扩展卡尔曼滤波器(EKF)。有人可以解释我怎么样?
所有涉及的矩阵are declared as public因此我可以编辑所有这些矩阵。 source code用于正常(线性)卡尔曼滤波器。
我认为我应该使用非线性系统编辑transitionMatrix
,即G
。
这个矩阵是我的非线性系统之一,作为输入变量statePost
和control
;和ControlMatrix应该都是0.对吗?
但是我应该把G的雅各比派放在哪里?
我对更新过程有同样的疑问,我有一个非线性系统H
用于measurementMatrix。
也许我有点困惑,有人能帮助我吗?
答案 0 :(得分:10)
所以,我认为我想出了如何将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
中确定了系统的估计状态!