控制算法学习 一、卡尔曼滤波(1)以小车为例

前言

卡尔曼滤波(Kalman Filter, KF)是最经典的传感器滤波/去噪/估计/预测算法,适用于线性系统的最优状态估计,并且衍生出扩展卡尔曼滤波(EKF)、迭代卡尔曼滤波(IKF),无迹卡尔曼滤波(UKF)和容积卡尔曼滤波(CKF)等。

本文将非常简单的介绍和推导卡尔曼滤波,加深KF的理解记忆。

线性系统

什么是线性系统?控制领域中,系统输入输出满足叠加原理(叠加性和齐次性)就是线性系统。

一个简单的例子,一维路径上运行的匀速小车,时间(输入)和位置(输出)就是线性的。

状态方程和观测方程

如果只知道小车的初始速度,怎么获得小车在任一时刻的位置呢?

第一种方法是直接通过匀速计算: p = v ∗ t p=v*t p=vt,但是现实中路面可能会有崎岖,导致结果出现偏差;
第二种方法是在小车上加传感器(比如GPS),但GPS也会有测量误差;

因此以上两种方法就分别可以用状态方程和观测方程来表示:
x k = A x k − 1 + B u k − 1 + w k − 1 , w k ∼ [ 0 , Q ] z k = H x k + v k , v k ∼ [ 0 , R ] \begin{aligned} & x_k = Ax_{k-1} + Bu_{k-1} + w_{k-1}, w_k\sim [0, Q] \\ & z_k = Hx_k+v_{k} ,v_k\sim[0, R] \end{aligned} xk=Axk1+Buk1+wk1,wk[0,Q]zk=Hxk+vk,vk[0,R]
A , B , H A,B,H A,B,H分别表示状态转移矩阵,控制(输入)转换矩阵,观测转换矩阵。

w k , v k w_k,v_k wk,vk都是高斯白噪声,表示了系统误差(过程噪声)和测量误差。

x k , z k x_k,z_k xk,zk是向量,表明k时刻的系统状态。

举例

对于匀速运动的小车而言,可以这样建模:
状态方程
[ p v ] t = [ 1 Δ t 0 1 ] [ p v ] t − 1   + w k − 1 \left [ \begin{matrix} p \\ v \\ \end{matrix} \right ]_{t}= \left [ \begin{matrix} 1 & \Delta t \\ 0 & 1 \end{matrix} \right ] \left [ \begin{matrix} p \\ v \end{matrix} \right ]_{t-1} \ + w_{k-1} [pv]t=[10Δt1][pv]t1 +wk1
观测方程(z是GPS读数)
[ z ] t = [ 1 ] [ p ] t   + v k \left [ \begin{matrix} z \\ \end{matrix} \right ]_{t}= \left [ \begin{matrix} 1 \\ \end{matrix} \right ] \left [ \begin{matrix} p \end{matrix} \right ]_{t} \ + v_{k} [z]t=[1][p]t +vk

卡尔曼滤波

KF有两个流程,先预测,再更新,其实就是把预测得到的状态与观测得到的状态,以某种方式进行加权更新,得到状态的最优估计。

状态预测

预测过程有两个公式:
x ~ k = A x k − 1 + B u k − 1 ( 1 ) P ~ k = A P k − 1 A T + Q ( 2 ) x k = [ p v ] P k = [ σ p p σ p v σ v p σ v v ] \begin{aligned} & \tilde x_k = Ax_{k-1}+Bu_{k-1} &\quad (1)\\ & \tilde P_k=AP_{k-1}A^T+Q &\quad (2)\\ & x_k= \left [ \begin{matrix} p \\ v \\ \end{matrix} \right ] \quad P_{k}= \left [ \begin{matrix} \sigma_{pp} & \sigma_{pv} \\ \sigma_{vp} & \sigma_{vv} \\ \end{matrix} \right ] \end{aligned} x~k=Axk1+Buk1P~k=APk1AT+Qxk=[pv]Pk=[σppσvpσpvσvv](1)(2)
这里增加了一个状态协方差矩阵 P P P(对称矩阵),用来描述状态量之间的关系。

