连载文章,长期更新,欢迎关注:


写在前面

第1章-ROS入门必备知识

第2章-C++编程范式

第3章-OpenCV图像处理

第4章-机器人传感器

第5章-机器人主机

第6章-机器人底盘

第7章-SLAM中的数学基础

7.1 SLAM发展简史

7.2 SLAM中的概率理论

7.3 估计理论

7.4 基于贝叶斯网络的状态估计

7.5 基于因子图的状态估计

7.6 SFM、BA和SLAM比较

7.7 典型SLAM算法

第8章-激光SLAM系统

第9章-视觉SLAM系统

第10章-其他SLAM系统

第11章-自主导航中的数学基础

第12章-典型自主导航系统

第13章-机器人SLAM导航综合实战


针对式(7-38)所述的在线SLAM系统,以扩展卡尔曼滤波(EKF)为代表的滤波方法,是求解该状态估计问题最典型的方法,在7.4节中已经详细讨论了这些滤波方法的基础原理,而基于滤波方法基础原理的两种典型实现框架EKF-SLAM和Fast-SLAM将在下面进行详细讨论。虽然式(7-39)所示的完全SLAM系统可以用滤波方法求解,比如著名的Fast-SLAM实现框架。但是,贝叶斯网络表示下的完全SLAM系统能很方面地转换成因子图表示,这部分内容已经在7.2.4节中讨论过了。利用因子图表示完全SLAM问题,然后用最小二乘估计进行求解会更方便。

针对式(7-39)所述的完全SLAM系统,优化方法是求解该状态估计问题最典型的方法。这部分内容,首先将贝叶斯网络表示的SLAM问题转化到因子图表示。这样贝叶斯网络中的最大后验估计就等效为因子图中的最小二乘估计,这种最小二乘估计常常是非线性最小二乘估计。在7.5节中已经介绍了这种非线性最小二乘估计的求解方法,一种方法是经过线性化近似后直接求解,这种直接求解方法的典型实现框架Graph-SLAM将在下面进行详细讨论;另一种方法是采用迭代方式间接求解,也就是所谓的优化方法,现今主流SLAM算法中大多数都基于这种优化方法。

按照在线SLAM还是完全SLAM,贝叶斯网络表示还是最小二乘表示,SLAM框架可以用表7-4来分类。

表7-4  SLAM框架分类

在线SLAM系统

完全SLAM系统

贝叶斯网络表示

EKF滤波

EKF-SLAM

粒子滤波

Fast-SLAM

最小二乘表示

直接法

Graph-SLAM

优化法

现今主流SLAM

7.7.1 EKF-SLAM

在7.4节中介绍滤波法的基本原理时,为了方便讨论,只考虑了估计机器人位姿状态这个最简单的情况,如式(7-88)所示。现在来讨论在线SLAM系统中同时估计机器人位姿状态和路标的情况,如式(7-89)所示。求解在线SLAM问题,使用最早也最经典的方法就是基于EKF滤波方法,相应的实现框架就是EKF-SLAM[3] p306~318。

使用EKF滤波方法求解式(7-89)所示的在线SLAM问题,首先就是将估计问题的后验概率用高斯分布参数化表示,如式(7-169)所示。

其实,就是将待估计量用一个新的状态向量来集中表示。考虑新的状态估计量,那么机器人的运动和观测方程可以改写成式(7-170)和(7-171)所示形式。

其中为运动过程携带的高斯噪声,协方差矩阵记为为观测过程携带的高斯噪声,协方差矩阵记为

这些变量定义好后,就可以直接拿式(7-116)所示EKF的5个核心公式进行滤波了。下面把这5个核心公式搬出来,如式(7-172),便于大家阅读。这就是EKF-SLAM框架的滤波实现过程,滤波器的输入是当前运动与观测量()和前一时刻的状态分布(),滤波器的输出是当前时刻的状态分布()。可以看到滤波方法是一种增量求解方法,只需要输入新量测信息就能完成对SLAM状态量的求解,也就是所谓的在线SLAM系统。

7.7.2 Fast-SLAM

以EKF-SLAM为代表的在线SLAM系统,其EKF滤波方法是一种增量求解方法,只需要输入新量测信息就能完成对SLAM状态量的求解,这种增量求解方法具有很大优势。但是EKF-SLAM也有两个明显的缺点,一方面,其将所估计后验分布假设成高斯分布,非线性高斯系统必须被线性化近似成线性高斯系统,这种简单粗暴的线性化近似容易引起较大误差;另一方面,状态量的协方差矩阵的复杂度随路标数量是二次方增长,即复杂度,也就是说其无法建立大规模地图。为了解决线性化和构建大规模地图的问题,大家开始放弃EKF-SLAM这种在线SLAM增量求解的好处,转向完全SLAM系统的研究,如式(7-173)所示。

