卡尔曼滤波-建立卡尔曼滤波直觉
概述
卡尔曼滤波作为一种强大的数据融合和数据预测算法,在很多方面都有着不错的运用;用于雷达追踪定位和导航系统、控制系统、计算机图形等等。
卡尔曼滤波的核心思想比较简单,核心就是下面图一中的五个公式,更新和预测不停的迭代下去,但是许多书籍和教程并不容易理解。
大多数教程都默认读者具备了相应的数学背景(虽然我认为确实是的,但是上来就怼公式真的很难学进去),把公式晾出来之后,就开始推导,我反正很难看进去,而且大都缺乏实用的数值示例让读者更进一步的从实际角度去理解。所以造成的结果就是每一个公式都看得懂,组合起来就懵逼的那种。

所以这里我会先帮助大家建立起一种“直觉”,对于卡尔曼滤波算法的直觉,让您能够深入的理解它的原理,再加上实际的数值例子来加深您的直觉,这样就不用今天死记公式,几天后又给忘了,从底层原理去理解它,能够帮助大家更久更好的记住它。
预测算法的必要性
再深入了解卡尔曼滤波之前,我们先来考虑一个雷达追踪的场景:

假设一个追踪周期为5秒。跟踪雷达向目标方向发送一束射束。也就是每5秒,雷达就会通过向目标方向发送专用跟踪波束来重新定位目标。
发送波束后,雷达估计当前目标位置和速度。并且雷达还估计(或预测)下一个发射跟踪波束的目标位置。
可以使用牛顿运动方程轻松计算未来目标位置:
x = x 0 + v 0 Δ t + 1 2 a Δ t 2 x 是目标的位置 x 0 是初始的位置 v 0 是初始的速度 a 是目标的加速度 Δ t 是时间间隔(这里是 5 s ) x=x_0+v_0\Delta t+\frac{1}{2}a\Delta t^2 \\ x是目标的位置\\ x_0是初始的位置\\ v_0是初始的速度\\ a是目标的加速度\\ \Delta t是时间间隔(这里是5s) x=x0+v0Δt+21aΔt2x是目标的位置x0是初始的位置v0是初始的速度a是目标的加速度Δt是时间间隔(这里是5s)
而在三维空间中,上面的牛顿公式可以重写成下面这种:
x = x 0 + v x 0 Δ t + 1 2 a x Δ t 2 y = y 0 + v y 0 Δ t + 1 2 a y Δ t 2 z = z 0 + v z 0 Δ t + 1 2 a z Δ t 2 x=x_0+v_{x0}\Delta t+\frac{1}{2}a_x\Delta t^2 \\ y=y_0+v_{y0}\Delta t+\frac{1}{2}a_y\Delta t^2 \\ z=z_0+v_{z0}\Delta t+\frac{1}{2}a_z\Delta t^2 \\ x=x0+vx0Δt+21axΔt2y=y0+vy0Δt+21ayΔt2z=z0+vz0Δt+21azΔt2
上面的公式被称为状态空间模型(Dynamic model),它描述的是输入状态和输出状态之间的关系。
其中 [ x , y , z , v x , v y , v z , a x , a y , a z ] [x,y,z,v_x,v_y,v_z,a_x,a_y,a_z] [x,y,z,vx,vy,vz,ax,ay,az]也就是我们常说的系统状态,在算法预测阶段(predict),输入是当前的状态,输出是下个时间节点的状态。
根据上面给出的公式可以知道,当我们知道状态空间模型和当前的状态的时候,可以很容易的预测出模型下一个时间点的状态。
然而事实并非如此。首先,雷达测量不是绝对准确的。它包括随机误差(或者称为不确定性)。误差幅度取决于许多参数,例如雷达校准、波束宽度和返回回波的信噪比。测量中包含的误差称为测量噪声。
此外,由于风、空气湍流和飞行员机动等外部因素,目标运动并不严格符合运动方程。动态模型误差(或不确定性)称为过程噪声。
由于测量噪声和过程噪声,估计的目标位置可能与实际目标位置相距甚远。在这种情况下,雷达可能会向错误的方向发送跟踪波束而错过目标。
所以我们需要一种考虑过程和测量不确定性的预测算法来提高雷达跟踪性能。
最广泛使用的预测算法是卡尔曼滤波器。
数学知识
几个基本术语,方差、标准差、正态分布、估计值、准确度、精确度(精度)、均值、期望值和随机变量
我相信有精力学习卡尔曼滤波的读者,基本上对这部分数学知识都是很清楚的,没兴趣的读者可以直接跳过,有兴趣的读者可以当作复习一下吧;不过就算是不大清楚这部分数学知识的读者,我也会尽量让大家都看懂。
均值和期望值
E 期望值 μ 均值 E期望值\\ \mu均值 E期望值μ均值
均值和期望值是两个密切相关的数学术语,很多情况下我们都是直接使用均值等于期望值,如下图公式,但是他们确实存在区别。
E ( x ) = μ E(x)=\mu E(x)=μ
例如,我们有两个五美分和三个十美分的硬币,我们可以很容易的计算他们的均值。

