Kalman Filter in SLAM (1) ——Data Fusion and Kalman Filter(数据融合和卡尔曼滤波)

news2024/9/28 17:32:33

在这里插入图片描述


文章目录

  • 0. 参考资料
  • 1. Intro Example 例子引入
    • 1.1. 测量硬币直径
    • 1.2. 思考
  • 2. Data Fusion 数据融合
    • 2.1. 数据融合在做什么?
    • 2.2. 数据融合的前提——不确定度
    • 2.3. 数据融合的结果——统计意义下的最优估计
  • 3. State Space Representation 状态空间表达式
    • 3.1. 状态方程
    • 3.2. 观测方程
    • 3.3. 系统状态空间方程举例
  • 4. Kalman Filter 卡尔曼滤波
    • 4.1. Kalman Filter 在做什么?
    • 4.2. Kalman Filter 的思路
    • 4.3. Kalman Gain
    • 4.4. Kalman Filter 五大公式总结

0. 参考资料

【卡尔曼滤波器】_Kalman Filter_全网最详细数学推导

1. Intro Example 例子引入

1.1. 测量硬币直径

给你如下不同的传感器,如何得到硬币的直径?

  • Test 1:只给你一个米尺。
    Answer 1:用米尺测两次硬币直径,取平均值

在这里插入图片描述

  • Test 2:给你两个刻度分辨率不同的米尺。
    Answer 2:分别用两个米尺测量一次,此时还能取平均值吗
    在这里插入图片描述

  • Test 3:给你一个米尺和一个千分尺。
    Answer 3:分别用米尺和千分尺各测量一次,此时还能取平均值吗
    在这里插入图片描述

1.2. 思考

显然随着传感器精度的不同,我们使用不同的传感器测量的结果不能再简单的取平均值了,因为在不考虑系统误差的情况下,千分尺的测量结果显然要比米尺的测量结果更准确。

那么如何从不同传感器的测量结果中,得到我们对硬币直径的最优估计?这就需要后面数据融合的方法!

2. Data Fusion 数据融合

2.1. 数据融合在做什么?

使用不同的传感器,获得对系统状态的最优估计

比如上述例子中,使用不同的传感器测量硬币直径,最后需要给出对硬币直径的最优估计。

在这里插入图片描述

2.2. 数据融合的前提——不确定度

没有完全准确的传感器,也不存在完全准确的测量过程。也就是说,每次测量都是存在不确定度的,只不过是在不考虑系统误差的情况下,传感器精度越高,其测量的不确定度就越小。比如上述例子中,千分尺的测量不确定度就要远小于米尺的测量不确定度。

不确定度在统计学中就是标注差、方差、协方差矩阵的概念。显然在前面的例子中,在对不同传感器测量的结果进行加权平均的时候,我们应该考虑不同传感器的不确定度,也就是不确定度越小的传感器,其测量值所占的权重应该越大,因为它更准确。

在这里插入图片描述

2.3. 数据融合的结果——统计意义下的最优估计

每次测量都是有不确定度的,所以从统计意义上讲我们的测量值是一个随机变量,而最终我们对系统状态的估计值也是一个随机变量。那么最优的数据融合结果应该有最小的方差,对于多维随机变量来说就是拥有最小的协方差矩阵的迹

所以下面我们推导前面的不同传感器测量的结果进行加权平均的时候,目的就是让最后加权平均的结果有最小的方差。

在这里插入图片描述

推导结果如上图所示,其中两侧测量是独立的,所以根据方差的性质可以展开成两部分。然后最终的目的是求解 k k k让方差最小,所以我们就是对 k k k求导,导数为0的点就是极值点。

最终的结果也是容易解释的,分成两种情况:

  • σ 1 2 \sigma_1^2 σ12非常大, k k k趋向1,融合结果趋向 z 2 z_2 z2。这个显然是对的,因为测量1的方差很大,也就是它的测量结果更不准确,所以我们倾向于相信测量2的结果。
  • σ 2 2 \sigma_2^2 σ22非常大, k k k趋向0,融合结果趋向 z 1 z_1 z1。分析同上。

利用我们上面推导得到的公式,带到前面米尺和千分尺测量硬币直径的例子中,看一下最终融合的结果,可以发现结果非常靠近千分尺的结果,这个也是我们想要的。
在这里插入图片描述

3. State Space Representation 状态空间表达式

在机器人状态估计问题中,并不是简单的两个传感器测量状态然后融合结果的过程,而是通常会对系统的运动过程做一个建模,根据这个建模的运动过程我们就可以预测系统的状态。当有新的传感器测量之后,再根据测量结果更新我们对系统状态的预测值,从而达到更优的系统状态估计。

