| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 卡尔曼滤波 KF | 扩展卡尔曼滤波 EKF (思路流程和计算公式) -> 正文阅读 |
|
[数据结构与算法]卡尔曼滤波 KF | 扩展卡尔曼滤波 EKF (思路流程和计算公式) |
前言本文分析卡尔曼滤波和扩展卡尔曼滤波,包括:思路流程、计算公式、简单案例等。滤波算法,在很多场景都有应用,感觉理解其思路和计算过程比较重要。 目录 一、卡尔曼滤波卡尔曼滤波思想由 kalman于 1960 年提出,该方法:
其实质是计算最大后验概率问题,只能应用于线性系统。 1.1 KF计算公式卡尔曼滤波法的核心问题是:如何建立滤波所需的状态方程和观测方程。在实际工作过程中,卡尔曼滤波法将为系统提供最优估计,其前提是系统应具备线性模型,使用卡尔曼滤波法可以简化计算量,并且节数据存储。 在定义系统的 状态方程 和 观测方程 分别如下: 第一条公式:定义 k-1 时刻的状态为?,其对应的协方差为。k时刻(当前时刻)的状态为;思路:先用上一时刻的状态,来预估当前时刻的状态。? 第二条公式:定义为当前时刻的观测值。思路:通过预估当前时刻的状态?和观测变量,来计算观察值 1.2 KF迭代过程?(1)预测: ?(2)更新: 首先更新卡尔曼增益 K: ?然后基于卡尔曼增益 K再更新?更新后验概率分布(即:状态值、协方差) 1.3 KF使用说明卡尔曼滤波仅适用于线性高斯系统, 目前大多数情况下机器人所涉及的状态估计是非线性的, 卡尔曼滤波的结果并不可靠。 针对卡尔曼滤波的缺陷,学者们提出了许多改进方法, 如扩展卡尔曼滤波(EKF)、无损卡尔曼滤波(UKF)、压缩扩展 卡尔曼滤波(CEKF)……。 二、卡尔曼滤波案例——多目标跟踪多目标跟踪算法的经典算法DeepSort,它是一个两阶段的算法,达到实时跟踪效果,曾被应用于工业开发。 核心思想:使用递归的卡尔曼滤波和逐帧的匈牙利数据关联。 ?假定跟踪场景是定义在 8 维状态空间(u, v, γ, h, ?, ?, γ?, ?)中, 边框中心(u, v),宽高比 γ,高度 h 和和它们各自在图像坐标系中的速度。 这里依旧使用的是匀速运动模型,并把(u,v,γ,h)作为对象状态的直接观测量。 在目标跟踪中,需要估计目标的以下两个状态: ?均值(Mean):包含目标的位置和速度信息,由 8 维向量(u, v, γ, h, ?, ?, γ?, ?)表示,其中每个速度值初始化为 0。均值 Mean 可以通过观测矩阵 H 投影到测量空间输出(u,v,γ,h)。 ?协方差(Covariance):表示估计状态的不确定性,由 8x8 的对角矩阵表示,矩阵中数字越大则表明不确定性越大。 2.1?卡尔曼滤波器——预测阶段?step1:首先利用上一时刻 k-1 的后验估计值,通过状态转移矩阵 F 变换,得到当前时刻 k 的先验估计状态 ? 其中,状态转移矩阵 F如下: ? ??step2:然后使用上一时刻 k-1 的后验估计协方差来计算当前时刻 k 的先验估计协方差 ? 通过上一时刻的后验估计均值和方差 估计?当前时刻的先验估计均值x和协方差P 实现代码如下:
2.2?卡尔曼滤波器——更新阶段
?
? ?
?
? ?卡尔曼滤波器更新阶段,代码实现:
总结一下: ?在目标跟踪中,需要估计目标的以下两个状态: ?均值(Mean):包含目标的位置和速度信息,由 8 维向量(u, v, γ, h, ?, ?, γ?, ?)表示,其中每个速度值初始化为 0。均值 Mean 可以通过观测矩阵 H 投影到测量空间输出(u,v,γ,h)。 ?协方差(Covariance):表示估计状态的不确定性,由 8x8 的对角矩阵表示,矩阵中数字越大则表明不确定性越大。 predict 阶段和 update 阶段都是为了计算出卡尔曼滤波的估计均值 x?和协方差 P,不同的是前者是基于上一历史状态做出的先验估计,而后者则是融合了测量值信息并作出校正的后验估计。 详细参考:多目标跟踪算法 | DeepSort_一颗小树x的博客-CSDN博客_deepsort 三、扩展卡尔曼滤波 EKF扩展卡尔曼滤波可以通过泰勒展开来解决非线性情况下的问题。 3.1??EKF计算公式?其中是展开后得到的一阶偏导项。 在展开过程中省略了次数较高的项,将状态估计方程转化为 近似的线性化方程。 ?3.2 EKF迭代过程迭代过程与卡尔曼滤波大致相似,? ?(1)预测: ?(2)更新: 首先更新卡尔曼增益 K: ?然后基于卡尔曼增益 K再更新?更新后验概率分布(即:状态值、协方差) 其中 R'与 Q' 为线性化后状态方程对应的新的协方差。 1.3 EKF使用说明扩展卡尔曼滤波可以在非线性的场景下工作。但是,它在计算的时候忽略了展开式的高次项,因此估计会有误差,有可能会导致滤波器发散。 几种滤波器的对比说明 本文直供大家参考学习,谢谢! 参考文献: [1]?李庆玲,许茂洲,张慧祥. SLAM 后端优化原理研究[J]. 技术设计与试验应用,2020. [2]?危双丰,庞 帆,刘振彬, 师现杰. 基于激光雷达的同时定位与地图构建方法综述[J]. 计算机应用研究,2020. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:02:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |