卡尔曼滤波详解(1)

目录

1. 核心思想

2. 五个公式的解读

2.1 预测部分

2.2 更新部分

3. 公式的实际应用

4. 调参方法


1. 核心思想

首先,卡尔曼滤波器可以用来估计系统的状态,这个状态是时间序列上的利用上一时刻的状态可以预测当前时刻的状态,利用当前时刻的观测可以更新和修正当前时刻的预测。这么说可能有点绕,看下图。

绿色的x表示系统的状态,y表示对系统状态的观测,蓝色的x表示修正后的状态。卡尔曼滤波的核心思想,就是用利用蓝色\hat{x_{1}}进行预测,得到下一时刻绿色的x_{2}。在利用下一时刻的观测y_{2}和预测得到的x2得到下一时刻修正后的状态,即蓝色的\hat{x_{2}}

由上面的过程可以发现,卡尔曼滤波由一个明显的特点,即当前时刻的状态,只和上一时刻的状态有关,这叫做马尔可夫性。对于实际应用来说,内存中只需要存储上一时刻的状态,占用内存小,速度快,对于实时问题有很好的响应

2. 五个公式的解读

下面来直接解读五个公式

2.1 预测部分

首先是预测部分,预测就是根据当前上一时刻的融合状态,推测当前时刻的状态,而这个状态不能完全代表当前时刻的最终状态,所以看到预测部分的两个公式都是带了“-”号的。

\hat{x_{t}}:表示t时刻系统的状态

F:表示状态转移矩阵,即如何从x_{t-1}变换到x_{t},通常和理论公式有关。

u: t 时刻外界对系统的作用 (现在不理解没关系,实际应用中会具象化)

B:控制矩阵,将外界的作用转化为对状态的影响 

P: 系统的不确定度,这个非常的重要,以协方差矩阵的形式展现,也可以表征状态量之间的关系,随着卡尔曼过程的迭代,这个P应该逐渐减小。

Q:预测过程增加进系统的不确定度,可以视作从上一时刻得到当前时刻状态量的可靠程度,也以协方差的形式呈现,有时也将外部的影响放入Q中一起考虑。

对于预测部分,第一个公式也有在最后加上一个噪声w_{t}的,如果有些噪声可以被表示清楚,写进公式可以增加预测结果的可信程度,Q也就随之减小(我个人的理解)。

第二个公式关于系统不确定度P,一定要认识到其实以协方差矩阵的形式展现的,能够表征系统各状态量之间的关系。同时最重要的是P是表征整个系统的不确定度的,所以随着迭代的进行,P也是要更新的,这就是有第二个公式的原因。而这个公式的来源就是将上一时刻的状态预测为当前时刻,用协方差的数学特性也变换到当前时刻,再加上这么变换的误差噪声Q。

cov(x_{t-1}) = P_{t-1}

cov(x_{t}) = cov(Fx_{t-1}) = FP_{t-1}F^{T}

2.2 更新部分

更新部分的3个公式,卡尔曼增益K是一个过程量,最终会得到修正后的状态量x及系统的不确定度P。这其中

H:是变换矩阵,表示从观测值到状态量之间的关系,因为有些状态量是无法直接观测的

Z:是观测值

R:  是观测的噪声,也是以协方差的形式表示的

K:卡尔曼增益,这个增益其实就是为了表达简便,认为定义的一个公式。

更新部分的三个公式来源,实际上是由两个正态分布的公式相乘的结果得到的。根据预测部分的结果,我们得到了预测的当前时刻的状态量,这个状态量其实服从高斯分布。同时,在当前时刻,我们有当前时刻的观测量,这个量也服从高斯分布。更新部分的主要操作,就是将这两个高斯分布的量结合,得到一个方差更小的高斯分布。图示如下(这个图是来自两个高斯分布乘积的理论推导_两个高斯分布相乘-CSDN博客

讲两个高斯分布如何融合起来,讲的很好)

而这三个公式,实际上就是两个高斯分布相乘得到新高斯分布的公式套用:

\mu = \mu _{0} + \frac{\sigma _{0}^{2}(\mu _{1}-\mu _{0})}{\sigma _{0}^{2}+\sigma _{1}^{2}}

\sigma^{2} = \sigma_{0}^{2} - \frac{ \sigma_{0}^{4}}{ \sigma_{0}^{2} + \sigma_{1}^{2}}

简化一下表达,定义K为:

K = \frac{ \sigma_{0}^{2}}{ \sigma_{0}^{2} + \sigma_{1}^{2}}

则公式可以写为:

\mu = \mu _{0} + K(\mu _{1}-\mu _{0})

\sigma^{2} = \sigma_{0}^{2} - K\sigma_{0}^{2}

再对应到上面的更新部分的三个公式,是不是如出一辙。

