50、卡尔曼滤波及其相关算法的原理与应用

卡尔曼滤波及其相关算法的原理与应用

1. 无迹卡尔曼滤波器(Unscented Kalman Filter,UKF)

1.1 EKF的问题

扩展卡尔曼滤波器(EKF)在处理非线性问题时存在一定的局限性。例如,对于一个二维时间函数 (f[\cdot,\cdot]) 作用于状态的情况,在预测步骤中,原本应将之前的估计(蓝色椭圆)通过该函数(得到变形的绿色椭圆)并添加噪声。但EKF通过将均值代入函数,并基于前一状态估计处函数的线性近似来更新协方差。当函数的非线性变化较大时,这种近似效果很差,导致预测的协方差(品红色椭圆)不准确。

1.2 UKF的基本原理

UKF中预测状态 (Pr(w_t|x_{1…t - 1})) 也是正态分布,并且该正态分布对真实分布的近似效果比EKF更好。在处理测量方程中的非线性问题时,也采用了类似的方法。下面详细介绍UKF的两个主要步骤:

1.2.1 状态演化

状态演化步骤的目标是通过将时间模型应用于前一时间步的后验分布 (Pr(w_{t - 1}|x_{1…t - 1})) ,对时间 (t) 的状态形成预测 (Pr(w_t|x_{1…t - 1})) 。前一时间步的后验分布是均值为 (\mu_{t - 1}) 、协方差为 (\Sigma_{t - 1}) 的正态分布,预测结果也将是均值为 (\mu^+) 、协方差为 (\Sigma^+) 的正态分布。具体步骤如下:
1. 用 (2D_w + 1) 个delta函数的加权和来近似前一时间步的边缘后验分布,其中 (D_w) 是状态的维数:
[Pr(w_{t - 1}|x_{1…t - 1}) = Norm_{w_{t - 1}}[\mu_{t - 1},\Sigma_{t - 1}] \approx \sum_{j = 0}^{2D_w} a_j\delta[w_{t - 1} - \hat{w}[j]]]
其中权重 ({a_j} {j = 0}^{2D_w}) 为正且总和为1。这里的delta函数被称为sigma点。sigma点的位置 ({\hat{w}[j]} {j = 0}^{2D_w}) 经过精心选择,满足:
[\mu_{t - 1} = \sum_{j = 0}^{2D_w} a_j\hat{w}[j]]
[\Sigma_{t - 1} = \sum_{j = 0}^{2D_w} a_j(\hat{w}[j] - \mu_{t - 1})(\hat{w}[j] - \mu_{t - 1})^T]
2. 一种选择sigma点的方案是:
[\hat{w}[0] = \mu_{t - 1}]
[\hat{w}[j] = \mu_{t - 1} + \sqrt{\frac{D_w}{1 - a_0}}\Sigma_{t - 1}^{1/2}e_j\quad \text{for all } j \in {1…D_w}]
[\hat{w}[D_w + j] = \mu_{t - 1} - \sqrt{\frac{D_w}{1 - a_0}}\Sigma_{t - 1}^{1/2}e_j\quad \text{for all } j \in {1…D_w}]
其中 (e_j) 是第 (j) 个方向的单位向量。相关权重选择为 (a_0 \in [0,1]) ,且 (a_j = \frac{1 - a_0}{2D_w}) 。第一个sigma点的权重 (a_0) 的选择决定了其余sigma点与均值的距离。
3. 将sigma点通过非线性函数,创建一组新的样本 (\hat{w}[j]^+ = f[\hat{w}[j]]) ,这些样本共同构成状态的预测。然后根据变换后点的均值和方差计算预测分布 (Pr(w_t|x_{1…t - 1})) 的均值和方差:
[\mu^+ = \sum_{j = 0}^{2D_w} a_j\hat{w}[j]^+]
[\Sigma^+ = \sum_{j = 0}^{2D_w} a_j(\hat{w}[j]^+ - \mu^+)(\hat{w}[j]^+ - \mu^+)^T + \Sigma_p]
其中 (\Sigma_p) 是为考虑时间模型中的加性噪声而添加到预测协方差中的额外项。

mermaid流程图:UKF状态演化流程
graph LR
    A[近似边缘后验分布] --> B[选择sigma点]
    B --> C[通过非线性函数]
    C --> D[计算预测分布的均值和方差]
1.2.2 测量融合

