【SLAM14讲】02 视觉SLAM基本架构

news2024/9/20 14:29:27

一、传感器

1.1 安装位置分类

根据安装位置分为两类:

携带于机器人本体 上的传感器,比如激光传感器、相机、轮式编码器、惯性测量单元(Inertial Measurement Unit, IMU)等等,它们测到的通常都是一些间接的物理量而不是直接的位置数据。例如, 轮式编码器会测到轮子转动的角度、IMU 测量运动的角速度和加速度,相机和激光则读取 外部环境的某种观测数据。我们只能通过一些间接的手段,从这些数据推算自己的位置。虽然这听上去是一种迂回战术,但更明显的好处是,它没有对环境提出任何要求,使得这种定位方案可适用于未知环境。

1.2 相机

它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流。普通的摄像头能以每 秒钟 30 张图片的速度采集图像,高速相机则更快一些。按照相机的工作方式,我们把相机分为单目(Monocular)、双目(Stereo)和深度相机(RGB-D)三个大类。

直观看来,单目相机只有一个摄像头,双目有两个,而 RGB-D 原理较复杂,除了能够采集到彩色图片之外,还能读出每个像素离相机的距离。 

二、视觉SLAM框架

整个视觉 SLAM 流程分为以下几步:

1. 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。

2. 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动, 以及局部地图的样子。VO 又称为前端(Front End)。

3. 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后, 又称为后端(Back End)。

4. 回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。

5. 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

如果把工作环境限定在静态、刚体,光照变化不明显、没有人为干扰的场景,那么,这个SLAM 系统是相当成熟的了。

2.1 视觉里程计

视觉里程计关心相邻图像之间的相机运动(只计算相邻时刻的运动,而和再往前的过去的信息没有关联,VO 就像一种只有很短时间记忆的物种一样),最简单的情况当然是两张图像之间的运动关系。例如,当我们看到图 2-8 时,会自然地反应出右图应该是左图向左旋转一定角度的结果。 

为了定量地估计相机运动,必须在了解相机与空间点的几何关系之后进行。 VO 能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。 

现在,假定我们已有了一个视觉里程计,估计了两张图像间的相机运动。那么,只要 把相邻时刻的运动“串”起来,就构成了机器人的运动轨迹,从而解决了定位问题。另一 方面,我们根据每个时刻的相机位置,计算出各像素对应的空间点的位置,就得到了地图。 这么说来,有了 VO,是不是就解决了 SLAM 问题呢?

然而,仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移(Accumulating Drift)。这是由于视觉里程计(在最简单的情况下)只估计两个图像间运动造成的。我们知道,每次估计都带有一定的误差,而由于里程计的工作方式,先前时刻的误差将会传递到下一时刻, 导致经过一段时间之后,估计的轨迹将不再准确。比方说,机器人先向左转 90 度,再向右转了90 度。由于误差,我们把第一个 90 度估计成了 89 度。那我们就会尴尬地发现,向 右转之后机器人的估计位置并没有回到原点。更糟糕的是,即使之后的估计再准确,与真实值相比,都会带上这-1 度的误差。

 这也就是所谓的漂移(Drift)。它将导致我们无法建立一致的地图。你会发现原本直的走廊变成了斜的,而原本 90 度的直角变成了歪的——这实在是一件很难令人忍受的事情! 为了解决漂移问题,我们还需要两种技术:后端优化和回环检测。回环检测负责把“机器 人回到原始位置”的事情检测出来,而后端优化则根据该信息,校正整个轨迹的形状。

2.2 后端优化

后端优化主要指处理 SLAM 过程中噪声的问题。虽然我们很希望所有的数据都是准确的,然而现实中,再精确的传感器也带有一定的噪声。便宜的传感器测量误差较大,昂贵的则较小,有的传感器还会受磁场、温度的影响。所以,除了解决“如何从图像估计出相机运动”之外,我们还要关心这个估计带有多大的噪声,这些噪声是如何从上一时刻传递到下一时刻的、而我们又对当前的估计有多大的自信。后端优化要考虑的问题, 就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori,MAP)。这里的状态既包括机器人自身的轨迹,也包含地图

  • 在 SLAM 框架中,前端给后端提供待优化的数据,以及这些数据的初始值。后端负责整体的优化过程,它往往面对的只有数据,不必关心这些数据到底来自什么传感器。

  • 在视觉 SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。

 为了解决 SLAM,我们需要状态估计理论,把定位和建图的不确定性表达出来,然后采用滤波器或非线性优化,去估计状态的均值和不确定性(方差)。

2.3 回环检测

回环检测,又称闭环检测(Loop Closure Detection),主要解决位置估计随时间漂移的问题。假设实际情况下,机器人经过一段时间运动后回到了原点,但是由于漂移,它的位置估计值却没有回到原点。怎么办呢?我们想,如果有某种手段,让机器人知道“回到了原点”这件事,或者把“原点”识别出来,我们再把位置估计值“拉”过 去,就可以消除漂移了。这就是所谓的回环检测。

