关于 dt(时间演化)的卡尔曼滤波器状态方程

Posted

技术标签:

【中文标题】关于 dt(时间演化)的卡尔曼滤波器状态方程【英文标题】:Kalman filter state equation with respect to dt (evolution of time) 【发布时间】:2020-12-16 14:26:08 【问题描述】:

我正在实现基于论文的卡尔曼滤波器。状态空间向量有6个变量,因为状态变量随着时间的评估而变化,论文还提供了变量随着时间(dt)的评估的微分方程。 我的问题是,在 python 中实现这个概念时,我应该如何使用带有 dt 的微分方程。我想简单地将方程与 dt 相乘,但我认为这不是解决方案,因为它是一个微分方程。请在这方面指导我。另外,我想问一下,因为这些方程会估计新状态,所以应该在更新步骤中添加它们?谢谢!

【问题讨论】:

你累了什么,给我们看看你的代码示例?阅读 filterpy 或 pyKalman 的代码可能更有指导意义。 @PaulBrennan,这是我的代码示例,我无法复制整个代码,因为它很长。 dt 是时间步,u 是输入,y 是测量值class KF: def predict(self, dt, u) x = [a b c d e f] # predict equations of kalman filter def update(self, y) # update equation of kalman filter # Equation for a variable in state space model a = (V * np.sin(sigma + beta)) # V is velocity, sigma is angle, and beta is float angle 在此,我很困惑在哪里添加方程'a',它是状态空间向量中的变量之一,用于估计下一个时间步中变量的状态 【参考方案1】:

对于初值问题,scipy.integrate - scipy.integrate.odeint()scipy.integrate.solve_ivp() 中的 ODE 有两个不同的有用函数。我对您的系统了解得不够多,无法回答您的最后一个问题。

【讨论】:

非常感谢您的回复。根据我的理解,我需要制作所有 6 个变量的函数,以便在所描述的函数中使用它们来解决 ODE?我的意思是,如果我有 6 个状态变量:偏航角、浮动角、曲率等,那么我还必须为这些变量创建函数以区分它们吗?对于第二个问题,我的系统估计车辆和道路估计的自我运动,所以为了使用更新步骤中的测量来估计新状态,我不确定在哪里使用这些微分方程。你能在这方面指导我吗? @jaz 如果此答案为addressed your problem,请考虑accepting it,方法是单击答案左侧的复选标记/勾选,将其变为绿色。这标志着问题的解决令您满意,并向您和回答者奖励reputation。如果您有 >= 15 的声望点,您也可以根据需要对答案进行投票。也没有义务这样做。 @jaz 再说一次,我对您的系统了解得不够多,无法回答这些问题。我建议访问Mathematics 并在那里询问。

以上是关于关于 dt(时间演化)的卡尔曼滤波器状态方程的主要内容,如果未能解决你的问题,请参考以下文章

如何从卡尔曼滤波器估计部分状态的概率?

适用于 iOS 的卡尔曼滤波器

如果卡尔曼滤波器无法计算出稳定的卡尔曼增益,可能的原因是啥?

在 C++ 中实现卡尔曼滤波器

用于背景/前景分离的卡尔曼滤波器

具有 2 个测量噪声的卡尔曼滤波器