这是一个针对编码器采集的速度的卡尔曼滤波。原汁原味的卡尔曼滤波代码参考:
https://github.com/TKJElectronics/KalmanFilter,是关于mpu6050
之类的imu
的滤波算法
详细的推到过程参考:
http://blog.tkjelectronics.dk/2012/09/a-practical-approach-to-kalman-filter-and-how-to-implement-it/
有关卡尔曼滤波和卡尔曼增益的详细推导过程,目前我所找到的最好的教程参考B
站:
CAN神 https://www.bilibili.com/video/BV1ez4y1X7eR
kalmanfilter.ods
是用LibreOffice
做的可视化图表,用EXCEL
打开就行。
上一时刻的后验估计状态用${\hat{x}}{k-1|k-1}$表示;先验状态( priori state
)用${\hat{x}}{k|k-1}$表示,先验状态是根据上一个状态估计出的先验值;后验状态(posteriori state
)用${\hat{x}}_{k|k}$表示;$x_k$代表真实值。
系统k
时刻的状态为:
其中 state matrix
:
其中v
是速度,a
是加速度,速度的导数。
状态转移矩阵 state transition model
:
0
均值的高斯分布的过程噪声:
Excel
中这两个参数观察曲线变化,关于$Q_k$的值初始化参考kalman滤波理解三:协方差矩阵的计算_JK-CSDN博客_误差协方差矩阵
在观测空间observation
获取测量值$z_k$和真实值$x_k$:
本文中的观测量是速度v
,其中$v_k$是测量噪声measurement noise
,$H$是观测模型observation model
观测噪声符合高斯分布:
Excel
表中数据和图。
接下来是两个主要步骤,预测和校正
下面是先验误差状态协方差矩阵priori error covariance matrix
:
此矩阵代表对于当前估计值的置信度,这里$P$是一个2x2
矩阵:
首先计算测量值与通过先验状态观测值的差,可正可负,叫做innovation
,革新?
观测模型$H$ 的作用是,将先验状态${\hat{x}}_{k|k-1}$映射到传感器测量值所在的观测空间
计算innovation
协方差矩阵:
同理,$H$的作用是将先验误差协方差矩阵映射到观测空间。测量值的噪音越大,则$S$越大,代表我们不太相信新的测量值。
接下来是卡尔曼增益Kalman gain
,指明我们相信innovation
的程度:
例如我们不太相信innovation
而是相信先验估计值,则$P$会比较小,$S$会比较大。
如果不知到初始状态值可以设置误差协方差矩阵为:
如果已知初始状态:
然后更新后验状态:
最后更新后验误差协方差矩阵posteriori error covariance matrix
:
其中$I$是单位对角矩阵。