为了实现回环检测,我们需要让机器人具有识别曾到达过的场景的能力。我们可以判断图像间的相似性,来完成回环检测。如果回环检测成功,可以显著地减小累积误差。由于图像的信息非常丰富,使得正确检测回环的难度也降低了不少。

视觉回环检测,实质上是一种计算图像数据相似性的算法

在检测到回环之后,我们会把“A 与 B 是同一个点”这样的信息告诉后端优化算法。 然后,后端根据这些新的信息,把轨迹和地图调整到符合回环检测结果的样子。这样,如果我们有充分而且正确的回环检测,就可以消除累积误差,得到全局一致的轨迹和地图。

2.4 建图

建图(Mapping)是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视 SLAM 的应用而定。

地图的形式随 SLAM 的应用场合而定。大体上讲,它们可以分为度量地图与拓扑地图两种。

度量地图强调精确地表示地图中物体的位置关系,通常我们用稀疏(Sparse)与稠密 (Dense)对它们进行分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。例如,我们选择一部分具有代表意义的东西,称之为路标(Landmark),那么一张稀疏地图 就是由路标组成的地图,而不是路标的部分就可以忽略掉。相对的,稠密地图着重于建模所有看到的东西。对于定位来说,稀疏路标地图就足够了。而用于导航时,我们往往需要稠密的地图(否则撞上两个路标之间的墙怎么办?)。稠密地图通常按照某种分辨率,由许多个小块组成。二维度量地图是许多个小格子(Grid),三维则是许多小方块(Voxel)。一 般地,一个小块含有占据、空闲、未知三种状态,以表达该格内是否有物体。当我们查询 某个空间位置时,地图能够给出该位置是否可以通过的信息。这样的地图可以用于各种导航算法,如 A*,D*等等。但是我们也看到,这种地图需要存储每一个格点的状态,耗费大量的存储空间,而且多数情况下地图的许多细节部分是无用的。另一方面,大规模度量地图有时会出现一致性问题。很小的一点转向误差,可能会导致两间屋子的墙出现重叠,使得地图失效。

相比于度量地图的精确性,拓扑地图则更强调地图元素之间的关系。拓扑地图是一个 图(Graph),由节点和边组成,只考虑节点间的连通性,例如 A,B 点是连通的,而不考虑如何从 A 点到达 B 点的过程。它放松了地图对精确位置的需要,去掉地图的细节问题, 是一种更为紧凑的表达方式。然而,拓扑地图不擅长表达具有复杂结构的地图。如何对地 图进行分割形成结点与边,又如何使用拓扑地图进行导航与路径规划,仍是有待研究的问题。

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

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

相关文章

一键创建日期命名的txt文件(方便日报)

背景 刚工作,免不了写日报,写日计划的时候。为了方便,写了一个bat文件直接点击即可创建今天时间命名的txt文件 代码 win10我的笔记本 echo set tmp%date:~3,4%%date:~8,2%%date:~11,2% type nul > %tmp%.txtwindows 下创建文件就是 t…

排序算法性能分析

目录 实现插入排序、冒泡排序、选择排序、合并排序、快速排序算法(从小到大) ①插入排序 ②冒泡排序 ③选择排序 ⑥快速排序 五种排序 现在有10亿的数据(每个数据四个字节),请快速挑选出最大的十个数&#xff0…

红黑树与234树

红黑树 参考:宇文新粥:红黑树红黑树可视化 234树 这个树有三种节点,分别包含1/2/3个元素,下方可以有2/3/4个子节点理解234树的插入 红黑树与234树之间的关系 红黑树有几个特性,但如果从234树的角度理解红黑树&…

在微软十年了!

时光飞逝,光阴如梭。 2013 年的 7 月 8 号,我在隔壁的交大软院毕业后,正式入职紫竹微软。 至今,已是整整 10 年了。 记得当时的闵行回市区的交通还不是那么堵,坐 5点半的班车下班,S4中环一路走,…

【C++ OJ练习】4.字符串中的第一个唯一字符

