激光SLAM之图优化理论

2023-05-16

1.常用的两种优化方法介绍

      SLAM问题的处理方法主要分为滤波和图优化两类。滤波的方法中常见的是扩展卡尔曼滤波、粒子滤波、信息滤波等,熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的、实时的处理数据并矫正机器人位姿。比如基于粒子滤波的SLAM的处理思路是:假设机器人知道当前时刻的位姿,利用编码器或者IMU之类的惯性导航又能够计算下一时刻的位姿,然而这类传感器有累计误差,所以再将每个粒子的激光传感器数据或者图像特征对比当前建立好的地图中的特征,挑选和地图特征匹配最好的粒子的位姿当做当前位姿,如此往复。当然在gmapping、hector_slam这类算法中,不会如此轻易的使用激光数据,激光测距这么准,当然不能只用来计算粒子权重,而是将激光数据与地图环境进行匹配(scan match)估计机器人位姿,比用编码器之流精度高出很多。

        目前SLAM主流研究热点几乎都是基于图优化的,为啥都用图优化了。处理激光SLAM如果用EKF,随着时间推移地图扩大,内存消耗,计算量都很大;而使用图优化计算在高建图精度的前提下效率还快。 在图优化的方法中(graph-based slam),处理数据的方式就和滤波的方法不同了,它不是在线的纠正位姿,而是把所有数据记下来,最后一次性算账。

2.图优化理论

        图优化又被称为Graph-based SLAM,它的基本思想是将机器人不同时刻的位姿抽象为点(pose),机器人在不同位置上的观测所产生的约束被抽象为点之间的边,或者叫约束(constraint)。

        图是由节点和边构成,SLAM问题是怎么构成图呢?在graph-base SLAM中,图中的节点来表示机器人的位姿(x,y,yaw),两个节点之间的边表示两个位姿的空间约束(相对位姿关系以及对应方差)。机器人的位姿表示一个节点(node)或顶点(vertex),位姿之间的关系构成边(edge)。相邻节点之间的相对位姿关系,可以由里程计、IMU、帧间匹配计算得到,如下图所示。

        上一步已经完成了图的构建,机器人位姿当做顶点,位姿间关系当做边,这一步常常被成为前端(front-end),这一步往往是传感器信息的堆积。

        接下来可以开始优化图,调整机器人位姿顶点尽量满足边的约束,这一步称为后端(back-end)。后端的首要任务是通过回环检测来构建回环边。

        如下图所示,在机器人在位姿xi观测到的数据和机器人在位姿xj观测到的数据存在相同(回环检测),所有可以通过帧间匹配计算xi和xj的相对位姿,即完成了回环边的构建,如C所示。

 2.1 回环检测

        现在,回环边有了,节点和边也有了,就可以构建观测值(匹配计算得到的节点𝑖和节点𝑗的相对位姿)与预测值(里程积分得到的当前节点𝑖和节点𝑗的相对位姿)的误差函数来优化各个节点的位姿了,误差函数如下图所示。

        误差函数去预测值都知道了,现在可以正式开始对图中的位姿进行优化了。由于器人位姿之间的变化函数是不连续性,也就是说误差函数是非线性的,图优化问题是一个非线性最小二乘问题。非线性最小二乘求解流程如下:

 使用上述方法对误差函数求解,有:

         对于每一个位姿,都需要求解一次Jacobian矩阵,非常耗时、耗资源,这是不可取的。后来大牛通过分析,发现Jacobian矩阵具有稀疏性,这一发现,大大简化了Jacobian矩阵的求解,具体如下:

 注意:

       由于观测值观测到的是两个位姿之间的相对位姿,所以在满足相对位姿约束的情况下,在任意坐标系,都能找到一个解满足约束,这也意味着解有无穷多的。为了让解唯一,必须加入一个约束条件让某一个位姿固定,一般选择第一个位姿,即:

等价于:

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

激光SLAM之图优化理论 的相关文章