测量融合过程采用类似的思想,将预测分布 (Pr(w_t|x_{1…t - 1})) 近似为一组delta函数或sigma点:
[Pr(w_t|x_{1…t - 1}) = Norm_{w_{t - 1}}[\mu^+,\Sigma^+] \approx \sum_{j = 0}^{2D_w} a_j\delta[w_t - \hat{w}[j]]]
选择sigma点的中心和权重,使得:
[\mu^+ = \sum_{j = 0}^{2D_w} a_j\hat{w}[j]]
[\Sigma^+ = \sum_{j = 0}^{2D_w} a_j(\hat{w}[j] - \mu^+)(\hat{w}[j] - \mu^+)^T]
例如,可以使用上述提到的选择sigma点和权重的方案。然后将sigma点通过测量模型 (\hat{x}[j] = g[\hat{w}[j]]) ,在测量空间中创建一组新的点 ({\hat{x}[j]} {j = 0}^{2D_w}) 。使用以下关系计算这些预测测量的均值和协方差:
[\mu_x = \sum
{j = 0}^{2D_w} a_j\hat{x}[j]]
[\Sigma_x = \sum_{j = 0}^{2D_w} a_j(\hat{x}[j] - \mu_x)(\hat{x}[j] - \mu_x)^T + \Sigma_m]
测量融合方程为:
[\mu_t = \mu^+ + K(x_t - \mu_x)]
[\Sigma_t = \Sigma^+ - K\Sigma_xK^T]
其中卡尔曼增益 (K) 重新定义为:
[K = \left(\sum_{j = 0}^{2D_w} a_j(\hat{w}[j] - \mu^+)^T(\hat{x}[j] - \mu_x)^T\right)\Sigma_x^{-1}]
与预测步骤一样,可以证明UKF的近似效果比EKF更好。

2. 粒子滤波

2.1 粒子滤波的必要性

扩展卡尔曼滤波器和无迹卡尔曼滤波器虽然可以部分处理非线性时间和测量模型,但它们都将状态的不确定性表示为正态分布,因此在处理状态的真实概率分布为多峰的情况时表现不佳。例如,当一个时间模型将附近的状态映射到两个不同的区域时,EKF只能建模其中一个结果簇,而UKF试图用单个正态模型来建模两个簇,会给簇之间的空白区域赋予较大的概率。

2.2 粒子滤波的基本原理

粒子滤波通过在状态空间中用一组粒子表示概率密度来解决这个问题。每个粒子可以看作是对可能状态的一个假设。当状态受到数据的严格约束时,所有这些粒子会彼此靠近;在更模糊的情况下,它们会广泛分布或聚集成相互竞争的假设组。粒子可以随着时间演化,或者通过投影来模拟测量,无论函数的非线性程度如何。由于状态是多峰的,预测测量也可能是多峰的,因此测量密度也可能是多峰的。在视觉系统中,这意味着系统能够更好地处理场景中的杂波。

2.3 条件密度传播(Condensation)算法

这是一种简单的粒子滤波方法,将概率分布 (Pr(w_{t - 1}|x_{1…t - 1})) 表示为 (J) 个加权粒子的加权和:
[Pr(w_{t - 1}|x_{1…t - 1}) = \sum_{j = 1}^{J} a_j\delta[w_{t - 1} - \hat{w}[j] {t - 1}]]
其中权重为正且总和为1。每个粒子代表一个关于状态的假设,粒子的权重表示我们对该假设的置信度。目标是计算下一时间步的概率分布 (Pr(w_t|x
{1…t})) ,同样以类似的方式表示。该过程分为时间演化和测量融合两个步骤:

2.3.1 时间演化

在时间演化步骤中,为时间演化后的状态创建 (J) 个预测 (\hat{w}[j]^+) ,每个预测由一个未加权的粒子表示。具体创建方式如下:
1. 根据权重选择原始加权粒子的索引 (n \in {1…J}) ,即从 (Cat_n[a]) 中抽取一个样本。
2. 从时间更新分布 (Pr(w_t|w_{t - 1} = \hat{w}[n]_{t - 1})) 中抽取样本 (\hat{w}[j]^+) 。
在这个过程中,权重最高的原始粒子可能会多次对最终集合做出贡献,而权重最低的粒子可能根本不做贡献。

2.3.2 测量融合