1.题目链接 力扣 2.解题思路 利用计数排序的思想 映射进行计数 最后计数为1的那个字符就是唯一字符 从前往后遍历 可以得到 第一个唯一字符 3.代码 class Solution { public:int firstUniqChar(string s) {//使用映射的方式统计次数 计数排序思想int count[26] { 0 };fo…

机器视觉硬件选型-工业光源-环形光源

视觉人机器视觉-硬件发货前硬件确认效果 工业光源根据灯的几何形状可分为条形光源,分区光源,环形光源、圆顶(积分)光源、平面光源,同轴光源,方形光源,线扫光源,点光源,线光源等等。 …

在上海滩,听懂5G时代的浪奔浪流

几天前的“湾区升明月”上,赵雅芝与吕良伟合唱了一首《上海滩》。“浪奔,浪流”的歌词一出,无数记忆涌上了一代人的心头。 上海这座城市,始终代表着进取、创新、引领,代表着面向世界的中国形象。黄浦江的浪花&#xff…

【尚医通】vue3+ts前端项目开发笔记 2 —— 创建项目、封装网络请求、集成elment-plus 、重置样式、准备状态管理/路由 等开发前准备

尚医通开发记录(Vue3TypeScriptPiniaAxios) 一、接口地址 服务器地址:http://syt.atguigu.cn 医院接口:http://139.198.34.216:8201/swagger-ui.html 公共数据接口:http://139.198.34.216:8202/swagger-ui.html 会员接口:http://139.198.34…

掌握文件转换的技巧:在线工具帮你轻松转换为PDF格式

许多文件都有自己的原始格式,然而这些格式都可以进行修改。遇到无法打开或信息丢失的情况时,可以进行格式转换,其中效果最好的就是PDF格式,无论在哪个平台上查看文档,都有自己的格式,能够在所有平台上查看的…

中国首个铝基轻量化平台?纯电中型 SUV 奇瑞eQ7将于7月12日发布

奇瑞新能源将于7月12日发布首台量产车奇瑞eQ7,并公布中国首个铝基轻量化平台。 车型参数:奇瑞 eQ7是一款定位纯电动中型SUV,采用后置后驱和油冷扁线三合一电机技术。其以全铝车身和全铝平台为基础,整备质量为185kg。车身尺寸为467…

表中签到ID格式是以逗号分隔,需将ID拆开并分成多条数据

原有数据格式: 拆分后数据格式: 拆分SQL: select bc.资源名称,bc.资源ID,bc.签到时间,bc.签到人,bb.column_value 签到附件ID from report_fir.V_kw_checksign_info bc,table(hbrmw6.split_string(bc.签到附件ID,,)) bb; HBRMW6.split_string函数创…

mysql数据库内存占用高原因(数据库内存占用高)

1、查看数据库分配内存大小 ( mysql内存计算器,具体地址为http://www.mysqlcalculator.com/ ) select VARIABLE_NAME,VARIABLE_VALUE/1024/1024 MB from information_schema.GLOBAL_VARIABLES WHERE VARIABLE_NAME in (key_buffer_size,query_cache_size,tmp_tabl…

基本数据与封装对象转换(Java)

文章目录 1. 基本数据与对象封装转换1.1 8种基本数据类型:1.2 基本数据类型 -- > 封装对象:1.3 封装对象 -- > 基本数据类型:1.4 借助String类型作为中间桥梁 2. 自动转换规则 1. 基本数据与对象封装转换 1.1 8种基本数据类型: boolean(true/false),byte(1 …

时间序列预测 | Matlab粒子群算法(PSO)优化极限梯度提升树XGBoost时间序列预测,PSO-XGBoost时间序列预测模型

文章目录 效果一览文章概述部分源码参考资料效果一览 文章概述 时间序列预测 | Matlab基粒子群算法(PSO)优化极限梯度提升树XGBoost时间序列预测,PSO-XGBoost时间序列预测模型 评价指标包括:MAE、RMSE和R2等,代码质量极高,方便学习和替换数据。要求2018版本及以上。 部分源码…

【雕爷学编程】Arduino动手做(153)---2.4寸TFT液晶触摸屏模块4

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

基于matlab使用激光雷达检测地平面和障碍物(附源码)

一、前言 此示例演示如何通过分割地平面并查找附近的障碍物来处理来自安装在车辆上的传感器的 3-D 激光雷达数据。这可以促进车辆导航的可驾驶路径规划。该示例还演示如何可视化流式激光雷达数据。 二、创建 Velodyne 文件读取器 本例中使用的激光雷达数据是使用安装在车辆上…

[工业互联-17]:常见EtherCAT主站与实现方法

目录 第1章 EtherCAT入门 1.1 简介 1.2 EtherCAT通信架构 第2章 EtherCAT主站方案 2.1 方案概述 2.2 主站配置步骤 2.3 EtherCAT主站软件 第3章 Windows操作系统支持EtherCAT的基本步骤 第4章 常见主站软件介绍:TwinCAT 4.1 简介 4.2 软件架构 4.3 应…

【计算机网络】第三章 数据链路层(概述 封装成桢 差错检错)

文章目录 第三章 数据链路层3.1 数据链路层概述3.2 封装成帧3.3 差错检测3.3.1 奇偶校验3.3.2 循环冗余校验 第三章 数据链路层 3.1 数据链路层概述 数据链路层是计算机网络体系结构中的一层,位于物理层和网络层之间。它负责在相邻节点之间传输数据,并提…

hugging face参数高效微调peft源码解析

大模型参数高效微调(PEFT) - 知乎 让天下没有难Tuning的大模型-PEFT技术简介 - 知乎 大模型参数高效微调技术原理综述(三)-P-Tuning、P-Tuning v2 - 知乎 你似乎来到了没有知识存在的荒原 - 知乎 大模型参数高效微调技术原理综述(六&a…

由LM386构成的3W简易OCL功放电路/由TDA2009构成的1W高保真BTL功率放大器

由LM386构成的3W简易OCL功放电路 该电路是使用低功耗集成功率放大器 LM386 构成的 OCL 功放电路,电路结构简单,容易调试,非常适于自制。 一、电路工作原理 电路原理如图 31 所示。 图中IC1和IC2是两片集成功放LM386,接成OCL电路…