随机推荐

  • 【Python数据分析】Pandas中的绘图函数

    Pandas中有许多能够利用DataFrame对象数据特点来创建标准图表的高级绘图方法 1 折线图 y span class token operator 61 span df span class token punctuation sp
  • 【Python数据分析】matplotlib绘图

    matplotlib 是一个 Python 的 2D绘图库 xff0c 用于数据可视化 它可以函数的方式操作各个绘图命令 xff08 类似Matlab软件 xff0c Matplotlib名字的含义就是Matlab风格的绘图库 xff09
  • PPT模板、素材下载网站(纯干货,建议收藏)

    清平乐博主精心收集PPT模板 xff0c 纯干货 xff01 一 OfficePlus 网址 xff1a https www officeplus cn 特点 xff1a 下载全部免费 xff1b 质量高 微软Office官方在线模板网站
  • Impala时间函数总结

    Impala 使用impala 您可以使用传统的SQL知识以极快的速度处理存储在HDFS中的数据 Impala是基于hive并使用内存进行计算 在查询过程中 并未进行MR转换 而是采用与商用并行关系数据库类似的分布式查询引擎 直接与HDFS
  • 【数仓设计】企业数仓为什么要进行分层?(六大好处)

    一 数据仓库要不要分层 数据仓库既然是数据存储计算的地方 那么为什么需要分层呢 同样也是数据规模 业务场景决定 可以说很多公司数据仓库建设刚起步时 大部分的数据都是经过粗暴的数据接入 进行ETL后就直接对接业务 生成报表或者导入业务系统直接
  • 快速搭建samba 简单samba服务

    基于RedHat service smb restart etc init d smb start 1 安装samba包 yum install samba 2 修改相关配置文件 vim etc samba smb conf 3 添加相关s
  • 程序员=加班??掌握时间才能掌握人生

    总是有些人一生中有无数作为 xff0c 而更多的人耗费一生的时间最终换来了不过四个字 死因不详 序言 近几年 xff0c 读了比较多的书 xff0c 涉猎也比较广泛 xff0c 经管 xff0c 哲学 xff0c 心理学 xff0c 成功学
  • Presto集群Web UI界面详解

    Presto Web UI 可以用来检查和监控Presto集群 xff0c 以及运行的查询 他所提供的关于查询的详细信息可以更好的理解以及调整整个集群和单个查询 Presto Web UI所展示的信息都来自于Presto系统表 当你进入Pr
  • 【好书推荐】《华为数据之道》

    数据技术要产生实际价值 xff0c 需要良好的数据治理体系保驾护航 最近华为出版了 华为数据之道 一书 xff0c 给出了非数字原生企业在数据管理方面的实战经验 xff0c 特别适合于面临数字化转型的企业管理者 数据从业者 一 整体框架 华
  • 【好书推荐】《Python编程:从入门到实践(第2版)》

    第二版是2020年底发布的 xff0c 第二版相比较第一版更新了不少新东西 不错的python入门书 xff0c 第一部分讲基础知识 xff0c 第二部分讲了三个实际的项目 xff1a 一个小游戏 xff0c 一个数据可视化程序 xff0c
  • 【小技巧】Navicat查看数据库密码

    一 导出链接 二 导出的时候一定要勾选导出密码 三 导出文件用notepad 打开 四 打开网址 将如下代码复制进去 打开这个网址 https tool lu coderunner 将如下PHP代码复制进去 span class token
  • 看《狂飙》读人生,致敬2023!

    作为2023年的第一篇博文 xff0c 我不想写代码 xff0c 我想谈谈最近看的 狂飙 xff0c 总结了十条哲理 xff0c 共勉 希望我们的2023 xff0c 未来的人生会更加出彩 01 你以为很好的关系 xff0c 其实也就那么回
  • MySQL生成排序序号RN

    有时因为业务的需求 我们需要在查询出的数据中加上排序序号 例 span class token keyword SQL span span class token keyword select span a span class token
  • MySQL实现row_number排序功能(不用函数)

    MySQL ROW NUMBER 函数为结果集中的每一行生成序列号 MySQL ROW NUMBER 从8 0版开始引入了功能 在使用8 0版之前的数据库时 往往也会用到排序逻辑 那我们如何在不使用ROW NUMBER 函数的情况下来实现排
  • 一文读懂【数据埋点】

    数据埋点是数据采集领域 xff08 尤其是用户行为数据采集领域 xff09 的术语 xff0c 指的是针对特定用户行为或事件进行捕获 处理和发送的相关技术及其实施过程 比如用户某个icon点击次数 观看某个视频的时长等等 数据分析是我们获得
  • Hive几个常用数学函数

    span class token number 1 span span class token punctuation span span class token comment round 四舍五入 span span class tok
  • ubuntu解决中文乱码

    1 查看当前系统使用的字符编码 locale LANG 61 en US LANGUAGE 61 en US LC CTYPE 61 34 en US 34 LC NUMERIC 61 34 en US 34 LC TIME 61 34 e
  • Python 中使用 Azure Blob 存储

    本文介绍如何使用适用于 Python 的 Azure 存储客户端库来上传 blob 你可以上传 blob xff0c 打开 blob 流并写入流 xff0c 或者上传带有索引标记的 blob Azure 存储中的 Blob 已组织成容器 必
  • 视频加速播放插件-Global Speed

    有时候我们觉得看视频的过程中视频播放的太慢了 xff0c 希望能够加快一点播放的速度 xff0c 谷歌浏览器里面有很多有意思的插件 例如Global Speed就可以控制视频播放的速度 1 打开谷歌浏览器 xff0c 输出商店扩展应用地址
  • 激光SLAM之图优化理论

    1 常用的两种优化方法介绍 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基