概述
世界充满了我们想要测量和跟踪的数据和事件,但我们不能依赖传感器为我们提供完美的信息。我车上的 GPS 报告高度。每次我经过路上的同一点时,它都会报告略有不同的高度。如果我对同一个物体称重两次,我的厨房秤会给出不同的读数。如果我的秤给出的读数略有不同,我可以只读取一些读数并取平均值。或者我可以用更准确的秤来代替它。但是当传感器噪音很大,或者环境使数据采集困难时我们该怎么办?我们可能正在尝试跟踪一架低空飞行的飞机的运动。我们可能想为无人机创建一个自动驾驶仪,或者确保我们的农用拖拉机播种整个田地。我从事计算机视觉工作,需要跟踪图像中的移动物体,而计算机视觉算法会产生非常嘈杂且不可靠的结果。卡尔曼和贝叶斯滤波器将我们对系统行为方式的嘈杂且有限的知识与嘈杂且有限的传感器读数相结合,以产生对系统状态的最佳估计。
卡尔曼滤波器由鲁道夫·埃米尔·卡尔曼 发明,旨在以数学最优方式解决此类问题。它的首次使用是在阿波罗登月任务中,从那时起它就被用于各种各样的领域。飞机、潜艇和巡航导弹上都有卡尔曼滤波器。华尔街利用它们来跟踪市场。它们用于机器人、物联网传感器和实验室仪器。化工厂用它们来控制和监测反应。它们用于执行医学成像并消除心脏信号中的噪声。如果涉及传感器和/或时间序列数据,通常会涉及卡尔曼滤波器或与卡尔曼滤波器的近亲。
卡尔曼滤波器原理:
首先引入一个离散控制过程的系统。该系统可用一个线性随机差分方程来描述:
X(k)=A X(k-1)+B U(k)+W(k)
系统的测量值:
Z(k)=H X(k)+V(k)
上两式子中,X(k)是k时刻的系统状态,U(k)是k时刻对系统的控制量。A和B是系统参数,对于多模型系统,他们为矩阵。Z(k)是k时刻的测量值,H是测量系统的参数,对于多测量系统,H为矩阵。W(k)和V(k)分别表示过程和测量的噪声。他们被假设成高斯白噪声。
首先我们要利用系统的过程模型,来预测下一状态的系统。假设现在的系统状态是k,根据系统的模型,可以基于系统的上一状态而预测出现在状态:
X(k|k-1)=A X(k-1|k-1)+B U(k) ……….. (1)
式(1)中,X(k|k-1)是利用上一状态预测的结果,X(k-1|k-1)是上一状态最优的结果,U(k)为现在状态的控制量,如果没有控制量,它可以为0。
对应于X(k|k-1)的covariance,我们用P表示covariance:
P(k|k-1)=A P(k-1|k-1) A'+Q ……… (2)
式(2)中,P(k|k-1)是X(k|k-1)对应的covariance,P(k-1|k-1)是X(k-1|k-1)对应的covariance,A'表示A的转置矩阵,Q是系统过程的covariance。式子1,2就是卡尔曼滤波器5个公式当中的前两个,也就是对系统的预测。
现在我们有了现在状态的预测结果,然后我们再收集现在状态的测量值。结合预测值和测量值,我们可以得到现在状态(k)的最优化估算值X(k|k):
X(k|k)= X(k|k-1)+Kg(k) (Z(k)-H X(k|k-1)) ……… (3)
其中Kg为卡尔曼增益(Kalman Gain):
Kg(k)= P(k|k-1) H' / (H P(k|k-1) H' + R) ……… (4)
到现在为止,我们已经得到了k状态下最优的估算值X(k|k)。但是为了要令卡尔曼滤波器不断的运行下去直到系统过程结束,我们还要更新k状态下X(k|k)的covariance:
P(k|k)=(I-Kg(k) H)P(k|k-1) ……… (5)
其中I 为1的矩阵,对于单模型单测量,I=1。当系统进入k+1状态时,P(k|k)就是式子(2)的P(k-1|k-1)。这样,算法就可以自回归的运算下去。
卡尔曼滤波器的原理基本描述了,式子1,2,3,4和5就是他的5 个基本公式。根据这5个公式,可以很容易的实现计算机的程序。
基于卡尔曼滤波器目标跟踪仿真结果: