用于位置跟踪的卡尔曼滤波器中时间间隔的重要性

时间:2016-02-03 06:56:19

标签: kalman-filter

我实现了一个3d线性卡尔曼滤波器来跟踪物体的位置。以下是KF的详细信息。

我的状态仅为3d位置,我的输入(控制矢量)为3d速度(vx,vy,vz)。并且测量是3d位置。

dt =状态更新中的时间间隔 std_vx,std_vy,std_vz - 控制输入中的标准偏差,例如: 2 mtrs / sec

std_cooperative_pos_x,std_cooperative_pos_y,std_cooperative_pos_z - 测量误差的标准偏差,例如:每轴约40 mt

A = numpy.matrix([[1,0,0],[0,1,0],[0,0,1]])#状态转换矩阵

B = numpy.matrix([[dt,0,0],[0,dt,0],[0,0,dt]])#control input marix

H = numpy.matrix([[1,0,0],[0,1,0],[0,0,1]])

Q = numpy.matrix([[std_vx std_vx dt,0,0],[0,std_vy std_vy dt,0],[0,0,std_vz std_vz dt]])#=输入错误,处理错误

R = numpy.matrix([[std_cooperative_pos_x 2,0,0],[0,std_cooperative_pos_y 2,0],[0,0,std_cooperative_pos_z ** 2]])#measurement co - 方差矩阵

P = numpy.matrix([[1,0,0],[0,1,0],[0,0,1]])

这是我的几个问题:

  1. dt值的时间间隔对滤波器的性能有多大影响。因为我想要10秒,或20秒.....或高达200秒。对于dt值高达10秒我能够在我的轨道上得到一些改进,但超出它不能工作。我做错了什么或者说它很自然。

  2. 我实现了一个线性滤波器,就我而言,位置和速度随时间的组合似乎只是线性的。

  3. 提前感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:1)

过程噪声矩阵' Q'是一个协方差矩阵 - 它必须包含方差而不是标准偏差。你有:

Q = numpy.matrix([[std_vxstd_vxdt, 0, 0],[0, std_vystd_vydt, 0],[0, 0 ,std_vzstd_vzdt]] ) # = Ex error in input , process error

你想:

Q = numpy.matrix([[std_vxstd_vx*std_vxstd_vx * dt *dt, 0, 0], ...

如您所见,过程噪声矩阵随dt ^ 2增长。因此,如果是测量之间的时间,则时间间隔非常重要。此滤波器的测量之间只需要一个传播步骤。除非您接近非线性状态传播或者有更多可用的测量值,否则多个步骤(较小的dt)没有任何优势。