完全SLAM系统的一个方向仍然是基于贝叶斯的滤波方法,将EKF参数滤波换成非参数化的粒子滤波,这样就不用处理EKF中的非线性高斯系统线性化近似的问题了,并且还可以处理非线性非高斯系统这种更一般的情况。但是,如果每个状态用个粒子点表示其后验分布情况,那么表示所有状态的后验分布所需要的粒子点复杂度就是。其中RBPF(Rao-Blackwellization Particle Filter)这种改进版的粒子滤波,能将粒子点复杂度降低到。RBPF的思路是将SLAM问题中的机器人轨迹估计和路标估计分离开来,如式(7-174)所示,轨迹估计其实就是定位问题,采用粒子滤波来实现;在每个粒子点确定的一条机器人轨迹上,都可以用EKF来估计对应的路标,其实就是建图问题,采用EKF来实现。基于RPBF有很多具体的SLAM实现框架,Fast-SLAM就属于其中一种实现[3] p318~333。

完全SLAM系统的另一个方向是基于最小二乘的方法,贝叶斯网络表示转化到了图结构表示,利用图结构中的约束关系构建非线性最小二乘,如式(7-175)所示,最后利用直接法或者迭代优化法求解该最小二乘。最小二乘法解决了EKF-SLAM中不能建立大规模地图的问题,因为最小二乘法只是将系统收集到的所有时刻信息构建成一个方程,求解该方程或者迭代求解,利用方程的稀疏性等特点很好求解,求解复杂度受建图规模的影响没那么大。

完全SLAM系统的另一个方向是基于最小二乘的方法,贝叶斯网络表示转化到了图结构表示,利用图结构中的约束关系构建非线性最小二乘,如式(7-175)所示,最后利用直接法或者迭代优化法求解该最小二乘。最小二乘法解决了EKF-SLAM中不能建立大规模地图的问题,因为最小二乘法只是将系统收集到的所有时刻信息构建成一个方程,求解该方程或者迭代求解,利用方程的稀疏性等特点很好求解,求解复杂度受建图规模的影响没那么大。

7.7.3 Graph-SLAM

现在讨论基于最小二乘的完全SLAM系统,其直接求解方法的典型实现框架是Graph-SLAM。从滤波法的最大后验推导出最小二乘表示,如式(7-50)所示。然后利用一阶泰勒展开将式(7-50)中的运动和观测函数线性化,就得到了式(7-126)所示的形式。在7.5.2节中已经介绍了求解式(7-126)所示线性方程的方法,就是采用Cholesky分解和QR分解对线性方程中的信息矩阵进行数值分解,间接性解线性方程。在Graph-SLAM中,解法也是类似的,只不过换了种说法,即所谓的信息滤波。

在Graph-SLAM中的信息滤波中,首先将式(7-126)所示线性方程替换成信息参数表示,关于信息参数与矩参数的关系,如式(7-100)所示。然后,该最小二乘的求解方式就转换成信息滤波过程了。可以看到Graph-SLAM中求解最小二乘的过程,是一种解析过程,即信息参数的预测和更新,也就是所谓的直接法。关于Graph-SLAM中信息滤波的具体过程,可以参考文献[4] p353~362中的内容,不要求大家掌握。

7.7.4 现今主流SLAM算法

虽然EKF-SLAM、Fast-SLAM和Graph-SLAM是最经典的几个SLAM框架,也囊括了SLAM的几个主要研究方向,但是只在学术上还会被提起,工程应用上已经不会使用这些框架了。工程应用中,现今主流SLAM算法大多是基于最小二乘的迭代优化求解,也就是所谓的优化方法。下面就介绍一些工程中常用的SLAM框架,如图7-39所示,当然其中也有一些不是优化方法的算法,只是列出来方便对比学习。

图7-39  现今主流SLAM算法

源码仓库

  • Github下载:github.com/xiihoo/Books_Robot_SLAM_Navigation

  • Gitee下载(国内访问速度快):gitee.com/xiihoo-robot/Books_Robot_SLAM_Navigation

参考文献

【1】 张虎,机器人SLAM导航核心技术与实战[M]. 机械工业出版社,2022.

