卡尔曼滤波EKF

目录

一、概述

二、卡尔曼滤波的5个公式

三、应用案例:汽车运动

四、应用案例:温度估计

五、总结


一、概述

        初学者对于卡尔曼滤波5个公式有点懵,本文先接地气地介绍5个公式,然后举两个常用例子加强理解,同时附有Matlab代码。卡尔曼滤波在大学课程《现代控制理论》当中有涉及详细讲解。卡尔曼滤波使用条件有:

  • 1、线性系统;
  • 2、系统中噪声(不确定性)服从高斯分布。下文中的方差、误差、偏差、协方差都指不确定性的意思。误差 = 偏差;方差 = 偏差 ²。

        在无人驾驶导航定位当中,需要多传感器对汽车位姿进行检测 ;在多传感器融合方面,使用卡尔曼滤波理论较多。对预测公式新的理解:第一个公式求解的是状态变量的期望值。第二个公式求解的是状态变量的方差。

二、卡尔曼滤波的5个公式

以下内容有手写word,都是原创哈。

三、应用案例:汽车运动

完整的matlab代码:

clear all;
close all;
clc;
Z = (1:100); %观测值
noise = randn(1,100);%1行100列高斯白噪声
Z = Z + noise;X = [0;0];%状态值
P = [1 0; 0 1];%状态协方差矩阵
F = [1 1; 0 1];%状态转移矩阵
Q = [0.0001, 0; 0 0.0001];%状态转移协方差矩阵
H = [1 0];%观测矩阵
R = 1;%观测噪声方差figure;
%hold on;
speed = [];
distance = [];
for i =1:100%% 预测X_ = F*X;P_ = F*P*F' + Q;%% 更新K = P_*H'/(H*P_*H' + R);X = X_ + K*(Z(i) - H*X_);P = (eye(2) - K*H)*P_;speed(i) = X(2);distance(i) = X(1);%%plot(X(1), X(2));
end
plot(distance, speed);

四、应用案例:温度估计

五、总结

        在线性高斯系统中,卡尔曼滤波器构成了该系统中的最大后验概率估计。而且,由于高斯分布经过线性变换后仍服从高斯分布,所以整个过程中我们没有进行任何的近似。可以说,卡尔曼滤波器构成了线性系统的最优无偏估计

       SLAM 中的运动方程和观测方程通常是非线性函数,尤其是视觉 SLAM 中的相机模型,需要使用相机内参模型以及李代数表示的位姿,更不可能是一个线性系统。一个高斯分布,经过非线性变换后,往往不再是高斯分布,所以在非线性系统中,我们必须取一定的近似,将一个非高斯的分布近似成一个高斯分布。我们希望把卡尔曼滤波器的结果拓展到非线性系统中来,称为扩展卡尔曼滤波器(Ex-tended Kalman Filter,EKF)。通常的做法是,在某个点附近考虑运动方程以及观测方程的一阶泰勒展开,只保留一阶项,即线性的部分,然后按照线性系统进行推导。

EKF的局限性:

  • 1. 首先,滤波器方法在一定程度上假设了马尔可夫性,也就是 k 时刻的状态只与 k −1时刻相关,而与 k − 1 之前的状态和观测都无关(或者和前几个有限时间的状态相关)。这有点像是在视觉里程计中,只考虑相邻两帧关系一样。如果当前帧确实与很久之前的数据有关(例如回环),那么滤波器就会难以处理这种情况。而非线性优化方法则倾向于使用所有的历史数据。它不光考虑邻近时刻的特征点与轨迹关系,更会把考虑很久之前的状态也考虑进来,称为全体时间上的 SLAM(Full-SLAM)。在这种意义下,非线性优化方法使用了更多信息,当然也需要更多的计算。
  • 2.与第六章介绍的优化方法相比,EKF 滤波器仅在 k−1时刻相机位姿处做了一次线性化,然后就直接根据这次线性化结果,把后验概率给算了出来。这相当于在说,我们认为该点处的线性化近似,在后验概率处仍然是有效的。而实际上,当我们离开工作点较远的时候,一阶泰勒展开并不一定能够近似整个函数,这取决于运动模型和观测模型的非线性情况。如果它们有强烈的非线性,那线性近似就只在很小范围内成立,不能认为在很远的地方仍能用线性来近似。这就是 EKF 的非线性误差,是它的主要问题所在。在优化问题中,尽管我们也做一阶(最速下降)或二阶(G-N 或 L-M)的近似,但每迭代一次,状态估计发生改变之后,我们会重新对新的估计点做泰勒展开,而不像EKF 那样只在固定点上做一次泰勒展开。这就导致优化方法适用范围更广,则在状态变化较大时亦能适用。
  • 3.从程序实现上来说,EKF 需要存储状态量的均值和方差,并对它们进行维护和更新。如果把路标也放进状态的话,由于视觉 SLAM 中路标数量很大,这个存储量是相当可观的,且与状态量呈平方增长(因为要存储协方差矩阵)。因此,EKF SLAM 普遍认为不可适用于大型场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/186260.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微服务中配置文件(YAML文件)和项目依赖(POM文件)的区别与联系

实际上涉及到了微服务架构中的两个重要概念:服务间通信和项目依赖管理。在微服务架构中,一个项目可以通过两种方式与另一个项目建立依赖关系:通过配置文件(如YAML文件)和通过项目依赖(如POM文件&#xff09…

Excel 转 Json 、Node.js实现(应用场景:i18n国际化)

创作灵感来源于在线转换是按照换行符去转换excel内容换行符后很难处理 本文是按单元格转换 const xlsx require(node-xlsx) const fs require(fs) const xlsxData xlsx.parse(./demo.xlsx) // 需要转换的excel文件// 数据处理 方便粘贴复制 const data xlsxData[2].data …

计算机考研408有多难?25考研经验贴,开个好头很有必要

前言 大家好,我是陈橘又青,相信关注我的各位小伙伴们中,大多都是在计算机专业的大学生吧! 每天都有许多人在后台私信我,问我要不要考研,我想说这个东西是因人而异的,像我本人就选择了就业&…

vue分片上传视频并转换为m3u8文件并播放

开发环境: 基于若依开源框架的前后端分离版本的实践,后端java的springboot,前端若依的vue2,做一个分片上传视频并分段播放的功能,因为是小项目,并没有专门准备文件服务器和CDN服务,后端也是套用…

Unity | Shader(着色器)和material(材质)的关系

一、前言 在上一篇文章中 【精选】Unity | Shader基础知识(什么是shader)_unity shader_菌菌巧乐兹的博客-CSDN博客 我们讲了什么是shader,今天我们讲一下shder和material的关系 二、在unity中shader的本质 unity中,shader就…

RuoYi-Vue 在Swagger和Postman中 上传文件测试方案

RequestPart是Spring框架中用于处理multipart/form-data请求中单个部分的注解。在Spring MVC中,当处理文件上传或其他类型的多部分请求时,可以使用RequestPart注解将请求的特定部分绑定到方法参数上。 使用RequestPart注解时,需要指定要绑定…

一款功能强大的web目录扫描器专业版

dirpro 简介 dirpro 是一款由 python 编写的目录扫描器,操作简单,功能强大,高度自动化。 自动根据返回状态码和返回长度,对扫描结果进行二次整理和判断,准确性非常高。 已实现功能 可自定义扫描线程 导入url文件进…

SNP应邀参加2023中国企业数字化转型峰会暨赛意用户大会

创新驱动科技,数智驱动未来。如今,我国产业数字化进程提速升级,数字产业化规模持续壮大。数据显示,2022年,我国数字经济规模达50.2万亿元,总量稳居世界第二。数字经济已经成为推动传统产业转型升级、促进高…

php 二分查询算法实现

原理:二分查找算法(Binary Search)是一种针对有序数组的查找算法。它的原理是通过将查找区间逐渐缩小一半来快速定位要查找的目标值。 应用场景: 数据库或文件系统索引查找:在数据库或文件系统中,索引是有…

AJAX 入门笔记

课程地址 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML) AJAX 不是新的编程语言,而是一种使用现有标准的新方法 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容 XML…

C/C++特殊求和 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C幻数求和 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C幻数求和 2021年6月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 如果一个数能够被7整除或者十进制表示中含有数字7&…

P02项目诊断报警组件(学习操作日志记录、单元测试开发)

★ P02项目诊断报警组件 诊断报警组件的主要功能有: 接收、记录硬件设备上报的报警信息。从预先设定的错误码对照表中找到对应的声光报警和蜂鸣器报警策略,结合当前的报警情况对设备下发报警指示。将报警消息发送到消息队列,由其它组件发送…

高级运维学习(十五)Zabbix监控(二)

一 Zabbix 报警机制 1 基本概念 自定义的监控项默认不会自动报警首页也不会提示错误需要配置触发器与报警动作才可以自动报警 2 概念介绍 (1)触发器 (trigger) 表达式,如内存不足300M,用户超过30个等 当触发条件发生后&a…

mac 卸载第三方输入法

输入法设置里的移除,并不是真的卸载,点击还是能添加回来 在活动监视器里强制退出此输入法在访达界面使用快捷键 ShiftcommandG在弹出的对话框内输入以下路径(/资源库/Input Methods),再点击下面的前往找到你要卸载的输…

【第2章 Node.js基础】2.3 Node.js事件机制

2.3 Node.js事件机制 学习目标 (1)理解Node.js的事件机制; (2)掌握事件的监听与触发的用法。 文章目录 2.3 Node.js事件机制什么是事件机制为什么要有事件机制事件循环事件的监听与触发EventEmitter类常用API 什么是…

LabVIEW如何才能得到共享变量的引用

LabVIEW如何才能得到共享变量的引用 有一个LabVIEW 库文件 (.lvlib) ,其中有一些定义好的共享变量。但需要得到每个共享变量的引用以便在程序运行时访问其属性。 共享变量的属性定义在“变量”类属性节点中。为了访问变量类,共享变量的引用必须连接到变…

Leetcode Hot 100之四:283. 移动零+11. 盛最多水的容器

283.移动零 题目: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] …

数据结构与算法—双链表

前言 前面有很详细的讲过线性表(顺序表和链表),当时讲的链表以单链表为主,但在实际应用中双链表有很多应用场景,例如大家熟知的LinkedList。 双链表与单链表区别 单链表和双链表都是线性表的链式实现,它们的主要区别在于节点结构…

048-第三代软件开发-数据回放

第三代软件开发-数据回放 文章目录 第三代软件开发-数据回放项目介绍数据回放 关键字: Qt、 Qml、 Data、 play back、 数据 项目介绍 欢迎来到我们的 QML & C 项目!这个项目结合了 QML(Qt Meta-Object Language)和 C 的…

【C++】单例模式【两种实现方式】

目录 一、了解单例模式前的基础题 1、设计一个类,不能被拷贝 2、设计一个类,只能在堆上创建对象 3、设计一个类,只能在栈上创建对象 4、设计一个类,不能被继承 二、单例模式 1、单例模式的概念 2、单例模式的两种实现方式 …