在测量融合步骤中,根据新粒子与观测数据的匹配程度对其进行加权。具体步骤如下:
1. 将粒子通过测量模型 (\hat{x}[j]^+ = g[\hat{w}[j]^+]) 。
2. 根据粒子与观测密度的匹配程度对其进行加权。例如,对于高斯测量模型,可以使用 (a_j \propto Pr(x_t|\hat{w}[j]^+) = Norm_{x_t}[\hat{x}[j]^+,\Sigma_m]) 。
3. 将得到的权重 ({a_j}_{j = 1}^{J}) 归一化,使其总和为1。
4. 最后,将新状态 (\hat{w}[j]_t) 设置为预测状态 (\hat{w}[j]^+) ,新权重设置为 (a_j) 。

mermaid流程图:Condensation算法流程
graph LR
    A[后验表示为加权粒子] --> B[重采样得到未加权粒子]
    B --> C[通过非线性时间函数]
    C --> D[添加噪声]
    D --> E[通过测量模型并比较]
    E --> F[重新加权粒子]
    F --> A

2.4 粒子滤波的扩展

粒子滤波有许多变体和扩展:
- 减少重采样频率 :在许多方案中,粒子并非在每次迭代时都进行重采样,而是偶尔进行,这样主要方案就可以处理加权粒子。
- 重要性采样 :通过与测量过程协同生成新样本,使得与测量结果匹配的粒子更有可能被生成,有助于防止预测阶段后没有未加权样本与测量结果匹配的情况。
- Rao - Blackwellization :将状态划分为两个变量子集。第一个子集使用粒子滤波器进行跟踪,而另一个子集则基于第一个子集进行条件化,并使用更类似于卡尔曼滤波器的过程进行解析评估。精心选择这些子集可以得到既高效又准确的跟踪算法。

3. 应用

跟踪算法可以与任何在时间序列上重新估计的模型结合使用。以下介绍三个具体的应用示例:

3.1 行人跟踪

Rosales和Sclaroff(1999)描述了一个使用扩展卡尔曼滤波器从固定静态相机跟踪行人二维位置的系统。对于每一帧,测量值 (x) 是行人周围的二维边界框 (x = {x_1,y_1,x_2,y_2}) ,通过背景减法模型将行人从背景中分割出来,并找到前景像素的连通区域得到。世界状态 (w) 被认为是具有恒定深度的边界框的三维位置 ({u_1,v_1,u_2,v_2,w}) 以及与这五个量相关的速度。状态更新方程假设在三维空间中遵循一阶牛顿动力学。状态与测量之间的关系为:
[\begin{bmatrix}x_1\y_1\x_2\y_2\end{bmatrix} = \begin{bmatrix}u_1\v_1\u_2\v_2\end{bmatrix}\frac{1}{1 + w} + \epsilon]
该系统成功跟踪了行人,并进行了扩展以处理遮挡情况(EKF根据估计的物体轨迹预测遮挡)。在完整系统中,估计的边界框用于将行人图像变形为固定大小,得到的配准图像作为动作识别算法的输入。

3.2 单目同时定位与地图构建(SLAM)

同时定位与地图构建(SLAM)的目标是基于移动传感器(通常安装在机器人上)的测量结果构建未知环境的地图,并确定传感器在任何给定时间在世界中的位置。Davison等人(2007)提出了一个基于扩展卡尔曼滤波器的系统。世界状态 (w) 包含:
- 相机位置 ((u,v,w))
- 用四维四元数 (q) 表示的相机方向
- 速度和角速度
- 一组三维点 ({p_k}) ,其中 (p_k = [p_{uk},p_{vk},p_{wk}]) ,该集合通常会随着序列的进行而扩展,因为会看到更多的世界部分。

状态更新方程根据各自的速度修改位置和方向,并允许这些速度本身发生变化。观测方程将每个三维点通过针孔相机模型映射到预测的二维图像位置。实际测量值是图像中的兴趣点,通过考虑其周围区域与预测测量值进行唯一标识和关联。该系统非常高效,因为只需要在当前状态下测量方程预测的二维点附近的区域搜索图像。

3.3 复杂背景下的轮廓跟踪

在杂乱背景下跟踪具有复杂运动的物体轮廓是一个具有挑战性的问题。Blake和Isard(1998)描述了一个基于Condensation算法的系统,该系统能够处理在杂乱背景下快速运动的轮廓跟踪问题。系统的状态由将模板映射到场景的仿射变换参数组成,测量值类似于前面提到的情况。状态用100个加权粒子表示,每个粒子代表模板当前位置的不同假设。该系统用于跟踪在杂乱背景前跳舞的儿童的头部。

