如何配置卡尔曼滤波器并定义状态向量以正确建模射弹运动?

时间:2016-10-20 12:22:14

标签: computer-vision tracking kalman-filter projectile

我正在尝试使用Matlab的卡尔曼滤波器实现。我想模拟一个孩子在空中使用卡尔曼滤波器抛出的球的运动。我手动注释了图像帧中球的位置,以用作初始化和更新卡尔曼滤波器的测量值(地面实况值)。我已将状态定义为6维向量,如下所示:

[X Vx Ax Y Vx Ay]

X - x坐标Vx - x坐标中的速度Ax - x坐标中的加速度Y - x坐标Vy - x坐标中的速度Ay - x坐标中的加速度

使用以下调用配置卡尔曼滤波器:

kalmanFilter = myConfigureKalmanFilter('ConstantAcceleration',centroid,[0.5 0.5 0.5] * 1e2,[25,10,10],25);

其中,质心对应第一帧的(X,Y)地面实况值(根据excel文档为985)

使用以下调用生成预测值(帧986以后):

[predictCentroid,state] = predict(kalmanFilter);

使用以下调用更新卡尔曼滤波器,其中地面实况值对应于帧(986以后):

正确(kalmanFilter,centroid);

enter image description here

该实验的结果如图所示。

问题:观察到Ay的值不恒定并且似乎以不规则的方式增加和减少。由于这是弹丸运动的情况,重力在y方向上产生恒定的加速度,因此这些值不会漂移很多,但事实并非如此。

注意:这些值以像素坐标显示。

1 个答案:

答案 0 :(得分:0)

我认为这里的部分问题是球在3D空间中移动,但是您正在跟踪其运动的2D投影。此外,即使在3D空间中,由于空气阻力,加速度也不是很稳定。

话虽如此,在这种情况下,恒定加速度可能仍然是最好的运动模型。我会尝试增加过程噪声协方差,以解释运动模型不太正确的事实。

您可能还想对协方差进行一些微调。例如,您对加速度的估计可能比位置的噪声更大。

修改

镜头失真是一个单独的问题。如果你能纠正它,这总是一件好事。但我所说的是球在3D中移动的事实,但您正在观看的视频显示了该动作的2D投影。

真实的3D世界,由于重力指向下,你有一个恒定的加速度,球的轨迹是3D中的抛物线。当您观察球移动的视频时,其轨迹是该抛物线的2D投影,可能会偏斜,具体取决于相机角度。因此,这个2D轨迹可能没有恒定的加速度。

考虑极端情况。球被扔到球场上。相机位于场地上方,直视下方。在3D中,球实际上是以抛物线飞行,首先减速,然后加速回升直到它撞到地面,因为恒定的加速度指向下方。但是对于上面的摄像头,看起来球看起来像一条直线,首先是加速,然后是减速。在视频中没有第三个维度,因此您将观察沿着轨迹的可变加速度,而不是恒定的向下加速度。

唯一可行的方法是,你的图像平面是否与球的运动平面平行。然后3D抛物线轨迹将作为2D抛物线投射到图像上,恒定加速度将沿Y轴指向下方。