本文旨在以最快的速度学会卡尔曼滤波的使用方法,并不做理论推导和进一步的深入理解
诶我草了我一个学计算机的为什么要学现代控制理论的知识啊
五条最重要的公式#
状态预测 x^k∣k−1协方差预测 Pk∣k−1卡尔曼增益计算 Kk状态更新 x^k∣k协方差更新 Pk∣k=Fkx^k−1∣k−1+Bkuk=FkPk−1∣k−1FkT+Qk=Pk∣k−1HkT(HkPk∣k−1HkT+Rk)−1=x^k∣k−1+Kk(zk−Hkx^k∣k−1)=(I−KkHk)Pk∣k−1
什么是x^状态?#
x^表示对系统状态的估计值,通常是一个向量,包含了系统的各种状态变量,比如位置、速度、加速度等
比如一个物体正在直线运动,它当前的真实状态就可以表示为
x=positionvelocityacceleration
x^和x有什么区别?#
x表示真实状态,而x^表示状态的估计值
NOTE真实状态x是我们不知道的,而卡尔曼滤波的目的就是通过测量值和估计值x^k∣k−1计算出x^k∣k来尽量接近真实状态x
x^k∣k−1是什么意思?#
x^k∣k−1表示在当前时刻k,基于时刻k−1的信息进行的对当前时刻k预测,但并未融合k时刻的测量值zk,也称为先验估计/先验状态
x^k∣k又是什么意思?#
x^k∣k是在当前时刻k,由x^k∣k−1和k时刻的测量值zk计算得出的更接近k时刻的真实状态的估计值,也称为后验估计/后验状态
这个后验状态x^k∣k就是我们最终想要的结果
什么是观测矩阵Hk?#
观测矩阵Hk定义了如何从状态变量x^映射到测量值zk
TIP举个例子,假设我们使用的测量仪器只能测量物体的位置,不能测量速度和加速度
所以Hk就应该是
Hk=[100]因为
z=Hkx=[100]positionvelocityacceleration=[position]
什么是状态转移矩阵Fk?#
状态转移矩阵Fk定义了系统状态如何从时刻k−1转移到时刻k
举个例子,一个物体在匀加速直线运动,假设每次时间步长为Δt,那么状态转移矩阵Fk可以表示为
Fk=100Δt1021Δt2Δt1因为
xk=Fkxk−1=100Δt1021Δt2Δt1positionvelocityaccelerationk−1=positionvelocityaccelerationk换成高中物理的写法就是
pkvkak=pk−1+vk−1Δt+21ak−1Δt2=vk−1+ak−1Δt=ak−1这下看懂了
什么是控制输入矩阵Bk和uk?#
控制输入矩阵Bk定义了外部控制输入uk如何影响系统状态
TIP简单来说就像你在匀速驾驶一辆车,突然猛踩了一下油门,车的加速度会增加,从而影响车的速度和位置
而控制输入矩阵Bk就是用来描述这种外部控制(猛踩一下油门)对系统状态(车的加速度)的影响
而uk就是这个外部控制输入的具体数值,也就是k时刻踩油门踩了多深
举个例子,假设我们在k时刻对直线运动的物体施加一个额外的力Δforce作为控制输入uk
uk=Δforce那么根据牛顿第二定律F=ma就能得到加速度的改变量
Δa=mΔforce因为卡尔曼滤波是个离散系统,所以我们不关心加速度的连续变化,只关心在每个时间步长Δt内加速度的变化量Δa
控制输入矩阵Bk就可以表示为
Bk=21Δt2m1Δtm1m1Bkuk=21Δt2m1Δtm1m1Δforce=ΔpositonΔvelocityΔacceleration
什么是过程噪声协方差矩阵Qk?#
过程噪声协方差矩阵Qk表示系统在状态转移过程中可能存在的随机扰动或不确定性
比如风吹、路面不平等因素都会影响物体的运动状态,这个在k时刻对物体的不确定影响我们就用Qk来表示
什么是测量噪声协方差矩阵Rk?#
测量噪声协方差矩阵Rk表示测量仪器本身存在的误差或不确定性
比如测量仪器的精度有限,可能会有一定的误差,这个误差我们就用Rk来表示
什么是协方差矩阵P?#
主包也不知道,等主包学完概率论了再来补充
更适合程序中使用的协方差更新公式#
由于浮点数运算是有误差的,直接使用
Pk∣k=(I−KkHk)Pk∣k−1可能会导致协方差矩阵P变得不正定
所以更推荐使用下面的公式来更新协方差矩阵P
Pk∣k=(I−KkHk)Pk∣k−1(I−KkHk)T+KkRkKkT