本文介绍 KalmanFilter再思考

KalmanFilter再思考

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

卡尔慢滤波操作,其实本质上卡尔慢滤波并不是一个滤波器,而是一个信息融合算法。简单来说,根据测量值来预测更加准确的下一个状态。这个在多目标跟踪领域很有用,通过预测上一帧的bboxes在下一帧的坐标,根据检测的ground truth作为测量值,进行卡尔慢滤波融合,可以得到上下帧bboxes之间的对应关系,从而实现多目标的跟踪。

kalmanfilter的简单表达式

最简单的kalmanfilter的形态,是通过一个非常简单的表达式来表达的: $$ \hat{X}k = K_k \cdot z_k + (1 - K_k) \hat{X}{k-1} $$ 这是一个简单的公式,但是基本上蕴含了一个完整的卡尔慢滤波思想。$k$其实表示的意思是第$k$个时刻,那么在$k$时刻的状态,取决于两个因素,一个是$z_k$, 这个就是$k$时刻的测量值,这个值不一定准确,存在误差,$K_k$这个是卡尔慢增益,每一个时刻都存在一个最优值,是需要我们去优化的量。而 $X_{k-1}$是上一个时刻的状态。因此,要计算出当前时刻的状态,那么只要知道测量值和上一个时刻的状态,就可以得到。那么问题来了。如何计算这个卡尔慢增益呢?

此时需要看一下经典的卡尔慢滤波两个方程,这是求取卡尔慢增益的关键: $$ x_k = Ax_{k-1} + Bu_k + W_{k-1} \
z_k = Hx_k + v_k $$

这两个公式的解释是这样的:

1): 第一个公式告诉我们,当前时刻的状态,取决与上一个时刻状态以及一个控制参数,加上噪声,通常情况下这个控制参数可以没有;

2): 第二个公式告诉我们,当前时刻的测量值,由当前的状态,及测量噪声值确定,默认该值应当服从正太分布。

这两个经典公式,是求解卡尔慢增益的关键方程。

上面其实仅仅适合于线性的情况,而对于非线性的情况,则有着很大的不同,此时状态表达式应该表达为: $$ x_k = f(x_{k-1}, u_k) + w_k \
y_k = h(x_k) + v_k $$ 此时就是一个非线性的形式,由于非线性的存在,你会发现,假如x是正太分布,但是i下一个时刻就不是正太分布了,因此整个链条就断裂了,此时就需要使用EKF来进行计算,也叫做扩展卡尔慢滤波。