上述过程其实就是系统的状态空间表达式,在Kalman Fiter中分为状态方程观测方程两个部分:

3.1. 状态方程

对系统的物理模型进行数学建模,比如SLAM中假设机器人在做匀速匀速或者加速运动,那么建立的数学模型就分别是匀速运动模型和加速运动模型。

总而言之,状态方程是我们算出来的,或者推导出来的。知道了系统上一时刻的状态,利用状态方程,我们就可以计算得到当前时刻的系统状态,这就是对系统状态的预测

另外一个值得注意的问题是,和 数据融合 章节中我们提到的一样,不管是测量值还是我们这里的数学建模,都是有不确定性的,比如这里我们建立的数学模型可能不准确,所以状态方程是有噪声的。在Kalman Filter中,假设噪声符合高斯分布,这是后面推导Kalman Gain的必要前提条件

在这里插入图片描述

3.2. 观测方程

这个和前面测量硬币直径是一样的,就是我们对系统状态进行的观测。但是在SLAM中可能没有前面那么直接,而是有一个观测模型在里面。比如VIO中我们要估计系统的6DOF位姿,但是其实我们从相机中直接拿到的是特征点观测的像素值,而不是直接对系统6DOF的观测值。但是这个观测值和系统的6DOF状态是有关系的,也就是相机的投影模型,在这个投影模型中,就把实际的 观测像素值系统6DOF状态值 关联到一起了,这个关联的关系就是观测模型。

总而言之,观测方程尽管没有直接对要估计的系统状态进行测量,但是它通过观测模型间接对系统状态进行了测量,因此它最终还是对系统状态的测量。

同理,观测也是有噪声的,比如相机观测的特征点的位置可能并不是很准确,相机的投影模型可能也不是很准确,所以这里也要加入高斯噪声,注意这里也必须是高斯噪声,因为这是后面推导Kalman Gain的前提条件
在这里插入图片描述

3.3. 系统状态空间方程举例

假设有个小车,上面有一个单线激光发射器可以测量它离起始点的距离,有一个轮速计可以测量轮子的速度。现在我们的目的就是估计这个小车的状态,那么系统状态空间方程可以建立如下:
在这里插入图片描述
注意:上述建立状态空间方程的过程中,把轮速计的测量加到了状态方程中,把激光的测量加到了观测方程中。按理说他俩不都是观测吗?为什么要把轮速计加到状态方程中呢?

其实把轮速计加到观测方程中和加到状态方程中本质是一样的,加到状态方程中我们就把噪声加到了轮速的地方,这个时候它就是作为状态方程的输入量 u u u。如果把它加到观测方程中,那么状态方程中 u u u就是0了,系统就是靠上次的速度递推这次的状态,然后轮速计在观测方程中对速度进行约束。可以发现其实这两种建模方式都是本质是一样的,只不过是在数学表达上不太一样。

4. Kalman Filter 卡尔曼滤波

4.1. Kalman Filter 在做什么?

Kalman Filter(卡尔曼滤波),名字叫做滤波,但是更准确的说它不是一个滤波器,而是一个状态估计器

它的目的就是利用系统的状态方程和观测方程,得到对系统状态在统计意义下的最优估计

在这里插入图片描述

注意:Kalman Filter的两大前提:

  • 状态方程和观测方程都是线性的,也就是要有系数矩阵 A A A H H H
  • 状态方程和观测方程的噪声都是高斯噪声

注意这两个条件是卡尔曼滤波应用的前提条件,因为只有在这两个前提条件下,推导得到的 Kalman Gain 才能让融合的结果在统计意义上是最优的。

4.2. Kalman Filter 的思路

既然是用状态方程和观测方程融合,那么就写出来他们对系统状态的估计结果,然后像测量硬币直径一样对两个结果进行数据融合就可以了。如下所示:

在这里插入图片描述
注意

  • 用状态方程得到的结果称为预测值,其中在计算的过程中我们把过程噪声 w w w认为是0,因为它是0均值的高斯分布这个噪声这次到底是多少我们没办法知道,因为它是随机的高斯噪声。如果知道了我们就不用做Kalman Filter了,直接把噪声的值带入状态空间方程中,就得到系统的真值状态了。正是因为我们不知道每一次噪声到底是多少,才需要用Kalman Filter来估计系统的状态。所以我们在计算的时候,只能把噪声值设置成它的均值,也就是0。当前如果噪声的均值不是0,那么是多少这里带入多少就行了,总之带入的就是噪声 w w w的均值。观测方程中对噪声的处理同理
  • 观测方程中,由于它不是直接对系统状态进行观测,而是有一个观测模型。也就是有一个系数矩阵 H H H在系统状态变量和观测变量之间做了映射,因此我们想要从传感器测量中得到直接对状态的观测,需要求伪逆。这个地方只是为了后续推导的理解方便,最终Kalman Filter的结果中是不存在这个求伪逆的过程的。

