RGB-D相机视觉SLAM
RGB-D相机视觉SLAM
Dense Visual SLAM for RGB-D Cameras
开源代码地址: vision.in.tum.de/data/software/dvo
摘要
本文提出了一种用于RGB-D相机的稠密视觉SLAM方法,该方法可以使所有像素上的光度误差和深度误差最小化。与稀疏的、基于特征的方法相比,能够更好地利用图像数据中的可用信息,从而提高姿态精度。提出了一种基于熵的相似性度量方法,用于关键帧选择和环路闭合检测。从所有成功的匹配中,构建了一个使用g2o框架进行优化的图。在公开的基准数据集上对进行了广泛的评估,在低纹理和低结构的场景中表现良好。与几种最先进的方法直接比较,本方法产生的轨迹误差大大降低。代码开源。
主要创新点:
本文的主要贡献有:
•一种快速的帧间配准方法,可优化强度和深度误差,
•基于熵的关键帧选择方法,显著减少了漂移,
•基于相同熵度量验证循环闭包的方法,以及
•将上述所有技术集成到一个通用的图形SLAM解算器中,进一步减少漂移。
本文目标是仅从摄像机的图像流来估计摄像机的运动。在每个时间步t,相机提供RGB-D图像,包括强度图像It和相应的深度贴图Zt。给定两个连续时间步的RGB-D图像,要计算相机的刚体运动g。图2说明了这个想法。
选择了测量近邻搜索,在空间受限的室内环境中操作,而且视觉里程计非常精确。在一个围绕关键帧位置具有预定半径的球体中搜索循环闭合候选者。在粗分辨率下,计算每个候选帧的两个关键帧和相关协方差矩阵之间的相对变换。为了验证候选者,采用与关键帧选择相同的熵比测试。使用中间帧到关键帧的所有成功匹配的平均熵,而不是第一帧到关键帧H(ζk:k+1)的转换熵。这一标准背后的直觉是,中间帧在空间和时间上最接近于关键帧,在此可获得具有最低不确定性的最佳可能注册结果。如果从低分辨率图像获得的参数估计值通过测试,也使用更高分辨率计算改进的估计值。最后,应用相同的熵比检验。如果这个测试也成功了,就在图中插入一个带有相对位姿约束的新边。图3显示,当相机返回到捕捉到第50帧的附近(第420450帧)时,熵比再次增大。此外,图3显示,高熵比与估计中的低误差相符。
使用慕尼黑技术大学提供的RGB-D基准进行评估[10]。基准包含用RGB-D相机捕获的多个真实数据集。每个数据集都伴随着一个由外部运动捕获系统获得的精确的地面真值轨迹。在第一组实验中,评估了组合光度和几何误差最小化的好处。具有不同数量的纹理和结构的RGB-D数据集适合于此目的。图4显示了不同数据集的代表性图像。表一显示了实验结果。前两列指示数据集是否包含结构/纹理(x)或不包含(-)。第三列显示相机到场景的定性距离。最后三列显示了RGBonly、depth only和combined三种不同估计方法的平移漂移(RPE)的均方根误差(RMSE),单位为m/s。与仅深度变量相比,仅RGB的里程计在具有纹理的无结构场景中效果更好,反之亦然。在这些数据集上,组合变量的性能优于这两种方法。但是,在具有结构和纹理的数据集上,组合RGB和深度odometry的性能略低于仅RGB的odometry。尽管如此,它在不同场景类型上显示了更好的泛化。深度项也有助于在由于自动曝光而导致强度突然变化的情况下稳定估计值。
本方法与最新的视觉SLAM方法进行比较,即RGB-D SLAM系统[2]、[31]、多分辨率surfel映射(MRSMap)[11]和KinectFusion的PCL实现(KinFu)[5]。表三总结了结果。第一列包含数据集名称,第二列显示系统创建的关键帧数。以下各列显示了本系统、RGB-D SLAM、MRSMap和KinectFusion的绝对轨迹误差的RMSE。本系统在八个数据集中表现最好,所有系统的结果都是可用的。三个方面与最佳系统的区别其他数据集较小。内部冲突在长而复杂的轨道上,例如fr1/房间、fr1/teddy,比其他系统的改进是显著的。
表二:所有freiburg1数据集的平移漂移(RPE)RMSE(m/s),帧间、帧间和帧间里程计,以及姿势图优化。注意(v)标记没有公共基础的验证数据集,本文使用在线工具评估了这些数据集。与逐帧里程计相比,使用关键帧可将性能提高16%。位姿图优化进一步减小了漂移,平均提高了20%。
表三:与三个最先进的系统相比,本文视觉SLAM系统的绝对轨迹误差(m)的RMSE。第二列显示系统使用的关键帧数。本系统对大多数数据集的性能最好。尤其要注意对具有长而复杂轨迹的数据集(如fr1/房间、fr1/teddy)的改进。
在一台采用英特尔酷睿i7-2600处理器、3.40GHz和16GB内存的PC机上进行了所有实验。视觉里程计和SLAM组件在不同的线程中运行。帧到关键帧的跟踪时间在32ms左右几乎是恒定的,循环闭合检测和优化的时间取决于图中关键帧和边的数量。此地图更新的平均处理时间为135ms。在运动估计的粗到精优化中,本文使用三种不同的图像分辨率,最高可达320×240像素。
RGB-D相机视觉SLAM的更多相关文章
- 视觉SLAM中相机详解
视觉SLAM中,通常是指使用相机来解决定位和建图问题. SLAM中使用的相机往往更加简单,不携带昂贵的镜头,以一定的速率拍摄周围的环境,形成一个连续的视频流. 相机分类: 单目相机:只是用一个摄像头进 ...
- (转) SLAM系统的研究点介绍 与 Kinect视觉SLAM技术介绍
首页 视界智尚 算法技术 每日技术 来打我呀 注册 SLAM系统的研究点介绍 本文主要谈谈SLAM中的各个研究点,为研究生们(应该是博客的多数读者吧)作一个提纲挈领的摘要.然后,我 ...
- 高翔《视觉SLAM十四讲》从理论到实践
目录 第1讲 前言:本书讲什么:如何使用本书: 第2讲 初始SLAM:引子-小萝卜的例子:经典视觉SLAM框架:SLAM问题的数学表述:实践-编程基础: 第3讲 三维空间刚体运动 旋转矩阵:实践-Ei ...
- 视觉SLAM漫淡
视觉SLAM漫谈 1. 前言 开始做SLAM(机器人同时定位与建图)研究已经近一年了.从一年级开始对这个方向产生兴趣,到现在为止,也算是对这个领域有了大致的了解.然而越了解,越觉得这个方向难度很 ...
- 视觉SLAM的数学表达
相机是在某些时刻采集数据的,所以只关心这些时刻的位置和地图. 就把这一段时间的运动变成了李三时刻 t=1,2,...K当中发生的事情. 在这些事可,x表示机器自身的位置. x1,x2,x3,x4... ...
- 视觉SLAM
SLAM:Simultaneous Localization And Mapping.中文:同时定位与地图重建. 它是指搭载特定传感器的主体,在没有实验先验信息的情况下,于运动过程中建立环境的模型,同 ...
- 如何从零开始系统化学习视觉SLAM?
由于显示格式问题,建议阅读原文:如何从零开始系统化学习视觉SLAM? 什么是SLAM? SLAM是 Simultaneous Localization And Mapping的 英文首字母组合,一般翻 ...
- 经典视觉SLAM框架
经典视觉SLAM框架 整个视觉SLAM流程包括以下步骤: 1. 传感器信息读取.在视觉SLAM中主要为相机图像信息的读取和预处理. 2. 视觉里程计(Visual Odometry,VO).视觉里程计 ...
- SLAM学习笔记 - 视觉SLAM方法资源汇总
工具类: ros框架 linux系列教程 vim Eigen Eigen快速入门 Pangolin Pangolin安装与使用 数据集: TUM 数据格式 提供pyt ...
随机推荐
- Vue method与computed的区别
为了说明method与computed的区别,在此我想先来看看computed属性在vue官网中的说法: 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算.在模板中放入太多的逻辑会让模板过重 ...
- 【主从复制】MySQL主从复制的原理
1. 存在几个线程: 主库一个线程,从库两个线程 2.主库生成一个log dump线程,和从库IO线程交互 3.IO线程请求主库binlog,写入到中继日志relay log 4.SQL线程读取中继日 ...
- 缓冲区溢出分析第05课:编写通用的ShellCode
前言 我们这次的实验所要研究的是如何编写通用的ShellCode.可能大家会有疑惑,我们上次所编写的ShellCode已经能够很好地完成任务,哪里不通用了呢?其实这就是因为我们上次所编写的ShellC ...
- 解决Metasploit中shell乱码的问题
我们在kali中用 Metasploit 获取到windows主机的shell后,会出现乱码问题,归根到底,就是windows和linux系统的中文编码不同,所以导致windows系统上的中文在lin ...
- Intel汇编语言程序设计学习-第三章 汇编语言基础-中
3.2 例子:整数相加减 现在来看一个进行整数加减操作的汇编语言小程序.寄存器用于存放中间数据,我们调用一个库函数在屏幕上显示寄存器的内容.下面是程序的源码: TITLE Add and Subtr ...
- 5.IA-32寄存器
寄存器(Register)是CPU内部用来存放数据的一些小型存储区域,它与RAM(Random Access Memory,随机存储器.内存)略有不同.CPU访问(Access)RAM中的数据时要经过 ...
- 分布式ID
需求 全局唯一 高性能 高可用 简单易用 UUID 优点: 唯一 不依赖于任何第三方服务 缺点: 是字符串类型而非数字,不满足数字ID的需求 字符串太长了,DB查询效率受影响 数据库自增ID 如果使用 ...
- C# 通过DataSet 获取SQL 存储过程返回的多个结果集(tables)
测试数据:Northwind 链接地址: https://files.cnblogs.com/files/louiszh/NorthWind.zip 首先创建一个测试存储过程: IF EXISTS ( ...
- JWT 基本使用
JWT 基本使用 在上一节中 session 共享功能使用 redis 进行存储,用户量激增时会导致 redis 崩溃,而 JWT 不依赖服务器,能够避免这个问题. 1.传统 session 1.1. ...
- Jenkins 基础篇 - 基础设置
站点设置 刚搭建好 Jenkins 环境,你还需要做一些简单设置,让我们的 Jenkins 看起来是这么一回事,特别是你要用于生产环境的时候.首先就是域名配置,如果你为 Jenkins 服务分配了一个 ...