EKF—SLAM推导

2023-05-16

转自   http://blog.csdn.net/qq_30159351/article/details/53408740

这是SLAM最传统的基础,是SLAM最原始的方法,虽然现在使用较少,但是还是有必要了解。

What’s Kalman Filter

这是一个贝叶斯滤波器,估计线性高斯模型,是对线性模型和高斯分布的优化方法。

高斯分布

首先,回顾一下高斯分布: 
这里写图片描述 
高斯分布的一些性质: 
如果原变量为高斯分布,则边缘化和条件概率仍然满足高斯分布。 
这里写图片描述 
边缘分布和条件分布的模型: 
这里写图片描述这里写图片描述


卡尔曼滤波器的主要参数

卡尔曼滤波器假设x(paths), z(observations)都为线性高斯的: 
这里写图片描述 
主要参数: 
这里写图片描述 
A是在没有命令的情况下,由于环境因素造成的机器人的位置移动。 
B是命令对机器人位置的改变 
C是地图和observations的对应关系,即两者的联系,描述。 
最后两个为噪声,是由于测量中的误差造成的。协方差分布为R, Q。

线性motion model和observation model

因为之前已经假设了x,z都是高斯分布的 
运动模型: 
这里写图片描述 
观测模型: 
这里写图片描述 
由此就可以使用第三节的贝叶斯滤波器公式: 
这里写图片描述


卡尔曼滤波器算法

这里写图片描述 
2,3是prediction过程,4-7是correction过程。 
其实卡尔曼滤波就是在估计和测量中找到一个平衡。 
K为卡尔曼增益,就是通过这个变量来调节估计和预测的平衡。 
这里写图片描述 
卡尔曼滤波是在假设高斯和线性动作和观测模型下进行的,但是现实中并不是这样的。


What’s Extended Kalman Filter

引入非线性模型: 
这里写图片描述 
在线性高斯模型中: 
这里写图片描述 
在非线性高斯模型中: 
这里写图片描述 
通过局部线性来解决非线性的问题。


复习Jacobian矩阵

这里写图片描述 
它相当于对一个非线性函数做了切平面。 
这里写图片描述


修改预测和校正过程

这里写图片描述 
用图表示为: 
这里写图片描述 
这里写图片描述 
由此运动模型和观测模型修改为: 
这里写图片描述 
这里写图片描述


Extended Kalman Filter算法

这里写图片描述

上一节主要讲解了EKF的基本原理,这一次主要关注如何将EKF算法应用在SLAM上。

EKF-SLAM

现在的问题就是解决下面这个概率分布的估计问题: 
这里写图片描述 
阴影部分为未知 
这里写图片描述 
这里我们需要确定均值和方差到底是什么?

假设在2D平面内,状态表示为下面这个式子: 
这里写图片描述 
所以有均值和方差为: 
这么Map有n个landmark,所以是3+2n维的高斯分布 
这里写图片描述 
简写为: 
这里写图片描述


EKF-SLAM的过程

这里写图片描述

  • State prediction

这里写图片描述 
机器人往前走一步,通过motion model可以估计机器人所在的位置,此时机器人位置的不确定性会增加(红色区域为机器人可能在的位置)。均值和方差绿色部分将需要更新。

例如之前提到的速度运动模型,可以有下面的预测 
这里写图片描述 
相对应3+2n的维度上有: 
这里写图片描述 
然后对于Gt有,因为移动还只是更新了位置,所以只需要更新均值的前三个变量x,y , 角度即可,方差更新左上角的3*3矩阵。 
这里写图片描述 
Gxt的推导: 
这里写图片描述 
Measurement prediction and measurement

此时根据观测模型估计看到的landmark 
这里写图片描述 
然后根据传感器去观测真实的landmark 
这里写图片描述 
即: 
这里写图片描述 
**至此EKF的2,3步的prediction过程就完成了 
总结一下:(速度运动模型的EKF的prediction过程分为下面这5步)** 
这里写图片描述

  • Data associate

计算h(x)和z之间的差距,即预测的和实际测量中的误差。 
这里写图片描述

  • Update

然后更新整个估计矩阵: 
这里写图片描述 
可以看出,如果你的landmark非常多的时候,更新是非常耗时的。

例如: 
以激光为例,可以这样表示observations 
这里写图片描述 
uj为landmark的位置,ut为机器人的位置。

这里写图片描述 
第一个变量是机器人位置和landmark的距离, 
第二个变量是距离的平方, 
第三个变量是landmark的表示。

然后我们就需要计算Jacobian矩阵: 
这里写图片描述 
low指只考虑一个landmark的情况:这里写图片描述 
所以有: 
这里写图片描述 
这里写图片描述 
对应到高维,即只是更新了对应landmark的H 
这里写图片描述 
H和h求出来了,这样校正过程就完成了。

总结:(用激光的校正过程如下) 
这里写图片描述 
这里写图片描述


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

EKF—SLAM推导 的相关文章

随机推荐

  • 类与对象以及类的继承

    类与对象以及类的继承 Java是一门面向对象的语编程言 世界上有众多对象 xff0c 我们把具有相同属性和方法的对象归为一个类 因此 xff0c 类 便是Java代码中的基本单位 下面是对一些名词的解释 类 类是一个模板 xff0c 用来定
  • 如何使用 Apache IoTDB 触发器

    Apache IoTDB 触发器提供了一种侦听序列数据变动的机制 配合用户自定义逻辑 xff0c 可完成告警 数据转发等功能 触发器基于 Java 反射机制实现 用户通过简单实现 Java 接口 xff0c 即可实现数据侦听 IoTDB 允
  • Apache IoTDB 查询引擎源码阅读——数据异步传输模块

    本文参考了 Apache IoTDB 社区成员田原和王中的设计文档 xff0c 由于飞书链接限制 xff0c 本文没有贴出参考链接 背景 Apache IoTDB 查询引擎目前采用 MPP 架构 xff0c 一条查询 SQL 大致会经历下图
  • strchr字符查找函数族;strchrnul()

    https blog csdn net jasonchen gbd article details 80069134 Linux中的字符串和字节序列处理函数 Y 字符串查找 xff0c 有库函数 xff0c 可以起到事半功倍的效果 xff0
  • 【Matlab】线性二次型最优控制问题(LQR控制)

    前面介绍了变分法与极小值原理的基础思想 xff0c 之后有一个非常重要的应用就是线性二次型的最优控制问题 假如系统是线性的 xff0c 性能泛函是状态变量与控制变量的二次型函数的积分 xff0c 那么这样的问题称之为线性二次型最优控制问题
  • 什么是回调函数?为什么要使用回调函数?如何使用回调函数?

    1 什么是回调函数 xff1a 函数指针的调用 xff0c 即是一个通过函数指针调用的函数 xff1b 如果你把函数的指针 xff08 地址 xff09 作为参数传递给另一个函数 xff0c 当这个指针被用来调用其所指向的函数时 xff0c
  • android.mk编译规则,1个mk文件编译多个模块

    目录 Android mk 自我理解 Android mk 是什么 Android mk 语法规则 规则解释 xff1a Android mk 编译多个模块实例 xff0c 详见如下 xff1a Android mk 语法规则 xff1a
  • Wireshark抓包分析 TCP三次握手/四次挥手详解

    Wireshark抓包分析 TCP三次握手 四次挥手详解 2019 11 13阅读 1 9K0 作者 xff1a 踏歌追云 来源 xff1a https urlify cn jYVZn2 本文结合wireshark抓包 xff0c 对TCP
  • tls1.3【转载】

    tr tls1 3 发表于 2021 01 04 20 39 更新于 2021 04 29 17 15 tls1 3翻译备忘 摘要 该文档定义了TLS Transport Layer Security 协议的1 3版本 TLS可以让C S应
  • TLS中ChangeCipherSpec为什么是个单独的协议类型【转】

    发表于 2020 03 14 22 27 更新于 2021 04 29 17 15 RFC5246中说 Note To help avoid pipeline stalls ChangeCipherSpec is an independen
  • linux下多线程获取互斥锁,多线程运行时机

    linux内核 CPU 调度决定的线程运行的时间是难以预见 若在复杂程序中发生这一不确定行为 xff0c 则意味着此类错误将偶尔发作 xff0c 难以重现 xff0c 因此也很难发现
  • 数字签名算法MD5和SHA-1的比较

    什么是MD5 xff0c 什么是SHA 1 xff0c 如何校验这些Hash 还有拿单个ISO文件的MD5 xff0c SHA 1讯问是不是原版的问题 xff0c 在这里 xff0c 对以上问题做一个终结解释 xff01 了解 hash H
  • JavaEE.sql.Delete删除语句

    DELETE 语法格式 DELETE FROM table name WHERE condition S1 常用用法 DELETE FROM test master WHERE bindNo 61 39 bn002 39 S2 清空表 DE
  • Docker 容器使用

    Docker 容器使用 可以通过命令 docker command help 更深入的了解指定的 Docker 命令使用方法 容器使用 获取镜像 如果我们本地没有 ubuntu 镜像 xff0c 我们可以使用 docker pull 命令来
  • 【ADRC】跟踪微分器

    在上一篇文章中 xff0c 分析了PID算法的基本数学原理 xff0c 从PID算法的原理与实际应用 xff0c 是可以看出其PID的优点与缺点的 xff0c ADRC算法 自抗扰控制 也可以说是针对PID算法的一些缺点 xff0c 或者说
  • 树莓派3B+安装系统(Raspbian)以及配置环境

    1 硬件准备 1 树莓派3B 43 xff08 E14 xff09 2 一张64G的闪迪存储卡 3 一个读卡器 4 普通电脑显示器 xff0c 键盘 xff0c 鼠标 5 一台可以正常工作的Window系统的电脑 2 安装系统 1 树莓派系
  • 微策略的笔试题

    觉得在收获Offer的季节应该为自己积累些人品了 xff0c 在这里将今天的情况向所有求Offer的童鞋分享下 从上个周末开始反应迟钝的我终于有了些求Offer的感觉 xff0c 几天参加了4场面试 xff0c 基本上没觉得有很大的挑战 x
  • 【无标题】嘉立创EDA,stm32F4控制板。

  • 使用docker-compose连接mysql以及8.0版本遇到的身份验证问题解决方案

    docker compose 使用Docker部署环境非常方便 xff0c Compose项目是 Docker 官方的开源项目 xff0c 负责实现对 Docker 容器集群的快速编排 它允许用户通过一个单独的docker compose
  • EKF—SLAM推导

    转自 http blog csdn net qq 30159351 article details 53408740 这是SLAM最传统的基础 xff0c 是SLAM最原始的方法 xff0c 虽然现在使用较少 xff0c 但是还是有必要了解