我实现了一个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]])
这是我的几个问题:
dt值的时间间隔对滤波器的性能有多大影响。因为我想要10秒,或20秒.....或高达200秒。对于dt值高达10秒我能够在我的轨道上得到一些改进,但超出它不能工作。我做错了什么或者说它很自然。
我实现了一个线性滤波器,就我而言,位置和速度随时间的组合似乎只是线性的。
提前感谢您的时间和帮助。
答案 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)没有任何优势。