datetime:2024/6/16 16:07
author:nzb
Kalman Filtering(卡尔曼滤波)
入门
^
表示估计值
-
表示先验估计值
引入
适用系统:线性高斯系统
线性:满足叠加性和齐次性
高斯:噪声满足高斯分布(正态分布)
μ
:均值σ
:方差
宏观意义:滤波即加权
- 理想状态:信号 1 + 噪声 0
- 低通滤波:低频信号 1 + 高频信号 0
- 因为大多情况下高频信号一般为噪声
- 卡尔曼滤波:估计值 (权重) + 观测值 (权重)
进阶
状态空间表达式(跟卡尔曼滤波方程相似)
状态方程
- :当前状态的当前值
- :状态转移矩阵,即当前状态上一刻的值乘上某种关系作用到
- : 上一时刻该状态的值
- : 控制矩阵,即输入乘上某种关系作用到
- : 输入,给到 的输入
- : 过程噪声
观测方程
- : 要观察的量
- : 乘上某种关系得到你要观察的值
- : 状态量
- : 观测噪声
示例
举个例子看一下,这个是火炉对水加温, 那么这个蓝色的点呢就是水温的状态,这个红色是温度计,那么温度计是一个传感器, 输出是一个yk,就是水温的值,那么很明显,这个时候这个C就是1。 然后这边有一个误差,温度计也有误差,所以它输出的是观测方程下红色的那个方程, 然后这边水温假设它是一个线性变化的,那么这个时候b乘uk就相当于得塔,每一时刻会增加多少度的温度, 然后我们在这边的过程噪声也可以考虑进去,因为除了火炉对水加热之外, 还有外面的环境,会影响它,所以它的过程温度并不是那么理想,然后这个要加一个过程噪声, 然后这边是一个当前的水的温度值,温度值的话是基于之前的水温的,那么这个时候A只要取一个单位矩阵就好了。 所以这个为状态方程下红色的方程,那么用一个方框图来表示如上图所示。
高斯分布
直观图解
参数分析
- 高斯白噪声: 和
- ;过程噪声,符合正态分布,均值为0,方差为
- :观测噪声,符合正态分布,均值为0,方差为
- 示例:解释 和 定义
GPS
检测到一辆车的position
,开了1000m
,但是GPS
还是有精度误差的,所以为1000 ± δ m
δ
就为噪声(误差),则δ
符合正态分布,方差为1m
噪声(假设),所以
- 示例:解释 和 定义
- 假设有一个滑板,假设速度为
5m/s
,由于风的作用,所以变成了5m/s ± δ m/s
δ
就为噪声(误差),则- 假设
δ
符合正态分布,方差为1m/s
噪声(假设),所以
- 假设有一个滑板,假设速度为
方差
- 一维方差
- 过程和观测方差: 和
- 状态(估计值)方差:,一个值,该状态也符合正态分布
- 二维协方差
- 多维协方差矩阵
C
- 一维方差
- 高斯白噪声: 和
超参数:
Q、R
,相当于调PID
Q
:过程噪声方差R
:观测噪声方差- 主要就是调这两个参数
卡尔曼直观图解
x
轴为位置,y
轴为概率密度- :无横杆,表示最优估计值,也叫修正值,后验估计值,卡尔曼滤波输出的值
- :先验估值值,基于最优估计值得出的
- :观测值,相当于直接等于
x_{k}
,传感器直接测量出来的值 - :当前时刻的最优估计值,明显方差更小,因为滤波次数过多,方差变小,趋于稳定
- 当前的最优估计值是由:先验估计值 和 当前的观测值取公有的部分得到一个最优的值
放弃
卡尔曼公式理解
实现过程:使用上一次的最优结果(先验估计)预测当前的值,同时使用观测值(传感器的值)修正当前值,得到最优结果
- 预测
- 基于之前的最优估计推出当前阶段的先验估计
- 协方差公式,对应上面的 的协方差矩阵
更新
- 最优估计(估计值+观测值),先验估计 加上卡尔曼增益乘上观测值减去先验估计值, 为观测值
- 后验估计协方差矩阵更新,基于原来预测估计的协方差矩阵乘以一个因子得出
示例
先验估计
先验估计协方差:
- 是由上面先验估计得出的,
Q
是上面先验估计的过程噪声- 通常:
cov(x, x) = Var(x)
- 通常:
cov(Ax, Ax) = Acov(x,x)A^T
- 通常:
cov(Ax+k, Ax+k) = Acov(x,x)A^T
,k
为常数 - 化简就是最初的先验估计协方差公式
- 通常:
- 是由上面先验估计得出的,
测量方程:
Z_v
取0是为了凑维度,H
和后面那个矩阵可以写成[[1,0][0,0]]
状态更新
调节超参数
Q
与R
的取值- 公式层面理解
- 当需要更信任观测值(观测值也有噪声)的时候,K就需要增大,R越小,K越大,越相信观测值
- 当运动模型很完美,更相信估计值,需要K小,则Q小一点,R大一点
- 其他层面理解
- Q:过程噪声,如果运动模型非常完美,比如小车在光滑地面,没有风阻,这个时候运动模型基本没有噪声,则Q可以小一点,否则大一点
- R:观测噪声,根据传感器觉得,如果精度不高噪声大,R需要大一点
- 公式层面理解
和 的取值
- 比较随意,经过迭代后期会趋于稳定值
- 习惯取 ,P0往小的取,方便收敛(一般取1,不可为0)
卡尔曼滤波的使用
- 选择状态量,观测量
- 构建方程
- 初始化参数:
Q
,R
,P0
,x0
- 代入公式迭代
- 调节超参数:
Q
,R
,需要多次人工调节
精通
卡尔曼滤波公式回顾
- 离散控制系统不需要滤波
机器人应用举例
陀螺仪滤波
- 选择状态量,观测量
- 明确一下参数
- 陀螺仪噪声协方差:
Q_angle
,对应状态量的angle
- 陀螺仪漂移噪声协方差:
Q_gyro
,对应状态量的Q_bias
- 角度测量噪声协方差:
R_angle
,对应观测量的new_angle
- 陀螺仪测得的角速度:
newGyro
- 采样周期:
dt
- 陀螺仪噪声协方差:
- 明确一下参数
- 构建方程
- 预测当前角度
- 预测协方差矩阵
- 已知
Q
和A
了,怎么得出协方差方程?- 设上一次预测协方差矩阵P_k-1为
- 本次预测协方差矩阵P_k为
- 代入预测里面的协方差公式
- 代码:
P
为2x2
矩阵
- 预测当前角度
- 初始化参数:
Q
,R
,P0
,x0
- 代入公式迭代
- 调节超参数:
Q
,R
,需要多次人工调节
视频目标跟踪器
选择状态量,观测量
状态方程
- 状态量
x
:box
中心点的x
坐标y
:box
中心点的y
坐标w
:box
宽h
:box
高dx
:中心点x坐标变化量(速度)dy
:中心点y坐标变化量(速度)
- 状态转移矩阵
A
- 控制输入矩阵
B=0
(零矩阵) - 过程噪声:来自于目标移动的不确定性(突然加速、减速、转弯等)
- 状态量
观测方程
t
时刻的最优估计值与t+1
时刻所有框,IOU
最大的,最为t+1
时刻的观测值- 得到所有观测值
x, y, w, h, dx, dy
dx = x - x^-
(当前时刻 - 上一时刻)dy = y - y^-
(当前时刻 - 上一时刻)
- 状态观测矩阵
H=E
- 观测噪声:来自于检测框丢失、重叠、不准确等
- 如果
IOU
匹配失败,使用上一次的最优估计值直接作为观测值- 此时每帧更新一次状态,直到在
t+n
帧找到匹配框
- 此时每帧更新一次状态,直到在