符号意义
-
x^:状态x的估计状态,后验
-
xˉ:估计状态x^k的预估值,先验
-
P:协方差
一、卡尔曼滤波(KF)
1.1 状态观测器(State Observers)

x˙=Ax+Buy=Cx
x^˙=Ax^+Bu+K(y−y^)y^=Cx^
eobs=x−x^
使数学模型和实际系统相减

根据e˙obs=(A−KC)eobs求eobs积分为
eobs(t)=e(A−KC)teobs(0)

在上式中,若A−KC<0,eobs会随着t的增加而减少,最终趋向于0,即x^接近x。
在这个过程中,KC非必需,A也可以使eobs随时间衰减,但因模型中不确定性的存在,A无法确定,因此只能通过K控制衰减速度,使x^更快地收敛到x,确定K的最佳方法就是使用卡尔曼滤波器。
1.2 公式推导
{xk=Akxk−1+uk+wk (运动方程)zk=Ckxk+vk (状态方程)
wk和vk为噪声,此处假设符合零均值的高斯分布
wk∼N(0,R),vk∼N(0,Q)
P(x)为事件x发生的概率,P(y)为事件y发生的概率,P(x)和P(y)称为先验概率(prior probability),P(x∣y)为事件y发生的条件下,事件x发生的概率,称为x的后验概率(posterior probability)
贝叶斯定理是关于随机事件A和B的条件概率的一则定理。
P(A∣B)=P(A)P(B)P(B∣A)
贝叶斯定理简单描述为:
新信息出现后的A概率=A概率×新信息带来的调整
通过运动方程确定xk的先验概率
P(xk∣x0,u1:k,z1:k−1)=N(Akx^k−1+uk,AkP^k−1AkT+R)
这一步称为预测,即根据输入,从上一个时刻状态推断当前状态
xˉk=Akx^k−1+uk,Pˉk=AkP^k−1AkT+R
xˉk和Pˉk为状态和协方差的先验分布,是根据公式直接通过上一个状态计算获得,用于卡尔曼增益和后验x^k,P^k的计算。
P(zk∣xk)=N(Ckxk,Q)
P(zk∣xk)为观测数据zk的后验概率,描述某个状态下xk会产生怎样的观测数据。
设状态分布为xk∼N(x^k,P^k),通过两组概率的乘法获得
N(x^k,P^k)=N(Ckxk,Q)N(xˉk,Pˉk)
求解上式可以获得
x^k=xˉk+K(zk−Ckxˉk)P^k=(I−KCk)Pˉk
其中
K=P^kCkTQ−1I=KCk+P^kPˉk−1
此处K实际上可以不通过P^k计算获得。
总结

二、扩展卡尔曼滤波(EKF)
卡尔曼滤波针对的是线性系统,当需要拓展到非线性系统时,通常使用扩展卡尔曼滤波器(Extended Kalman Filter,EKF),通过对运动方程以及观测方程在某个点附近进行一阶泰勒展开并保留一阶项,进行线性化操作,然后按照线性系统进行推导。

{xk=f(xk−1,uk)+wk (运动方程)zk=h(xk)+vk (状态方程)
雅可比矩阵为


线性化系统
△xk≈F△xk−1+wk△zk≈H△xk+vk
总结
- 预测
xˉk=f(x^k−1,uk),Pˉk=FP^kFT+Rk
-
更新
卡尔曼增益Kk
Kk=PˉkHT(HPˉkHT+Qk)−1
后验概率
x^k=xˉk+Kk(zk−h(xˉk)),P^k=(I−KkH)Pˉk
三、卡尔曼滤波讨论
不同卡尔曼滤波算法对比

EKF的局限性
- 由于复杂的导数,可能导致难以计算雅可比矩阵
- 通过数值法计算,会导致计算成本的大量增加
- EKF不适用于具有不连续模型的系统,因为系统不可微分时,雅可比矩阵不存在
- 高度非线性系统的线性化效果不好
参考
[Matlab官方教程]卡尔曼滤波器(Kalman Filters)(很好的****)
怎样用非数学语言讲解贝叶斯定理(Bayes theorem)?
初学者的卡尔曼滤波——扩展卡尔曼滤波(一)
图说卡尔曼滤波,一份通俗易懂的教程
卡尔曼滤波器(Kalman Filters)
Understanding Kalman Filters
《视觉SLAM十四讲》