教程链接: https://www.bilibili.com/video/BV1nh411w7b4/
核心代码在
kf_eigen.hpp
文件里
卡尔曼滤波是一种常用的状态估计方法,其基本原理是对系统状态进行最优估计。其主要思想是将系统的状态分为先验状态和后验状态,通过将先验状态和观测值进行加权平均,得到最优估计状态。
卡尔曼滤波增益的计算是使后验误差协方差矩阵对角线上元素和(迹)最小(协方差最小)
卡尔曼滤波假设系统状态和测量噪声都服从零均值的高斯分布,也就是正态分布的期望值为0。这是因为卡尔曼滤波是一种线性高斯滤波器,它假设噪声是零均值的高斯白噪声,并且系统状态的转移和测量模型都是线性的。在实际应用中,通常可以通过对干扰的均值进行估计,然后进行补偿处理,从而使得干扰的期望值为零。
由现代控制理论知识可知:
其中
相比现控方程多考虑到噪声干扰。分为以下两个:
-
$W_{k}$ 过程噪声:符合正态分布,期望为0,协方差矩阵为${Q}$ -
$V_{k}$ 测量噪声:符合正态分布,期望为0,协方差矩阵为$R$
将模型考虑到卡尔曼滤波方程中:
注意到几个点:
- 对系统进行建模出现的噪声
$W_{k}$ 和$V_{k}$ 不会直接出现,而是成为$Q_{k}$ 和$R_{k}$ 分别代表系统噪声协方差矩阵和观测噪声协方差矩阵 - 这里的
$Z_{k}$ 成为了观测值(也就是实际计算中的一个输入)
后面的五大公式都是基于这个方程建立的
预测方程两个:
预测方程和系统的物理模型有关,根据物理模型推算下一时刻的状态和协方差
其中,
更新方程三个:
- 卡尔曼增益计算方程:
- 先验误差协方差矩阵更新方程:
或者简化形式是(两者等价):
- 状态量更新方程:
融合三轴加速度计和三轴角速度计
- 对三轴角速度计进行建模,构建两个预测方程
- 使用三轴加速度计进行观测
状态量为
状态转移矩阵为
输入直接是角速度
根据建模内容,可以知道: