介绍
- 卡尔曼滤波(Kalman filter)是一种利用线性系统状态方程,通过系统输入输出观测数据,对系统状态进行最优估计的算法。它的提出者,鲁道夫.E.卡尔曼,在一次访问NASA埃姆斯研究中心时,发现这种方法能帮助解决阿波罗计划的轨道预测问题,后来NASA在阿波罗飞船的导航系统中确实也用到了这个滤波器。
- 只要是存在不确定信息的动态系统,卡尔曼滤波就可以对系统下一个状态做出推测。即便有噪声信息干扰,卡尔曼滤波通常也能很好工作。因此卡尔曼滤波非常适合不断变化的系统,它的优点还有内存占用较小(只需保留前一个状态)、速度快,是实时问题和嵌入式系统的理想选择。
原理
状态方程:xk=Axk−1+Buk+wkx_k=Ax_{k-1}+Bu_k+w_kxk=Axk−1+Buk+wk
观测方程:zk=Hxk+vkz_k=Hx_k+v_kzk=Hxk+vk
过程噪声:wk∈N(0;Qk)w_k \in N(0;Q_k) wk∈N(0;Qk)
观测噪声(高斯白噪声):vk∈N(0;Rk)v_k \in N(0;R_k)vk∈N(0;Rk)
假设小车以a为加速度,速度为v直线前进,某时刻小车的位置与速度为:
Pi=Pi−1+viΔt+12aΔt2vi=vi−1+aΔtP_i = P_{i-1} + v_i \Delta t + \frac{1}{2}a\Delta t^2 \\ v_i = v_{i-1}+a \Delta tPi=Pi−1+viΔt+21aΔt2vi=vi−1+aΔt
1.二维状态:
xt=[Pv]x_t=\left[ \begin{matrix} P \\ v \end{matrix} \right] xt=[Pv]
[Pv]=[1Δt01][Pi−1vi−1]+[Δt22Δt]ai\left[ \begin{matrix} P \\ v \end{matrix} \right]=\left[ \begin{matrix} 1 & \Delta t