一起自学SLAM算法:7.7 典型SLAM算法相关推荐

  1. 一起自学SLAM算法:7.1 SLAM发展简史

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  2. 密码学:c/c 语言实现 pdf,典型密码算法C语言实现pdf

    典型密码算法C语言实现 内容简介 <典型密码算法C语言实现>详细讲述了一些典型密码算法的算法原理及C语言实现.书中密码算法包括:序列密码.分组密码.公钥密码和Hash算法,其中序列密码有祖 ...

  3. 一起自学SLAM算法:8.1 Gmapping算法

    连载文章,长期更新,欢迎关注: 写在前面 第1章-ROS入门必备知识 第2章-C++编程范式 第3章-OpenCV图像处理 第4章-机器人传感器 第5章-机器人主机 第6章-机器人底盘 第7章-SLA ...

  4. 计算机视觉大型攻略 —— SLAM(2) Graph-based SLAM(基于图优化的算法)

    前面介绍了基于EKF的SLAM算法.EKF算法由于状态向量,协方差矩阵的大小随着特征点(路标)的增长而迅速增长,导致其不太适合大场景的应用.本文描述基于图优化的SLAM算法.目前由于SLAM图的稀疏性 ...

  5. SLAM: 图像角点检测的Fast算法(时间阈值实验)

    作为角点检测的一种快速方法,FastCornerDetect算法比Harris方法.SIft方法都要快一些,应用于实时性要求较高的场合,可以直接应用于SLAM的随机匹配过程.算法来源于2006年的Ed ...

  6. 计算机视觉招聘_INDEMIND|SLAM、计算机视觉、深度学习算法招聘(社招实习)

    公司介绍 INDEMIND是一家专注于计算机视觉技术研发与嵌入式计算平台研发的人工智能公司,行业领先的计算机视觉方案提供商.公司成立于2017年,核心技术团队成员均为来自计算机视觉领域的顶级技术人员. ...

  7. SLAM算法解析 抓住视觉SLAM难点,了解技术发展大趋势

    SLAM(Simultaneous Localization and Mapping)是业界公认视觉领域空间定位技术的前沿方向,中文译名为"同步定位与地图构建",它主要用于解决机器 ...

  8. 激光SLAM算法 -1:激光SLAM简介

    1:SLAM是什么 SLAM是同步定位与地图构建(Simultaneous Localization And Mapping)的缩写,最早由Hugh Durrant-Whyte 和 John J.Le ...

  9. 单目3D物体级SLAM | CubeSLAM: Monocular 3D Object SLAM

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 本文由知乎作者原野寻踪授权转载,不得擅自二次转载.原文链接:https://zhuanlan.zhih ...

最新文章

  1. antd Select 使用动态数据渲染选择项
  2. tomcat启动完成执行 某个方法 定时任务(Spring)
  3. 区块链学堂(2):最简单的智能合约
  4. [转载]工作面试时最难的25个问题
  5. java如何抽象一辆车,java新职篇:面向对象之抽象
  6. html应用json 文件_安全研究 | Slack桌面应用程序的RCE漏洞+XSS漏洞
  7. 通过拉勾网分析数据分析职位现状
  8. 如何快速定位BUG?BUG定位技巧及测试人员定位的N板斧
  9. java敏感词屏蔽器,“敏感词过滤”功能设置
  10. c语言less函数,less用法总结
  11. 4.一起学习Highcharts 配置选项详细说明
  12. redis服务器cpu100%的原因和解决方案
  13. oracle-12514,Oracle错误 ORA-12514 解决方法
  14. 电影网站 php asp,大站长电影网址大全 ASP版 v20180507
  15. krait和kryo_java原生序列化和Kryo序列化性能实例对比分析
  16. c语言机考答案,c语言题库答案机考
  17. 苏宁易购启动六一宝宝节,首提“共情消费”
  18. 我要读的C语言书籍(电子版百度云下载)
  19. 计算机应用基础 统考成绩查询,网络教育统考成绩查询的方法有哪些
  20. Impinj英频杰超高频Indy R2000开发资料代码

热门文章

  1. 史上最简单的spark教程第十七章-快速开发部署第一个sparkStreaming+Java流处理程序
  2. Go语言段子爬虫--捧腹网
  3. 统计力学练习: Ising模型的平均场解以及严格求解
  4. QUIC协议设计(一)-QUIC的特点
  5. 基于MQTT的数据采集系统
  6. 双系统启动菜单自动修复工具(BCDautofix)
  7. U盘防拷贝选择隐大师
  8. 等保-安全计算环境-安全审计-windows
  9. 地理信息服务器架设,基于arcgis+server构建地理信息服务.pdf
  10. OpenCV学习——实现滑动条式调色板