套用数据融合的思路,我们只需要对状态预测值状态观测值做加权就可以了,如下所示:
在这里插入图片描述

对前面的加权平均的式子进行进一步推导,消掉其中求 H H H的伪逆的过程,可以得到如下结果,其中的 K K K就是大名鼎鼎的 Kalman Gain:
在这里插入图片描述
在套用数据融合中的思路,我们最终的目的就是找到一个合适的权重系数,让最终的加权平均的结果有最小的方差,对于多维随机变量来说就是有最小的协方差矩阵的迹。如下所示:

在这里插入图片描述
注意

  • 其中预测状态的协方差 P ^ k \hat{P}_k P^k通过系统的状态方程计算出来的。而观测方程的协方差因为现在我们没有从观测空间转到状态空间,也就是没有求伪逆,所以直接就是观测的协方差 R R R

4.3. Kalman Gain

这个部分非常复杂,详细的推导过程可以参照B站视频:【卡尔曼滤波器】3_卡尔曼增益超详细数学推导 ~全网最完整
在这里插入图片描述

或者我的手写笔记:Kalman Filter in SLAM (1.5) ——Derivation of Kalman Gain and Covariance Matrix (卡尔曼增益和协方差矩阵推导)

这里直接给出结果:
在这里插入图片描述

4.4. Kalman Filter 五大公式总结

  • 状态方程做预测:根据上一时刻的状态和系统状态空间方程,对当前时刻的状态做预测,同时会更新当前预测的状态的协方差矩阵:

在这里插入图片描述

  • 观测方程做更新:首先计算 Kalman Gain,然后把它当做权重融合预测状态观测值,得到系统的最优估计。可以看到,这里预测值是系统状态,观测值是传感器直接的观测量,所以 Kalman Gain 是有量纲的,而且它的量纲和 H − 1 H^{-1} H1量纲是一样的
    在这里插入图片描述

在这里插入图片描述

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

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

相关文章

大数据 | (二)SSH连接报错Permission denied

大数据 | (三)centos7图形界面无法执行yum命令:centos7图形界面无法执行yum命令 哈喽!各位CSDN的朋友们大家好! 今天在执行Hadoop伪分布式安装时,遇到了一个问题,在此跟大家分享, …

ThreadLocal的内部结构和源码探究

目录一. ThreadLocal的内部结构1 常见的误解2 现在的设计3 这样设计的好处二. ThreadLocal的核心方法源码1 set方法2 get方法3 remove方法**4 initialValue方法**三. ThreadLocalMap源码分析1 基本结构2 弱引用和内存泄漏3 hash冲突的解决一. ThreadLocal的内部结构 ​ 通过之…

【C++知识点】STL 容器总结

✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📚专栏地址:C/C知识点 📣专栏定位:整理一下 C 相关的知识点,供大家学习参考~ ❤️如果有收获的话,欢迎点赞👍…

2月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年2月飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数三个维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的B站UP主。飞瓜…

(蓝桥真题)剪格子(搜索+剪枝)

样例1输入: 3 3 10 1 52 20 30 1 1 2 3 样例1输出: 3 样例2输入: 4 3 1 1 1 1 1 30 80 2 1 1 1 100 样例2输出: 10 分析:这道题目我们直接从(1,1)点开始进行dfs搜索即可,但是需要注意一点的是我们搜…

FPGA和IC设计怎么选?哪个发展更好?

很多人纠结FPGA和IC设计怎么选,其实往小了说,要看你选择的具体是哪个方向岗位。往大了说,将来你要是走更远,要成为大佬,那基本各个方向的都要有涉及的。 不同方向就有不同的发展,目前在薪资上IC设计要比FP…

Vue3返回顶部组件及返回顶部js封装

介绍 vue3中,封装监听页面滚动的js, 及页面滚动到一定像素时,显示返回顶部的按钮,点击按钮会有放大的动画,并逐渐滚动到顶部的组件。效果如下: 代码 封装js,监听屏幕滚动事件,以及是否显示返回顶部的按钮; 在项目目录下新建 utils文件夹,并在该文件夹下创建index.…

