【简历完善】- SLAM - 第一篇:卡尔曼滤波的学习

news2024/9/29 5:27:44

场景:晚上你需要从自己的卧室去上厕所,你知道家里的布局,了解自己的步长,但是没有灯。你如何才能走到厕所呢?

一些术语

  1. “预测” = “估计”。下面所说的预测和估计就是一回事。不同博客里面这两个词语大概意思也是一致的。
    比如,你摸黑走了10步,你“估计”你“大概”到了。
  2. “观测”。当你摸黑走了10步,就要放水了。但你开了一下灯,想确定一下,发现自己还差一步。这就是观测的过程。
  3. 总结:下面这张图(来源:link)中有四个变量都是要估计的。
    • x_k^ : 你估计自己大概率处于10步的位置。
    • Pk:你不太确定,但是估计距离马桶也就半步的误差,可以直接放水了。
    • x_k^’ : 你开灯,发现自己才走到大概9步的位置,不能放水。
    • Pk’ : 你比较确定自己的方位“大概”在9步的位置,比摸黑估计的 Pk 小多了。
  4. 我们的卡尔曼滤波就是“预测”和“观测”的结合。思路是“预测”提供初值,观测进行优化。
    在这里插入图片描述

一、直接目的:五个公式

在这里插入图片描述

1.1 第一个公式

这个k就是你的步数,xk^ 就是你的位置,Fk 就是你估计自己一步走多远。后面的那个 u,其实是加速度。因为论文中的xk不仅仅表示位置,还有速度。但是我们这里假设你摸黑走路是匀速的,先不管他。

1.2 第二个公式

一开始 k = 0 的时候,你是在卧室(原点,x=0)。但是你走着走着你越来越担心自己走偏了。这就反映在方差上,也就是第二个式子。因为你状态变换的时候乘了一个 Fk,所以你的方差会乘 Fk 的平方。Qk 有博客说是: 外部不确定性(你穿拖鞋可能打滑了,但是你不知道)。但我暂时不知道应该如何计算 Qk,先不管。

1.3 中间休息一会

上面的都是高中物理和高中概率论,而且都是你单纯依据“预测”进行的,接下来要开个灯进行“观测”,确定一下你的位置(就是优化一下)。接下来重头戏来了,第三个公式莫名来了个H?这是什么?

1.4 第三个公式

这个公式是真的不好理解。

1.4.1 转换矩阵的引入

转换矩阵Hk:将小车的状态数据转换到传感器数据层。(?H如何计算呢?)
有博客1 这样说的:
在这里插入图片描述
稍微解释一下,这里的

  • u,可以理解为:当我走了10步的时候(x_k^=10),我应该看到马桶(u= 马桶)。这个H其实是你大脑把10步的信息转换成了马桶的图片。
  • 方差:看到的马桶可大可小,不太确定。

1.4.2 开灯前后的对比

在开灯前,我们有以下分布:

  • 分布1:我们的预测(均值 = 大概会看到马桶,方差 = 马桶大小可以变)。

在开灯后,我们有:

  • 分布2:实际的分布(实际均值,实际方差);我看了一下,这个实际均值和实际方差是指传感器的均值和方差。(这里我也不太清楚,如何依据一个照片来算这两个值,先放放)。

注意,上面两个分布都是完全知道的,而且描述的都是一个东西,博客1 采用的方法是:相乘!(意义是什么呢?)可以参考这张图。
在这里插入图片描述
比如你有一个数据(Z1,Z2),这个可能更靠近红色的中心(概率更大),也可能靠近绿色中心。要兼顾两种,那只能乘起来了(有点牵强,但是好像是有道理的,先不管,反正这样做可行)。

1.4.3 正式开始公式3的推导

经过上面的讨论,我们确定了目标:已知两个正太分布,求两个分布的乘积的分布。这个容易,大学概率论基础,我们直接给出新分布的均值和方差。
在这里插入图片描述
注意,我们把新的均值写成:u’ = 老的估计均值 + 更新量 的形式。然后就是重点了,把卡尔曼滤波前两个公式放到这个概率论的结果中:
在这里插入图片描述
上图中的三个公式就是公式 3 4 5!所以完结了!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何⾃定义⼀个SpringBoot Srarter

⾃定义⼀个SpringBoot Srarter 1、创建⼀个项⽬,命名为 demo-springboot-starter,引⼊SpringBoot相关依赖 2、编写配置⽂件 定义属性配置的前缀 3、⾃动装配 创建⾃动配置类HelloPropertiesConfigure 4、配置⾃动类 在 /resources/META-INF/spri…

ROS 基础知识汇总

How to learn ROS ROS for Beginners: How to Learn ROS - The Construct ROSwiki 界面介绍 ROS/Tutorials/NavigatingTheWiki - ROS Wiki ROS要学会哪些?如何学习Ros? - 知乎 setup.bash 的作用 ROS中的setup.bash_泠山的博客-CSDN博客 包的层级架构 …

ChatGPT长文本对话输入方法

ChatGPT PROMPTs Splitter 是一个开源工具,旨在帮助你将大量上下文数据分成更小的块发送到 ChatGPT 的提示,并根据如何处理所有块接收到 ChatGPT(或其他具有字符限制的语言模型)的方法。 推荐:用 NSDT设计器 快速搭建可…

如何搭建并部署抖音SEO源代码?

