OpenCV如何使用KalmanFilter类作为ExtendedKF

11

文档所述,可以将cv::KalmanFilter类用作扩展卡尔曼滤波器(EKF)。有人能解释一下吗?

涉及的所有矩阵都被声明为公共的,因此我可以编辑它们中的所有内容。 源代码适用于普通(线性)卡尔曼滤波器。

我认为应该用我的非线性系统即G编辑transitionMatrix。 这个矩阵是我的非线性系统的矩阵,输入变量是statePostcontrol;而ControlMatrix应该全部为0。对吗?

但是我应该把G的雅可比矩阵放在哪里呢?

对于更新过程,我有我的非线性系统H用于measurementMatrix

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


我需要用在statePost中计算出的雅各比矩阵替换G和H吗? - Michele mpp Marostica
1个回答

10

因此,我认为我已经知道如何将cv::KalmanFilter类用作扩展卡尔曼滤波器。

  1. kf.statePost保存在一个临时变量中:temp = kf.statePost

  2. kf.transitionMatrix中放置转移函数的Jacobian矩阵

  3. 进行KF的预测步骤

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

  5. kf.measurementMatrix中放置测量(或校正)函数的Jacobian矩阵

  6. 做KF的纠正步骤

  7. 使用这个公式更改kf.temp5矩阵: kf.temp5 = measurement - h(statePre) 其中h()是测量(或校正)函数

  8. 使用这个公式更改kf.statePost矩阵的正确值:kf.statePost = kf.statePre + kf.gain * kf.temp5

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


1
只有声望超过10k的用户可以查看此人的问题。他问你在卡尔曼过滤器中,你的第八步是否应该是 kf.statePost = kf.statePre + kf.gain * kf.temp5 ? - user456814
@Michele - 我也在尝试做同样的事情。你能给我一些建议吗?(我不知道如何在这里启动“聊天”,除了不断添加评论!) - ManInMoon
我不认为有聊天功能,你能解释一下你的疑虑吗? - Michele mpp Marostica
@Michele,我不确定f + h函数是什么。另外,temp5从哪里来?我向您的Gmail地址发送了一封电子邮件,并附上了我的代码部分。 - ManInMoon
你可以在OpenCV库的卡尔曼滤波器源代码中找到temp5矩阵,另外两个函数取决于你正在估计的系统。由于你关于f和h的问题相当普遍(关于卡尔曼滤波器),我建议你提出一个新的问题。附注:我不会免费为你完成这项工作。 - Michele mpp Marostica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接