如 docs 中所写, 可以将 cv::KalmanFilter 类用作扩展卡尔曼滤波器 (EKF)。有人可以解释一下吗?
涉及的所有矩阵are declared as public所以我可以编辑所有这些。 source code用于普通(线性)卡尔曼滤波器。
我认为我应该用我的非线性系统编辑transitionMatrix
,即G
。
这个矩阵是我的非线性系统之一,它以 statePost
和 control
作为输入变量; ControlMatrix应该全为0吧?
但是我应该把 G 的雅可比行列式放在哪里呢?
我对更新过程有同样的疑问,我有我的非线性系统 H
用于测量矩阵。
也许我有点困惑,有人可以帮助我吗?
最佳答案
所以,我认为我想出了如何将 cv::KalmanFilter
类用作 EKF。
我是这样做的:
将
kf.statePost
保存在临时变量中:temp = kf.statePost
在
kf.transitionMatrix
中放入转换函数的Jacobian做KF的预测步骤
使用转换函数将
<kf.statePre
更改为正确的值:kf.statePre = f(temp, control)
在
kf.measurementMatrix
中放入测量(或校正)函数的雅可比行列式做KF的修正步骤
用正确的值更改
kf.temp5
矩阵:kf.temp5 = measurement - h(statePre)
其中h()
是测量(或修正)函数用正确的值更改
/li>kf.statePost
:kf.statePost = kf.statePre + kf.gain * kf.temp5
最后,您在 kf.statePost
中获得了系统的估计状态!
关于c++ - OpenCV 如何使用 KalmanFilter 类作为 ExtendedKF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21533093/