我查看了讨论 3D 卡尔曼滤波器的帖子。 卡尔曼滤波器估计节点的 3D 位置 帮助卡尔曼滤波器实现估计 3D 位置
据我了解,两人都在尝试相同的事情,即根据加速器读数计算 3D 位置。然而,他们设置卡尔曼滤波器的过程完全不同。
我自己的方法也不一样
这些是基于我在这里学到的公式,它将加速度视为U向量http://www.cl.cam.ac.uk/~rmf25/papers/Understanding%20the%20Basis%20of%20the%20Kalman%20Filter .pdf
Xk = AXk-1 + BUt
x_curr = x_prev + x_vel_prev * dt + 0.5*dt^2*x_acc
x_vel_curr = x_vel_prev + dt*x_acc
第二篇文章似乎完全类似于这个例子http://campar.in.tum.de/Chair/KalmanFilter#Literature删除了U向量。
虽然第一篇文章有一个基于 wiki 的不同过程方程,但它使用Ga而不是Bu https://en.wikipedia.org/wiki/Kalman_filter#Example_application.2C_technical:
X = FX_prev + Ga
这就是我所做的,我认为这是有道理的:
X = [x,y,z,dx,dy,dz]
U = [ddx, ddy, ddz]
A = np.matrix([[1, 0, 0, dt, 0, 0],
[0, 1, 0, 0, dt, 0],
[0, 0, 1, 0, 0, dt],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1]],
)
B = np.matrix([[0.5*(dt**2), 0, 0],
[0, 0.5*(dt**2), 0],
[0, 0, 0.5*(dt**2)],
[dt, 0, 0],
[0, dt, 0],
[0, 0, dt]])
H = np.matrix([[1,0,0,0,0,0],
[0,1,0,0,0,0],
[0,0,1,0,0,0]])
P = np.matrix([[10,0,0,0,0,0],
[0,10,0,0,0,0],
[0,0,10,0,0,0],
[0,0,0,100,0,0],
[0,0,0,0,100,0],
[0,0,0,0,0,100]])
Q = np.matrix([[1,0,0,0,0,0],
[0,1,0,0,0,0],
[0,0,1,0,0,0],
[0,0,0,1,0,0],
[0,0,0,0,1,0],
[0,0,0,0,0,1]])
R = np.matrix([[1,0,0],
[0,1,0],
[0,0,1]])
我不明白的是,前两个帖子怎么有完全不同的矩阵?有什么原因吗?我的方法正确吗?
非常感谢任何输入和建议