作为学习自动驾驶的一部分,在这里把学习无损卡尔曼滤波的过程记录一下,以下内容会有很多都是参考别的博客,下面也会给出链接:
无损卡尔曼滤波UKF的原理
参考链接: https://blog.csdn.net/lijil168/article/details/83315595
从前面学习卡尔曼滤波,及扩展卡尔曼滤波的过程来看,KF的核心原理是根据系统的估算值及协方差,测量值及协方差推算出最优的估计值及协方差:如图
再通过预测方程,测量方程,更新方程这一系列过程,不断的迭代,预测,更新位置,达到最佳的估计状态,上篇博客中给出了数学推导;
卡尔曼滤波的推测过程:https://blog.csdn.net/Young_Gy/article/details/78542754?utm_source=blogxgwz5
EKF是将非线性方程通过泰勒近似展开线性化之后,继续使用上面的公式。
而UKF类似于将高斯分布中的均值,方差通过非线性方程处理后,去匹配预测方程的非线性变换。一种通过处理状态转移方程,后者通过处理高斯分布。
下面的处理参考这一篇博客:https://blog.csdn.net/datase/article/details/79376461
在KF中,假设初始状态满足高斯分布,如X ∼ N(µ, σ^2 ),如经过非线性状态转移方程以后,如经过 Y = sin(X)变换后,Y的期望和方差这么求呢。
还有一种思路是对X进行采样,比如取500个采样点(这些采样点可以称为sigma点),然后求取这些采样点的期望和方差。当采样值足够大时,结果与理论值接近。这种思路的问题显而易见,当随机变量维数增大时采样点的数量会急剧增加,比如一维需要500个采样点,二维就需要500^=250,000个采样点,三维情况下需要500^3=125,000,000个采样点,显然这样会造成严重的计算负担。无迹卡尔曼滤法中采用一种方法来选取2n+1个sigma点,n为随机变量维数。
如上图所示,考虑正态分布曲线的对称性,选取3个sigma点来计算(sigma点的选取方法不唯一),其中一个是均值,另外两个sigma点关于均值对称分布。比如三个点可选为:
χ0 = μ;
χ1 = μ + σ;
χ2 = μ - σ;
然后选取合适的权值Wi满足如下关系:(这里出现的权值是不是因为采样点少了,但是又要达到一样的效果而出现的一个参数呢?)
类比推广到多维随机变量X ∼ N(μ ,Σ),Σ为协方差矩阵,采用Cholesky分解计算出矩阵L(Σ = LLT) ,矩阵L可以类比一维情况下的标准差σ。则sigma点可以写成下面的形式:
χ0 = μ;
χi = μ + cL;
χn+i = μ - cL; c为一个正的常数
则对于非线性变换Y=g(X),可以计算出变换后的期望和方差:
关键问题是如何选取sigma点和权值。常见的一种方法是第一个sigma点选为χ0=μ,n是随机变量X的维数,α,κ,λ均为常数,并有如下关系:
接下来要计算权值。对求期望来说,第一个sigma点的权值为:
对求方差来说,第一个sigma点的权值为如下,式子中的β也为一个常数
对于剩下的2n个sigma点来说求期望的权值和求方差的权值都相同:
因此,一共有三个常数(α,β,κ)需要我们来设定。根据其它参考资料,选择参数的经验为:https://blog.csdn.net/lijil168/article/details/83315595
简述UFK过程
https://blog.csdn.net/Young_Gy/article/details/78542754
找到关键点后如何求出新的状态
这一部分可以参考以下两篇文章:
https://blog.csdn.net/u013102281/article/details/59109566?utm_source=blogxgwz3
https://blog.csdn.net/Young_Gy/article/details/78542754
https://blog.csdn.net/AdamShan/article/details/78359048
上面的内容比较多,我也自己整理了一下思路: