那么你应该阅读卡尔曼滤波器。基本上它所做的是分别通过其均值和方差来估计一个状态。状态可以是任何你想要的。您可以在您的州拥有本地坐标,也可以拥有全球坐标。
请注意,后者肯定会导致非线性系统动力学,在这种情况下,您可以使用扩展卡尔曼滤波器,或者更正确地使用连续离散卡尔曼滤波器,您以连续方式处理系统动力学,以离散方式处理测量时间。
全局坐标示例:
假设您有一个可以以速度 v 向前行驶的小立方质量。您可以仅在局部坐标中简单地对动力学进行建模,您的状态 s 将是s = [v]
,这是一个线性模型。
但是,您也可以合并全局坐标 x 和 y,假设我们仅在平面上移动。那么你会有s = [x, y, phi, v]'
. 我们需要phi
跟踪当前的方向,因为立方体当然只能相对于它的方向向前移动。让我们定义phi
立方体的向前方向和 -x
轴之间的角度。或者换句话说:phi=0
立方体会沿着 x 轴移动,phi=90°
它会沿着 y 轴移动。
具有全局坐标的非线性系统动力学可以写为
s_dot = [x_dot, y_dot, phi_dot, v_dot]'
和
x_dot = cos(phi) * v
y_dot = sin(phi) * v
phi_dot = ...
v_dot = ... (Newton's Law)
在EKF(扩展卡尔曼滤波器)预测步骤中,您将使用上面的(离散化)方程来预测第一步中状态的平均值,并使用线性化(和离散化)方程来预测方差。
s
当你决定你的状态向量应该是什么样子时,有两件事要记住:
- 您可能很想使用我的线性示例
s = [v]
,然后在卡尔曼滤波器之外对速度进行积分,以获得全局坐标估计。这会起作用,但你会失去卡尔曼滤波器的魅力,因为你只会整合状态的平均值,而不是它的方差。换句话说,您将不知道当前全球坐标的不确定性是什么。
- 卡尔曼滤波器的第二步,测量或校正更新,要求您可以将传感器输出描述为状态的函数。因此,您可能必须将状态添加到您的表示中,以便您可以正确地表达您的测量值,测量值
as z[k] = h(s[k], w[k])
在哪里z
,并且w
是具有高斯分布的噪声向量。