综上所述,不同的跟踪算法在不同的应用场景中各有优劣,需要根据具体情况选择合适的算法。例如,在处理非线性程度不高且状态分布接近正态的情况时,UKF可能是一个不错的选择;而在处理多峰分布的情况时,粒子滤波则更为合适。

4. 算法对比分析

4.1 性能对比

为了更清晰地了解扩展卡尔曼滤波器(EKF)、无迹卡尔曼滤波器(UKF)和粒子滤波的性能差异,我们从以下几个方面进行对比:
| 算法 | 处理非线性能力 | 处理多峰分布能力 | 计算复杂度 | 适用场景 |
| ---- | ---- | ---- | ---- | ---- |
| EKF | 部分处理非线性,通过线性近似,在非线性变化大时效果差 | 差,假设状态分布为正态 | 相对较低 | 非线性程度较低,状态分布接近正态的场景 |
| UKF | 比EKF更好地处理非线性,通过sigma点近似 | 差,假设状态分布为正态 | 适中 | 非线性程度较高,状态分布接近正态的场景 |
| 粒子滤波 | 能处理高度非线性 | 好,可表示多峰分布 | 高,尤其是高维情况 | 状态分布为多峰,存在复杂非线性的场景 |

4.2 实际效果对比

以之前提到的时间模型将附近状态映射到两个不同区域的例子为例,我们可以更直观地看到三种算法的实际效果差异:
- EKF :只能建模其中一个结果簇,线性近似不佳导致协方差估计不准确。
- UKF :试图用单个正态模型建模两个簇,会给簇之间的空白区域赋予较大概率,估计的协方差很大。
- 粒子滤波 :能够准确捕捉到多峰分布的情况,对真实分布的近似效果更好。

mermaid流程图:三种算法效果对比流程
graph LR
    A[输入非线性时间模型] --> B[EKF处理]
    A --> C[UKF处理]
    A --> D[粒子滤波处理]
    B --> E[得到单簇结果,协方差不准确]
    C --> F[得到近似结果,协方差大]
    D --> G[得到多峰分布结果]

5. 选择合适的算法

在实际应用中,选择合适的跟踪算法至关重要。以下是一些选择算法的建议:

5.1 考虑因素

  • 非线性程度 :如果系统的非线性程度较低,EKF或UKF可能就足够了;如果非线性程度较高,粒子滤波可能是更好的选择。
  • 状态分布 :如果状态的真实分布接近正态,EKF和UKF可以有效工作;如果是多峰分布,粒子滤波是首选。
  • 计算资源 :粒子滤波通常需要更多的计算资源,尤其是在高维情况下。如果计算资源有限,可能需要选择EKF或UKF。

5.2 选择流程

以下是一个选择合适算法的流程图:

mermaid流程图:算法选择流程
graph LR
    A[开始] --> B{非线性程度高吗?}
    B -- 是 --> C{状态分布是多峰吗?}
    B -- 否 --> D{状态分布接近正态吗?}
    C -- 是 --> E[选择粒子滤波]
    C -- 否 --> F[选择UKF]
    D -- 是 --> F
    D -- 否 --> G[选择EKF]

6. 总结

6.1 主要内容回顾

  • 无迹卡尔曼滤波器(UKF) :通过sigma点近似,在处理非线性问题上比扩展卡尔曼滤波器(EKF)更有效,但仍然假设状态分布为正态,在处理多峰分布时表现不佳。
  • 粒子滤波 :通过在状态空间中用一组粒子表示概率密度,能够处理高度非线性和多峰分布的情况,但计算复杂度较高。
  • 应用场景 :不同的跟踪算法在不同的应用场景中各有优劣,如行人跟踪、单目同时定位与地图构建(SLAM)、复杂背景下的轮廓跟踪等,需要根据具体情况选择合适的算法。

6.2 未来展望

随着技术的不断发展,跟踪算法也在不断改进和创新。未来可能会出现更高效、更准确的跟踪算法,能够更好地处理复杂的非线性和多峰分布情况。同时,跟踪算法与其他技术的结合也将更加紧密,如深度学习等,为更多领域的应用提供支持。

希望通过本文的介绍,读者能够对卡尔曼滤波及其相关算法有更深入的了解,并在实际应用中选择合适的算法。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值