卡尔曼滤波——二轮平衡小车

本文解释了为何需要滤波,特别是在使用MPU6050传感器时。介绍了卡尔曼滤波作为一种线性最小方差估计方法,通过结合多组观测数据减小不确定性。文章详细阐述了卡尔曼滤波的基本原理,包括增益计算和在单数据情况下的应用,以及一个简单的例子来说明预测和调整信赖程度的过程。
摘要由CSDN通过智能技术生成

为什么要滤波?
因为利用mpu6050(角速度传感器和加速度传感器)测量得到数据被噪声污染,为了得到稳定可靠的数据从而要进行滤波。
常见的滤波算法有很多种,根据其优缺点分析选择了卡尔曼滤波算法。

什么是卡尔曼滤波
卡尔曼滤波即属于一种线性最小方差估计法。即使估计所得值与实际值的均方误差达到最小,且估计具有线性形式。

卡尔曼滤波的基本原理是什么
假设对同一个目标有两组观测数据,这两组数据服从高斯分布,即:
X A ∼ N ( μ A , σ A 2 ) X B ∼ N ( μ B , σ B 2 ) X_{A} \sim N \left ( \mu _{A},\sigma ^{2} _{A} \right ) \\ X_{B} \sim N \left ( \mu _{B},\sigma ^{2} _{B} \right ) XAN(μA,σA2)XBN(μB,σB2)

对这两组数据进行加权的线性组合,即可得到更加准确的观测数据,即:
X ^ = k X A + ( 1 − k ) X B k ∈ [ 0 , 1 ] X ^ ∼ N ( k μ A + ( 1 − k ) μ B , k 2 σ A 2 + ( 1 − k ) 2 σ B 2 ) \hat{X}= kX_{A} + \left ( 1-k\right )X_{B} \qquad k\in \left [ 0,1 \right ] \\ \hat{X}\sim N \left (k \mu _{A} + \left ( 1-k\right ) \mu _{B},k^{2}\sigma ^{2} _{A}+\left(1-k\right )^{2}\sigma ^{2} _{B} \right ) X^=kXA+(1k)XBk[0,1]X^N(kμA+(1k)μBk2σA2+(1k)2σB2)
令组合后的数据方差最小,即不确定性最小,可得:
k = σ B 2 σ A 2 + σ B 2 X ^ ∼ N ( σ B 2 σ A 2 + σ B 2 μ A + σ A 2 σ A 2 + σ B 2 μ B , σ A 2 σ B 2 σ A 2 + σ B 2 ) k=\frac{\sigma ^{2}_{B}}{\sigma ^{2}_{A}+\sigma ^{2}_{B}} \\ \hat{X}\sim N \left (\frac{\sigma ^{2}_{B}}{\sigma ^{2}_{A}+\sigma ^{2}_{B}} \mu _{A} + \frac{\sigma ^{2}_{A}}{\sigma ^{2}_{A}+\sigma ^{2}_{B}} \mu _{B},\frac{\sigma ^{2}_{A}\sigma ^{2}_{B}}{\sigma ^{2}_{A}+\sigma ^{2}_{B}} \right ) k=σA2+σB2σB2X^N(σA2+σB2σB2μA+σA2+σB2σA2μBσA2+σB2σA2σB2)

最终整理如下:
X ^ ∼ N ( μ A + K g ( μ B − μ A ) , ( 1 − K g ) σ A 2 ) 增益: K g = σ A 2 σ A 2 + σ B 2 新息: μ B − μ A \widehat{X} \sim N\left(\mu_{A}+K_{g}\left(\mu_{B}-\mu_{A}\right),\left(1-K_{g}\right) \sigma_{A}^{2}\right)\\ 增益:K_{g}=\frac{\sigma ^{2}_{A}}{\sigma ^{2}_{A}+\sigma ^{2}_{B}} \\ 新息:\mu_{B}-\mu_{A} X N(μA+Kg(μBμA),(1Kg)σA2)增益:Kg=σA2+σB2σA2新息:μBμA
那么,如何在只有一组数据的情况下,运用最小方差线性估计呢?
假设有一组不断补充更新的数据a,b,c,d,e……对其进行不断地迭代估计,每测出一个新的数据,就将新的数据与之前的估计结果值进行最小方差线性估计。
最优估计 值 n = 最优估计 值 n − 1 + K n ( 测量 值 n − 最优估计 值 n − 1 ) 卡尔曼增益 K n = 最优估计值误 差 n − 1 最优估计值误 差 n − 1 + 测量值误 差 n 最优估计值误 差 n − 1 = ( 1 − K n − 1 ) 最优估计值误 差 n − 2 最优估计值_{n}=最优估计值_{n-1} +K _{n}\left(测量值_{n}-最优估计值_{n-1}\right)\\ 卡尔曼增益K _{n}=\frac{最优估计值误差_{n-1}}{最优估计值误差_{n-1}+测量值误差_{n}}\\ 最优估计值误差_{n-1}=\left(1-K_{n-1}\right)最优估计值误差_{n-2} 最优估计n=最优估计n1+Kn(测量n最优估计n1)卡尔曼增益Kn=最优估计值误n1+测量值误n最优估计值误n1最优估计值误n1=(1Kn1)最优估计值误n2

假设有个小孩每个月都会受到一笔零用钱。他每收到一笔钱,都会对他收到的下一笔钱进行预测,而收到下一笔钱后,他会根据自己的预测结果和实际结果进行对比,从而调整对于预测结果的信赖程度。大致思路如此,不过真正的算法过程更为严谨。

卡尔曼滤波代码实现

写的比较随意,以后有时间再继续补充

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值