V m e a n = 1 N ∑ n = 1 N V n = 1 5 ( 5 + 5 + 10 + 10 + 10 ) = 8 c e n t V_{mean}=\frac{1}{N}\sum_{n=1}^N{V_n}=\frac{1}{5}(5+5+10+10+10)=8cent Vmean=N1n=1∑NVn=51(5+5+10+10+10)=8cent
上面这个例子中,输出结果不能定义为预期值,因为系统状态(硬币值)没有隐藏,我们使用了整个族群(所有5个硬币)来计算平均值,所以这里均值不能被称为期望值。
现在假设同一个人测出了五个不同的体重值:79.8kg、80kg、80.1kg、79.8kg和80.2kg;一个人可以看作一个系统,人的体重可以看作是一个系统状态。

这五次的测量值之所以不一样是因为体重秤在测量时存在一个随机误差,由于人的体重它是一个隐藏状态所以我们不知道人的真实体重。但是我们可以通过求这五次测量值的均值来估计人的体重。估计的结果是人体重的期望值。
期望值就是您期望隐藏变量在很长一段时间或多次试验中具有的值。
方差和标准差
方差是衡量数据集偏离均值的程度,标准差是方差的平方根,一般标准差用希腊字母 σ = 1 N ∑ n = 1 N ( x n − μ ) 2 \sigma=\sqrt{\frac{1}{N}\sum_{n=1}^N(x_n-\mu)^2} σ=N1n=1∑N(xn−μ)2表示,方差则是 σ 2 = 1 N ∑ n = 1 N ( x n − μ ) 2 \sigma^2=\frac{1}{N}\sum_{n=1}^N(x_n-\mu)^2 σ2=N1n=1∑N(xn−μ)2表示。
我们就下面两个学校的篮球队队员的身高来进行比较吧。
| 球员1 | 球员2 | 球员3 | 球员4 | 球员5 | 平均身高 | |
|---|---|---|---|---|---|---|
| A队 | 1.89m | 2.1m | 1.75m | 1.98m | 1.85m | 1.914m |
| B队 | 1.94m | 1.9m | 1.97m | 1.89m | 1.87m | 1.914m |
根据方差公式,就是每个队的身高与他们的身高均值的差值的平方和再求均值。
最终分别求得球队A和B的方差如下:
σ A 2 = 1 N ∑ n = 1 N ( x A n − μ A ) 2 = 1 5 ( 0.000576 + 0.034596 + 0.026896 + 0.004356 + 0.004096 ) = 0.014 m 2 σ B 2 = 1 N ∑ n = 1 N ( x B n − μ B ) 2 = 1 5 ( 0.000676 + 0.000196 + 0.003136 + 0.000576 + 0.001936 ) = 0.0013 m 2 \sigma^2_A=\frac{1}{N}\sum_{n=1}^N(x_{An}-\mu_A)^2=\frac{1}{5}(0.000576+0.034596+0.026896+0.004356+0.004096)=0.014m^2\\ \sigma^2_B=\frac{1}{N}\sum_{n=1}^N(x_{Bn}-\mu_B)^2=\frac{1}{5}(0.000676+0.000196+0.003136+0.000576+0.001936)=0.0013m^2 σA2=N1n=1∑N(xAn−μA)2=51(0.000576+0.034596+0.026896+0.004356+0.004096)=0.014m2σB2=N1n=1∑N(xBn−μB)2=51(0.000676+0.000196+0.003136+0.000576+0.001936)=0.0013m2
A队的标准差为 0.12 m = σ A 2 = 0.014 m 2 0.12m=\sqrt{\sigma_A^2}=\sqrt{0.014m^2} 0.12m=σA2=0.014m2
B队的标准差为 0.036 m = σ B 2 = 0.0013 m 2 0.036m=\sqrt{\sigma_B^2}=\sqrt{0.0013m^2} 0.036m=σB2=0.0013m2
从标准差或者方差可以看到,A和B两队的平均身高一样,但是A队身高的多样性更多,从篮球的角度考虑A队身高分布更合理,因为中锋,前锋,后卫的身高是相差比较大的,而B队的身高从篮球的角度来看不大合理,身高差别不大。
拓展一下(有偏估计和无偏估计)
假设我们要计算所有高中所有篮球运动员身高的均值和方差。
这将是一项艰巨的任务,因为我们需要收集每所高中每位球员的身高数据。
所以一般我们可以通过抽样出一个大数据集并在这个数据集上进行计算来估计玩家的均值和方差,从而降低这项任务的工作量。也就是我们常说的抽样调查,所以上面的大数据集抽样要尽可能的多样,尽可能的随机,从而保证评估效果的准确性。
均值估计公式 μ = μ s a m p l e = 1 N ∑ n = 1 N H s a m p l e n \mu=\mu_{sample}=\frac{1}{N}\sum_{n=1}^{N}H_{sample_n} μ=μsample=N1n=1∑NHsamplen属于无偏估计。
然而,当我们估计方差时,方差计算的方程式略有不同。不是按照样本的个数N归一化,我们将通过样本数N-1归一化 ,也就是我们通常说的有偏估计:
σ 2 = N N − 1 σ s a m p l e 2 = 1 N − 1 ∑ n = 1 N ( x A n − μ s a m p l e ) 2 \sigma^2=\frac{N}{N-1}\sigma^2_{sample}=\frac{1}{N-1}\sum_{n=1}^N(x_{An}-\mu_{sample})^2 σ2=N−1Nσsample2=N−11n=1∑N(xAn−μsample)2
至于为啥一个是有偏一个是无偏,这里就不拓展,有兴趣的读者可能查阅资料。
高斯分布(正态分布)
高斯分布是数学课程中很重要的一课,以伟大的数学家高斯名字命名,很多的自然现象都遵循着高斯分布,所以在很多场景都用到过高斯分布,在很多问题上面进行建模,都会用到高斯分布。而且高斯公式的简洁性让它的地位更加稳固,他只需要一个均值和一个方差就可以表达出他的公式。 F ( x ; μ , σ ) = 1 2 π σ e − ( x − μ ) 2 2 σ 2 F(x;\mu,\sigma)=\frac{1}{\sqrt{2\pi}\sigma}e^{\frac{-(x-\mu)^2}{2\sigma^2}} F(x;μ,σ)=2πσ1e2σ2−(x−μ)2
高斯曲线也称为正态分布的概率密度函数 (PDF)。
下图描述了三个城市的披萨配送时间的 PDF:城市“A”、城市“B”和城市“C”。

- 在“A”城市,平均送货时间为 30 分钟,标准差为 5 分钟。
- 在城市“B”,平均送货时间为 40 分钟,标准差为 5 分钟。
- 在城市“C”,平均送货时间为 30 分钟,标准差为 10 分钟。
我们可以看到城市“A”和城市“B”的披萨配送时间的高斯形状是相同的;但是,它们的中心不同也就是平均时间不同。这意味着在城市“A”,您等待比萨饼的平均时间减少了 10 分钟,而比萨交付时间的分散度是相同的。
我们还可以看到城市“A”和城市“C”的高斯中心是相同的;但是,它们的形状不同。因此,两个城市的平均比萨送货时间相同,但配送的时间分布不同。
下图描述了正态分布的数据分布比例。

- 68.26% 的交货时间在μ ± σ范围(25-35 分钟)
- 95.44% 的交货时间在 μ ± 2 σ 范围(20-40 分钟)
- 99.74% 的交货时间在 μ ± 3 σ 范围(15-45 分钟)
通常,测量误差呈正态分布。卡尔曼滤波器设计的时候也假定测量误差服从正态分布。
随机变量
随机变量X描述了系统的隐藏状态。随机变量是来自随机实验的一组可能值。随机变量可以是连续的或离散的:
- 连续随机变量可以取特定范围内的任何值,例如电池充电时间或马拉松比赛时间。
- 离散随机变量是可数的,例如网站访问者的数量或班级中的学生人数。
在卡尔曼滤波里面只用到了随机变量X的两个性质:均值和方差
估计、准确度和精度
估计是评估系统中的隐藏状态。飞机的真实位置对观察者是隐藏的或者说未知的。我们可以使用雷达等传感器来估计飞机的位置。通过使用多个传感器并应用高级估计和跟踪算法(例如卡尔曼滤波器),可以显着改善估计。每个测量或计算的参数都是一个估计值。
准确度表示测量值与真值的接近程度。
精度描述了同一参数的一系列测量中的稳定性(或者说可变形)。准确度和精密度构成估算的基础。
下图说明了什么是准确度和精度:

