卡尔曼滤波器是一种最优线性状态估计方法(等价于“在最小均方误差准则下的最佳线性滤波器”),所谓状态估计就是通过数学方法寻求与观测数据最佳拟合的状态向量。
在移动机器人导航方面,卡尔曼滤波是最常用的状态估计方法。直观上来讲,卡尔曼滤波器在这里起了数据融合的作用,只需要输入当前的测量值(多个传感器数据)和上一个周期的估计值就能估计当前的状态,这个估计出来的当前状态综合考量了传感器数据(即所谓的观察值、测量值)和上一状态的数据,为当前最优估计,可以认为这个估计出来的值是最可靠的值。由于我们在SLAM中主要用它做位置估计,所以前面所谓的估计值就是估计位置坐标了,而输入的传感器数据包括码盘推算的位置、陀螺仪的角速度等(当然可以有多个陀螺仪和码盘),最后输出的最优估计用来作为机器人的当前位置被导航算法以外的其他程序所调用。
列举一下卡尔曼滤波的优点:采用递归方法解决线性滤波问题,只需要当前的测量值和前一个采样周期的估计值就能够进行状态估计,不需要大量的存储空间,每一步的计算量小,计算步骤清晰,非常适合计算机处理。
首先明确卡尔曼滤波器的前提假设:
- 信息过程的足够精确的模型,是由白噪声所激发的线性、离散和有限维动态系统(可以是时变的);
- 每次测量信号都包含着附加的白噪声分量。
满足上述条件就可以使用卡尔曼滤波器。
xk=Axk1+Buk1+wk1
xkxk为k时刻的系统状态变量,n维向量xk1n×nn×nu∈Rlu∈RlBuk1wk1是n维向量,代表过程激励噪声,它对应了xkxkwkwk~N(0,Q)N(0,Q)
zk=Hxk+vkzk=Hxk+vk
其中观测值zkzk是m阶向量,状态变量xkxkm×nm×nxkxkzkzk的增益。观测噪声vkvkvkvk~N(0,R)N(0,R)
(x,y)(x,y)是直接观测得到的,质点在x、y轴方向速度分别为vxvxvyvyxk=(x,y,vx,vy)Txk=(x,y,vx,vy)Tzk=(x,y)T
xk=Axk1+wk1
A=10000100Δt0100Δt01A=[10Δt0010Δt00100001]
xk=Axk1+wk1→xyvxvyk=1000010