搭建并部署抖音SEO源代码,需要以下步骤: 购买服务器:在云服务商或者VPS提供商购买一台服务器,选择Linux系统。 安装LAMP/LEMP环境:LAMP是指Linux Apache MySQL PHP,LEMP是指Linux Nginx MySQL PHP。…

卷积的意义及其应用

卷积的意义及其应用 卷积的定义 我们将形如 ∫ − ∞ ∞ f ( τ ) g ( x − τ ) d τ \int^\infty_{-\infty} f(τ)g(x-τ)dτ ∫−∞∞​f(τ)g(x−τ)dτ 的式子称之为f(x)与g(x)的卷积记为 h ( x ) ( f ∗ g ) ( x ) h(x…

js开发技巧

1. 初始化数组 如果想要初始化一个指定长度的一维数组,并指定默认值,可以这样: const array Array(6).fill(); // [, , , , , ] 如果想要初始化一个指定长度的二维数组,并指定默认值,可以这样: const…

【尚硅谷】第01章:随堂复习与企业真题(Java语言概述)

来源:尚硅谷Java零基础全套视频教程(宋红康2023版,java入门自学必备) 基本都是宋老师发的资料里面的内容,只不过补充几个资料里没直接给出答案的问题的答案。 不想安装markdown笔记的app所以干脆在这里发一遍。 第01章:随堂复习…

电路原理分析1

d2的作用是提供一个1.25v的电平 r3、r4的作用都是限流 c1是滤波 运放的4、8脚是常规的外围 这个运放是一个运算放大电路 具体计算是这样的: 按照虚短原则,输入的信号Uinu1,输出的信号Uoutu3 按照虚断原则,i1i2i5i5 u1/r2i1i5&#xff…

windows使用多账户Git,多远程仓库版本管理

1 清除全局配置 git config --global --list // 看一下是否配置过user.name 和 user.email git config --global --unset user.name // 清除全局用户名 git config --global --unset user.email // 清除全局邮箱 2 本地仓库,每个远程对应的本地仓库目录下执行 $…

Redis缓存击穿问题以及解决方案

Redis缓存击穿问题以及解决方案 前言一、什么是Redis缓存击穿二、解决方案1.使用锁来解决使用锁的流程:核心思路:思路流程图:操作的锁的代码:业务的实现: 2.逻辑过期来解决思路分析:解决流程:业…

YOLOv5改进系列(17)——更换IoU之MPDIoU(ELSEVIER 2023|超越WIoU、EIoU等|实测涨点)

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制

【数据结构】_5.栈

目录 1. 概念 2. 栈的使用 2.1 方法 2.2 示例 3. 栈的模拟实现 4. 栈的应用场景 4.1 题目1:不可能的出栈序列 4.2 题目2:逆序打印单链表 4.3 题目3:逆波兰表达式求值 4.4 题目4:括号匹配 4.5 题目5:栈的压入…

如何构建高效的接口自动化测试框架

在选择接口测试自动化框架时,需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说,使用Python相关的测试框架更为便捷。无论选择哪种框架,重要的是确保 框架功能完备,易于维护和扩展,提高测试效率和准确性。今…

最适合新手的SpringBoot+SSM项目《苍穹外卖》实战—(五)员工管理

黑马程序员最新Java项目实战《苍穹外卖》,最适合新手的SpringBootSSM的企业级Java项目实战。 新增员工 设计 DTO 类 我们需要根据新增员工接口设计对应的 DTO 类去接收前端传递的参数,前端传递参数列表如下: 注意: 当前端提交的…

C++ 成员初始化列表和new运算符的应用

输出一个学生的学号&#xff0c;姓名&#xff0c;性别和出生年月日 class Date { public:Date(int y, int m, int d) :m_year(y), m_month(m), m_day(d) {}void Print(){cout << m_year << "/" << m_month << "/" << m_day…

第四章 No.1树状数组的原理与使用

文章目录 应用问题原理树状数组练习题241. 楼兰图腾242. 一个简单的整数问题243. 一个简单的整数问题2244. 谜一样的牛 线段树的反面&#xff1a;树状数组原理复杂&#xff0c;实现简单 应用问题 支持两个操作&#xff1a;快速求前缀和任意地修改某个数&#xff0c;时间复杂度…

520 · 一致性哈希 II

链接&#xff1a;LintCode 炼码 - ChatGPT&#xff01;更高效的学习体验&#xff01; 题解&#xff1a; class Solution{private:int n;const int mVirtualNodeCount;map<int, int> mVirtualNodeToMachineIdMap;set<int> mVirtualNodeSet;public:Solution(int n…

SpringBoot的三层架构以及IOCDI

目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中&#xff0c;IOC&#xff08;Inversion of Control&#xff09;和DI&#xff08;Dependency Injection&#xff09;是密切相关的概念。 IOC&#xff08;控制反转&a…

CAN学习笔记2:CAN简介

CAN 1 概述 CAN(Controller Area Network),是 ISO 国际标准化的串行通信协议,目的是适应汽车“减少线束的数量”、“通过多个网络进行大量数据的高速传输”的需求。 低速 CAN(ISO11519)通信速率 10~125Kbps&#xff0c;总线长度可达 1000米. 高速 CAN(ISO11898)通信速率 125~…

cnn卷积神经网络(基础)

convolutional neural networks 特征提取&#xff08;卷积、下采样&#xff09;->分类器 &#xff08;全连接&#xff09; 卷积过程 依次进行数乘 &#xff08;每个相同位置上的数字相乘再加和&#xff09; 左右数乘矩阵channel数量要一样&#xff0c;输出得到一个通道 卷…