3. 公式的实际应用

现在我们假设一个物体匀加速直线运动,状态量X是[x, y, vx, vy],由于是匀加速直线运动,我们很容易得到前一时刻各个状态量和当前时刻各个状态量之间的关系,y方向以此类推。

x_{t} = x_{t-1} + vx_{t-1} + 1/2a_{x}t^{2}

vx_{t} = vx_{t-1} + a_{x}t

写成矩阵的形式为:

\begin{bmatrix} x\\ y\\ vx\\ vy \end{bmatrix}=\begin{bmatrix} 1 & 0 & \Delta t & 0 \\ 0& 1& 0 & \Delta t \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix}\begin{bmatrix} x_{t-1}\\ y_{t-1}\\ vx_{t-1}\\ vy_{t-1} \end{bmatrix} + \begin{bmatrix} 1/2\Delta t^{2}\\ 1/2\Delta t^{2}\\ \Delta t\\ \Delta t \end{bmatrix}a

x       =         F                              x           +          B           u

可以对照预测部分的公式看下实际对应的矩阵是什么

现在我们假设观测用的传感器是激光雷达,从激光雷达中能直接读到距离,即x,y,无法直接读到速度。我们可以设置初始的系统不确定度为

P_{0} =\begin{bmatrix} 1 & 0 & 0 & 0\\ 0 & 1 & 0 & 0 \\ 0 & 0 & 100 & 0 \\ 0 & 0 & 0 & 100 \end{bmatrix}

这里因为无法直接得到速度,所以速度项的不确定度要高,而位置项的不确定度低。u自胡总随着迭代过程的进行,整个系统的不确定度会降低。当然这里的初值设定还可以继续深入讨论。

再看,由于观测值是2维的,状态量是4维,所以需要变换矩阵H将状态量变化为2维,则

H = \begin{bmatrix} 1 & 0 & 0 & 0 \\ 0 & 1&0 & 0 \end{bmatrix}

以上的过程,在给定Q和R之后,就可以进行迭代计算了。

4. 调参方法

由上面的应用实例可以看出,整个过程可以调整的参数,有初始的系统不确定度P,过程噪声Q,测量噪声R。而参数调整关心的几个问题是,收敛的速度,结果的准确程度或者平滑程度(更相信观测还是预测)。有几个比较定性的结论:

Q越大,表示更不相信预测,结果波动会较大,滤波效果差。

R越大,表示更不相信观测,结果会越平滑,滤波效果好,卡尔曼滤波输出收敛的越慢。