高精度(High precision)系统在其测量中具有低方差(即低不确定性),而低精度(low precision)系统在其测量中具有高方差(即高不确定性)。随机测量中的误差产生方差。
低准确度(Low accuracy)系统被称为有偏差系统,因为它们的测量具有内置的系统误差(偏差),如上图左子图和中子图。
通过平均或平滑测量可以显着降低方差的影响。例如,如果我们使用具有随机测量误差的温度计测量温度,我们可以进行多次测量并取平均值。由于误差是随机的,一些测量值会高于真实值,而另一些会低于真实值。估计值将接近真实值。我们进行的测量越多,估计就越接近。
另一方面,有偏差的温度计会在估计中产生恒定的系统误差。
本教程中的所有示例都假设系统是无偏的。
小结

一次测量是一个随机变量,由概率密度函数 (PDF)描述。
所有测量的平均值是随机变量的期望值(Expected Value E(x))。
测量平均值与真实值之间的偏差就是测量的准确性(accuracy of the measurements),也称为偏差(bias)或系统测量误差。
离散度分布就是测量精度(measurement precision),也称为测量噪声、随机测量误差或测量不确定度(measurement uncertainty)。
α−β−γ 滤波
例1:称金条的重量
现在我们进入第一个简单的例子。在这个例子中,我们估计静态系统的状态。静态系统是在合理的时间内不会改变其状态的系统。例如,静态系统可以是一座塔,状态就是它的高度。
在这个例子中,我们估计金条的重量。我们有无偏尺度(可以回顾数学知识小结的篇章,里面有提到什么是有偏的测量),即测量没有系统误差,但测量确实包括随机噪声。
系统就是金条,系统状态就是金条的重量。系统的动态模型是恒定的或者静态的,因为我们假设权重不会在短期内发生变化。为了估计系统状态(即重量),我们可以进行多次测量并取平均值,从而消除随机噪声带来的影响。

在时间点n或者第n次测量之后,估计值 x ^ n n \hat x_{nn} x^nn表示前面所有测量结果的平均值。
x ^ n , n = 1 n ( z 1 + z 2 + z 3 + . . . + z n ) = 1 n ∑ i = 1 n z i \hat x_{n,n}=\frac{1}{n}(z_1+z_2+z_3+...+z_n)=\frac{1}{n}\sum_{i=1}^n{z_i} x^n,n=n1(z1+z2+z3+...+zn)=n1i=1∑nzi

本文深入浅出地介绍了卡尔曼滤波的核心思想及其在预测和数据融合中的应用。通过详细解析一个称重实例,逐步推导出卡尔曼滤波算法的五大公式之一——状态更新等式,并解释了卡尔曼增益的概念。
最低0.47元/天 解锁文章
2457

被折叠的 条评论
为什么被折叠?



