【飞控理论】从零开始学习Kalman Filters之三:非线性状态估算器
本文是博主学习笔记,点击这里观看原视频。
前言
作为一名工程师会经常需要处理非线性系统,所以下面将简单介绍几种应用于非线性系统的滤波器。
1、开始之前先需要知道的几个概念
非线性函数:线性函数是一次函数的别称,则非线性函数即函数图像不是一条直线的函数。非线性函数包括指数函数、幂函数、对数函数、多项式函数等等基本初等函数以及他们组成的复合函数。
状态转移方程:状态转移方程,是动态规划中本阶段的状态往往是上一阶段状态和上一阶段决策的结果。如果给定了第K阶段的状态Sk以及决策uk(Sk),则第K+1阶段的状态Sk+1也就完全确定。
雅可比矩阵:在向量微积分中,雅可比矩阵是一阶偏导数以一定方式排列成的矩阵,其行列式称为雅可比行列式。雅可比矩阵的重要性在于它体现了一个可微方程与给出点的最优线性逼近。因此,雅可比矩阵类似于多元函数的导数。
2、非线性状态估算器
继续回到之前的汽车问题。
现在将状态转换函数和观测函数变为非线性,这里噪声还是被线性的加入系统但是噪声也可能并非线性的加进来。
接下来使用一个例子来展示卡尔曼滤波器对非线性系统进行状态估算出现的问题。卡尔曼滤波是在假设高斯分布的条件下进行的,如果状态转移函数是线性的,那么在经历线性变换之后,分布保持其高斯特性。
但是,如果f(x)是非线性的,那么得到的状态分布可能不是高斯分布。因此,卡尔曼滤波算法可能不收敛。
2.1、扩展卡尔曼滤波器(EKF)
这个时候我们可以使用扩展卡尔曼滤波器,它把非线性函数在当前估算状态的平均值附近进行线性化。在每个时间步,执行线性化,然后将得到的雅可比矩阵用于预测和更新卡尔曼滤波器算法的状态。
使用条件:当系统是非线性,并且可以通过线性化很好地近似时,那么扩展卡尔曼滤波器是状态估算的一个很好的选择。
缺点:
1. 由于复杂的导数,可能难以解析计算雅可比矩阵;
2.以数值方式计算它们则可能需要很高的计算成本;
3.扩展卡尔曼 滤波器不适用于具有不连续模型的系统,因为系统不可微分时雅各比矩阵不存在;
4.高度非线性系统的线性化效果不好。
2.2、无味卡尔曼滤波器(UKF)
它并不像扩展卡尔曼滤波器那样近似非线性函数。无味卡尔曼滤波器近似概率分布。无迹的 卡尔曼滤波器选择一组最小的采样点,让它们的均值和协方差与该分布相同。这些被称为西格玛点,并且围绕均值对称分布。
然后,每个西格玛点通过非线性系统模型计算。并计算非线性变换后的输出点的均值和协方差,计算经验高斯分布,用来计算新的状态值。也就是说通过抽样的方式最大限度的将其转换为高斯分布的形式。
注意,在线性卡尔曼滤波器算法中,在预测步骤中使用状态转移函数计算误差协方差P,让后使用测量量进行更新。但是,在无迹的卡尔曼滤波器中,我们不会以相同的方式计算它,因为我们以经验方式得到它。
2.3、粒子滤波器(PF)
和无味卡尔曼滤波器比较相像的是粒子滤波器(PF),它使用的样本点称为粒子。马无还卡尔曼滤波器的显着差异在于,粒子滤波器近似任意分布,所以它不仅限于高斯假设。当然这种条件下它所需要的粒子数要远远大于无迹卡尔曼滤波器所需要的粒子数。
2.4、总表
总的来说,卡尔曼滤波器仅适用于线性系统,对于线性系统的状态估算可以使用EKF,UKF或者PF,使用EKF时要确保非线性系统模型能很好的进行线性化,粒子滤波器是唯一一个可以适用于任何分布的滤波器。