卡尔曼增益的收敛值为 Q/(Q+R),比如其值为0.5,那么卡尔曼增益会向0.5收敛(比如预测的位置为10m,观测的位置为15m,则修正后的优化位置为:10+0.5*(15-10)=12.5m。增益就是观测和预测差值的加权,增益越大,越相信观测值。

P0/(Q+R)反映收敛的快慢程度,该值设定越小,收敛越快,该值越大,收敛越慢。

后来还看到了一些有趣的调参方法,比如:

自适应滤波,在Q和R的基础上,加入随时间变化的因子。

离线学习,一般的卡尔曼滤波是利用过去和现在的测量数据来估计将来的状态。也可以将时间序列上的数据全部采集,即已经获得所有(包括未来)测量数据的情况下,估计过去时间下的系统状态。

<think>好的,我现在需要帮助用户了解卡尔曼滤波的参数调整方法与技巧。首先,我得回顾卡尔曼滤波的基本原理,这样才能理解参数调整的关键点。卡尔曼滤波有五个核心公式,涉及到预测和更新两个阶段,参数主要包括过程噪声协方差矩阵Q、观测噪声协方差矩阵R、初始状态估计误差协方差矩阵P0,以及状态转移矩阵F和观测矩阵H。 用户的问题是关于如何调整这些参数,所以我需要先明确每个参数的作用。比如,Q和R分别影响模型对预测值和观测值的信任程度。如果Q设置得较大,说明过程噪声大,滤波器会更依赖观测值,反之则更信任预测。同样,R较大时,滤波器会更相信预测值,而R较小时则更重视观测数据。 接下来,我需要考虑参数调整的具体方法。常见的可能有经验调整,比如根据系统特性手动设置Q和R。然后是自适应方法,比如Sage-Husa自适应滤波,可以动态调整Q和R。另外,参考资料的引用部分提到误差协方差矩阵的最小化,这可能涉及到通过优化方法调整参数,比如极大似然估计或者EM算法。 此外,初始状态估计的P0也很重要,如果初始状态不确定,可能需要设置较大的P0,让滤波器更快收敛。状态转移矩阵F和观测矩阵H如果存在建模误差,也会影响性能,这时候可能需要结合系统辨识技术来调整。 还要注意参数调整中的常见问题,比如过调导致滤波器不稳定,或者参数之间的相互影响。可能需要通过实验和验证来调整,比如使用历史数据测试不同参数的效果,观察估计误差的变化。 用户提供的引用中提到了卡尔曼增益K的重要性,而K的计算依赖于Q和R,所以调整这两个参数直接影响K的值,进而影响融合权重。引用[2]中提到的通过最小化误差协方差矩阵来求K,这可能涉及到在调整参数时优化误差协方差矩阵的迹,使其最小化。 最后,需要整理这些思路,分步骤说明参数调整的方法和技巧,并确保引用相关资料中的内容,比如引用[1]关于状态空间方程和协方差矩阵的部分,引用[2]关于卡尔曼增益和误差协方差的优化,以及引用[3]提到的马尔可夫性和实时应用的优势,可能影响参数调整时的内存和计算效率考虑。 总结下来,参数调整需要综合考虑理论方法、系统特性、实验验证,以及可能的自适应技术。需要将这些内容用清晰的结构呈现,帮助用户逐步理解和应用。</think>### 卡尔曼滤波参数调整方法与技巧 卡尔曼滤波的性能高度依赖参数设置,主要包括 **过程噪声协方差矩阵 $Q$**、**观测噪声协方差矩阵 $R$**、**初始状态估计误差协方差矩阵 $P_0$**,以及状态转移矩阵 $F$ 和观测矩阵 $H$。以下是参数调整的核心方法与技巧: --- #### 一、关键参数的作用 1. **$Q$(过程噪声协方差矩阵)** - 描述系统模型的不确定性。若系统动态模型不精确或存在未建模干扰,需增大 $Q$,使滤波器更依赖观测值;反之则减小 $Q$[^1]。 - 公式:$$ Q = E[w_k w_k^T] $$ 其中 $w_k$ 是过程噪声。 2. **$R$(观测噪声协方差矩阵)** - 反映测量设备的精度。若传感器噪声大,应增大 $R$,滤波器更信任预测值;若测量可靠,则减小 $R$[^1]。 - 公式:$$ R = E[v_k v_k^T] $$ 其中 $v_k$ 是观测噪声。 3. **$P_0$(初始误差协方差矩阵)** - 表示初始状态的置信度。初始状态不确定时,设置较大的 $P_0$,滤波器会更快收敛[^3]。 4. **$F$(状态转移矩阵)与 $H$(观测矩阵)** - 若模型存在误差(如线性近似误差),需通过系统辨识技术修正 $F$ 和 $H$。 --- #### 二、参数调整方法 1. **经验调整法** - **步骤**: 1. 根据系统物理特性或历史数据,初步设定 $Q$ 和 $R$。 2. 通过仿真或实验观察估计误差,逐步调整 $Q$ 和 $R$ 的幅值。 3. 若滤波结果波动大,减小 $Q$ 或增大 $R$;若响应滞后,则增大 $Q$ 或减小 $R$[^2]。 2. **自适应滤波法** - **Sage-Husa自适应滤波**:动态估计 $Q$ 和 $R$,适用于噪声统计特性时变的场景[^3]。 - **强跟踪滤波**:通过调整增益矩阵 $K$,增强对模型误差的鲁棒性。 3. **优化方法** - **极大似然估计(MLE)**:基于观测数据最大化似然函数,求解最优 $Q$ 和 $R$。 - **期望最大化(EM)算法**:迭代优化参数,适用于非线性系统。 4. **协方差匹配法** - 通过实际残差协方差与理论值匹配来调整 $Q$ 和 $R$,公式: $$ \frac{1}{N} \sum_{k=1}^N (z_k - H\hat{x}_k^-)(z_k - H\hat{x}_k^-)^T \approx H P_k^- H^T + R $$ --- #### 三、调试技巧 1. **分阶段调试**: - 先固定 $R$ 调整 $Q$,再固定 $Q$ 调整 $R$,避免参数耦合影响。 2. **验证方法**: - 使用历史数据测试,计算均方误差(MSE)或归一化创新平方(NIS)评估性能[^2]。 3. **初始值设置**: - $P_0$ 可设为对角矩阵,对角线元素对应状态分量的不确定度。 4. **数值稳定性**: - 确保 $Q$ 和 $R$ 正定,防止协方差矩阵非物理。 --- #### 四、常见问题与解决 | 问题现象 | 可能原因 | 调整方向 | |---------|---------|---------| | 估计结果震荡 | $Q$ 过大或 $R$ 过小 | 减小 $Q$ 或增大 $R$ | | 响应滞后 | $Q$ 过小或 $R$ 过大 | 增大 $Q$ 或减小 $R$ | | 发散 | 模型误差大或 $P_0$ 过小 | 修正模型或增大 $P_0$ | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值