这两个公式描述了:
(1) 将k-1时刻的状态 x k − 1 x_{k-1} xk1,通过状态转移矩阵和控制转换矩阵,预测k时刻的状态 x k x_k xk;
(2) 将k-1时刻的状态协方差矩阵 P k − 1 P_{k-1} Pk1,通过状态转移矩阵和过程噪声,预测k时刻的状态协方差矩阵 P k − 1 P_{k-1} Pk1

公式(1)容易理解,公式(2)需要从随机过程上解释:

X = [ x 1 , x 2 , … , x n ] T , Y = [ y 1 , y 2 , … , y n ] T X=[x_1,x_2,\dots,x_n]^T, Y=[y_1,y_2,\dots,y_n]^T X=[x1,x2,,xn]T,Y=[y1,y2,,yn]T X , Y X,Y X,Y独立,则有 P ( A X + Y ) = A P X A T + P Y P(AX+Y)=AP_XA^T+P_Y P(AX+Y)=APXAT+PY

还是用小车作为例子,公式(1)其实就是在用匀速运动模型,通过上一时刻小车的位置预测当前小车的位置。公式(2)则是通过上一时刻小车的速度和位置关系,预测当前速度和位置的关系,并且叠加过程噪声带来的不确定性 Q Q Q

状态更新

更新过程有三个公式:
K k = P ~ k H T ( H P k H T + R ) − 1 x k = x ~ k + K k ( z k − H x ~ k ) P k = ( E − K k H ) P ~ k \begin{aligned} & K_k = \tilde P_kH^T(HP_kH^T+R)^{-1} \\ & x_k = \tilde x_k + K_k(z_k - H \tilde x_k) \\ & P_k = (E-K_kH)\tilde P_k \end{aligned} Kk=P~kHT(HPkHT+R)1xk=x~k+Kk(zkHx~k)Pk=(EKkH)P~k
这里增加了卡尔曼增益 K k K_k Kk,实际上就是预测和观测权重。

这三个公式描述了:
(1)当前卡尔曼增益的计算;
(2)通过卡尔曼增益,进行预测\观测值的加权;
(3)通过卡尔曼增益,更新协方差矩阵;

本质上,以上三个公式是对预测状态观测状态这两个高斯分布进行相乘,获得的高斯分布,就是最优状态估计。所谓的卡尔曼增益,就是预测状态的高斯分布与融合后的高斯分布的不确定性(协方差矩阵)的比值

卡尔曼滤波流程图

最后用一张图来描述预测和更新过程:
在这里插入图片描述

  • 3
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡尔曼滤波算法是一种用于估计系统状态的递归滤波算法,它能够通过融合传感器测量值和系统模型来提高状态估计的准确性。扩展卡尔曼滤波算法(Extended Kalman Filter,EKF)是卡尔曼滤波算法的一种扩展,用于非线性系统的状态估计。 卡尔曼滤波算法的原理如下: 1. 预测步骤:根据系统的动态模型,通过状态转移方程预测系统的状态,并计算预测的协方差矩阵。 2. 更新步骤:根据传感器的测量值,通过观测方程计算系统的观测值,并计算观测噪声的协方差矩阵。 3. 卡尔曼增益计算:根据预测的协方差矩阵和观测噪声的协方差矩阵,计算卡尔曼增益,用于融合预测值和观测值。 4. 状态更新:根据卡尔曼增益和观测值,更新系统的状态估计值,并更新协方差矩阵。 扩展卡尔曼滤波算法的原理在于对非线性系统进行线性化处理,通过在预测和更新步骤中使用一阶泰勒展开来近似非线性函数。具体步骤如下: 1. 预测步骤:使用非线性状态转移函数对系统状态进行预测,并计算预测的协方差矩阵。同时,通过对状态转移函数进行线性化,得到状态转移矩阵和过程噪声协方差矩阵。 2. 更新步骤:使用非线性观测函数计算观测值,并计算观测噪声的协方差矩阵。同时,通过对观测函数进行线性化,得到观测矩阵和观测噪声协方差矩阵。 3. 卡尔曼增益计算:根据预测的协方差矩阵、观测噪声的协方差矩阵、状态转移矩阵和观测矩阵,计算卡尔曼增益。 4. 状态更新:根据卡尔曼增益和观测值,更新系统的状态估计值,并更新协方差矩阵。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值