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