如docs所写,可以将cv::KalmanFilter类用作扩展卡尔曼过滤器(EKF)。有人可以解释一下我吗
所有矩阵都涉及are declared as public,因此我可以对其全部进行编辑。
source code用于常规(线性)卡尔曼滤波器。
我认为我应该使用我的非线性系统transitionMatrix
编辑G
。
这个矩阵是我的非线性系统之一,statePost
和control
都作为输入变量;和ControlMatrix应该都为0。对吗?
但是我应该把G的雅可比行列在哪里?
对于更新过程,我也有同样的疑问,我对MeasurementMatrix具有非线性系统H
。
也许我有点困惑,有人可以帮我吗?
最佳答案
因此,我认为我想出了如何将cv::KalmanFilter
类用作EKF。
这是我的方法:
kf.statePost
保存在临时变量中:temp = kf.statePost
kf.transitionMatrix
中的转换函数kf.statePre
更改为正确的值:kf.statePre = f(temp, control)
kf.measurementMatrix
中的测量(或校正)函数的雅可比行列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/