解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 13 讲 建图

2024-06-05 17:32

本文主要是介绍解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 13 讲 建图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这一讲拖到现在才开始写,其中一个主要的原因是建图部分的内容,一方面比较难,另一方面它在实际的工程中应用较少,我对这方面的了解不是特别深入。

工程中很少对视觉构建的地图进行复用,其原因主要有(来自我自己的经验):

  • ① 地图的精度较低,多数难以达到导航和定位的要求;
  • ② 视觉对光线比较敏感,构建的地图难以较好复用,有时早上建图,下午定位成功率就很低;
  • ③ 地图体积大,内存占用率高。视觉slam会维护一个比较复杂的地图数据结构,而这些数据如果不加处理,实际上是很占用资源的,对比cartographor这种激光slam的地图,同样场景下只有几十兆大小,而视觉特征点地图则达到几百兆。

而目前视觉建图中应用比较多的是稠密或者半稠密建图,因为至少还可以构建我们人类可以看的场景,于是在一些增强现实的应用场景下,它获得了一定的应用。而稀疏的特征点地图多数情况下,几乎都是都看不出啥。

这一讲书中大部分的内容都是比较完整的,而且理解起来也不难,但是如果要扩宽这些内容到实际的应用中,还是很难的。

概述

在slam中我们对地图有如下一些需求:

  • ① 定位:目前关于视觉的定位主要是通过提前构建场景的三维地图,多数情况是基于特征点的三维地图,然后通过各种的搜索方法进行重定位,可以使用词袋的方式进行粗定位,然后进行局部匹配,进而求解PnP,当然方法不仅限于此,我目前正在做一种全局描述子搜索的定位方法,效果超过了词袋的方式。
  • ② 导航:导航是指机器人能够在地图中进行路径规划,在任意两个地图点之间寻找路径,然后控制自己运动到目标点的过程。这个过程需要一个可靠的环境建图,常采用稠密地图。
  • ③ 避障:是机器人在运动过程中的一个动态调整轨迹的问题,它需要对动态障碍物有一个可靠的检测。
  • ④ 重建:它是指对环境进行三维重建,这种建图偏向于给用户观看,所以它需要建立美观、舒服的场景地图,目前几乎都是采用稠密地图。在视觉slam方面场景重建的应用还是比较多的。
  • ⑤ 交互: 这是一种更偏向于和用户进行互动的应用,它不但需要构建较好的场景地图,多数情况向下还要有语义信息,需要知道场景中有哪些东西,在哪些地方,这种上层的应用目前多数还处在研究阶段,但是这将是未来一个非常好的应用。

单目稠密重建

极线搜索与块匹配
单目稠密重建部分的内容,作者提供给了一个例子通过多张单目图像重建一个稠密的地图,这个例子有一些地方还是值得注意的。

首先,这里的前后帧匹配并不是像第7章中的那样,第七章中使用的是暴力搜索匹配,对前后两张图像上提取的特征点进行描述子匹配。但是在本章中要进行的是稠密的重建,是针对的全像素重建。

例如,对于一张1024*768尺寸的图像,在进行前后帧像素值匹配时,如果已知第一帧中的某一个像素值,然后去第二帧中搜索最近的一个,这显然会耗费巨大的运算资源,而且错误的匹配会非常多,所以加速搜索和匹配是一个很重要的步骤。作者在书中采用的极线搜索的方式,根据几何关系,第一帧观测到的空间点,一定会投影到第二帧的极线上,那么只要在极线附近搜索,势必会减少很多运算量,而且正确的概率也将会更大。要想知道第二帧的极线位置,就必须要知道两帧之间的变换矩阵,所以就引出了第一个需要注意的地方,那就是这里的稠密重建方法,必须要 事先给定两帧之间的变换矩阵。多数情况下这个变换矩阵是由前端提供的。

另外,单个像素没有区分性,换句话来说就是鲁棒性较差,但是一个小的区域之内的匹配鲁棒性势必会更好一些,所以书中采用了 块匹配 的方式。

然后就是通过三角化还原出空间点的位置,由于测量会出现误差,所以提出使用深度滤波器进行多次测量,获得一个收敛的结果。高翔在书中提到使用深度滤波器,也就是高斯分布相乘的方式进行滤波。

高斯分布的深度滤波器
为什么就可以直接将两个高斯分布相乘进行滤波呢?书中并未提及原因,实际上我觉得这是一个非常重要的点,至少学会了这一点,对于简单的数据融合,我们没有必要就非要用卡尔曼滤波。

在这里插入图片描述
在《机器人学中的状态估计》2.2.6 高斯概率密度函数的归一化积中有如上这张图,最左和最右的两个正态分布是两次测量,而中间那个就是两次测量融合之后的效果,是不是有那么点像多次测量求平均值的味道,而这个归一化积的过程就是两次测量的分布求积。至于为何多次测量之后会有更大的可能获得一个最好的结果呢?这里我只是贴出了结论,至于更细节和具体的原因,就交由大家自己去学习了!

主要是我尝试解释这个原因,但是发现可能是自己的理解还不够,导致解释之后更乱!

关于深度滤波器,推荐大家看一下这篇博客:《深度滤波器详细解读》

另外的内容大家还是看《十四讲》吧!

============ TODO:补充建图相关内容 ===========

这一讲本来在写的时候,感觉有好多东西写,但是当我开始查看相关论文以及一些博客之后,发现啥也不会写了,书中省略了的一些内容恰恰是一些很难却很有用的内容,所以我建议大家还是直接阅读SVO、DSO或者LSD的论文和代码,不然仅凭书中的介绍,你可能很难理解这其中的技巧和原理。(感觉这一篇写的有点水,没有什么特别干货的东西,待我看些论文,再研究研究,继续补上一些相关内容)

这篇关于解读《视觉SLAM十四讲》,带你一步一步入门视觉SLAM—— 第 13 讲 建图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1033708

相关文章

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Java List 使用举例(从入门到精通)

《JavaList使用举例(从入门到精通)》本文系统讲解JavaList,涵盖基础概念、核心特性、常用实现(如ArrayList、LinkedList)及性能对比,介绍创建、操作、遍历方法,结合实... 目录一、List 基础概念1.1 什么是 List?1.2 List 的核心特性1.3 List 家族成

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

史上最全MybatisPlus从入门到精通

《史上最全MybatisPlus从入门到精通》MyBatis-Plus是MyBatis增强工具,简化开发并提升效率,支持自动映射表名/字段与实体类,提供条件构造器、多种查询方式(等值/范围/模糊/分页... 目录1.简介2.基础篇2.1.通用mapper接口操作2.2.通用service接口操作3.进阶篇3