国外SEO优化的重要性及应对策略

SEO是指搜索引擎优化,是一种通过优化网站的结构和内容,提高网站在搜索引擎中的排名,从而吸引更多的流量和潜在客户的过程。 国外SEO优化尤为重要,因为搜索引擎在全球范围内广泛使用,而谷歌是全球最受欢迎的搜索引擎之…

java Math类 和 System类 详解(通俗易懂)

Math类介绍Math类常用方法及演示System类简介System类常用方法及演示一、前言本节内容是我们《API-常用类》专题的第四小节了。本节内容主要讲Math类和System类, 内容包括Math类介绍、Math类常用方法、System类介绍,System类常用方法。该小节内容基本不涉…

【教程】你现在还不知道微软的New Bing?你out了,快点进来看

哈喽啊,大家好,好久不见,我是木易巷! 不禁感叹,AI人工智能时代真的已经来临! 目前,谷歌和微软就各自面向大众的产品发布了重大公告。谷歌推出了一款名为Bard实验性对话式 AI 服务,而…

Python开发入门之了解Python高阶函数

上段时间有小伙伴询问:高阶函数的问题,今天小编就带大家一起来看一看: 一、什么是高阶函数? 高阶函数是在Python中一个非常有用的功能函数,所谓高阶函数就是一个函数可以用来接收另一个函数作为参数,这样的函数叫做…

扬帆优配|数字经济刮起“东风”,龙头晋级7连板

今日两市共40只涨停股,主要集中于数字经济、6G板块,上一个交易日涨停股为29股;除掉18只ST股及3只一字板新股,共19股涨停。另外,4股封板未遂,整体封板率为83%。 6股封单金额超亿元 从收盘涨停板封单量来看&…

第54章 图片URL的后端获取

1 注意: 在.NetCore WebApi框架中,在默认情况下由于没有集成“UseStaticFiles”内置管道中间件方法,如果想要通过图片URL显示图片,由会显示“404”错误,必须先把“UseStaticFiles”内置管道中间件方法集成到.NetCore W…

安装MySQL数据库8.0服务实例

前言 之前尝试去安装了MySQL5.7的社区版本,今天来安装MySQL8.0的版本,并且以两种方式进行安装,一个是通过RPM包的安装,另一个则是编译的方式。 一. 前期准备 查看服务器IP [rootlocalhost ~]# hostname -I 192.168.161.166 19…

js中window自带的四舍五入toFixed方法中的坑以及解决办法

Hello,各位,我胡汉三~啊呸,我又回来啦,还改了名,换了头像,哈哈哈!时隔这么长时间不更新了,太忙了,平时笔记都记在了自己的电脑上,从今天起,继续更…

vxe-grid 全局自定义filter过滤器,支持字典过滤

一、vxe-table的全局筛选器filters的实现 官网例子:https://vxetable.cn/#/table/renderer/filter 进入之后:我们可以参照例子自行实现,也可以下载它的源码,进行调整 下载好后并解压,用vscode将解压后的文件打开。全局…

CRM系统中的营销自动化能解决什么问题

CRM客户管理系统营销自动化的范围远远超出了人们的认知。许多人认为它只是自动化完成重复和乏味的任务来减少营销人员的工作量。虽然这确实占了很大一部分,但它真正的价值在于提高潜客转化,增加业务收入。那么,什么是CRM系统营销自动化&#…

195、【动态规划】AcWing —— 91. 最短Hamilton路径(C++版本)

题目描述 原题链接:91. 最短Hamilton路径 解题思路 动态规划五步曲: (1)dp[i][j]含义: 到达点j并且状态为i时,具有的最短路径长度,其中状态j用状态压缩二进制的方式表示。j中从0-n-1位分别对…

【玩转c++】List讲解和模拟底层实现

本期主题:list的讲解和模拟实现博客主页:小峰同学分享小编的在Linux中学习到的知识和遇到的问题小编的能力有限,出现错误希望大家不吝赐1.list的介绍和使用1.1.list的介绍1.list是可以在常数范围内在任意位置进行插入和删除的序列式容器&…

Good Idea, 利用MySQL JSON特性优化千万级文库表

👳我亲爱的各位大佬们好😘😘😘 ♨️本篇文章记录的为 利用MySQL JSON特性优化千万级文库表 相关内容,适合在学Java的小白,帮助新手快速上手,也适合复习中,面试中的大佬🙉🙉&#x1f…