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 ...
随机推荐
- hdu4740 不错的简单搜索
题意: 给你一个n*n的图,给你驴和老虎的初始坐标和方向,已知他们的速度相同,他们走动的时候都是走直线,如果不能走,驴往右拐,老虎往左拐,如果拐了一次还走不了就原地不动,问他们的最早相遇位置 ...
- Linux中的DHCP服务
目录 DHCP DHCP的报文类型 DHCP的部署 DHCP中继(DHCP代理) DHCP DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局 ...
- hdu4912 LCA+贪心
题意: 给你一棵树和m条边,问你在这些边里面最多能够挑出多少条边,使得这些边之间不能相互交叉. 思路: lca+贪心,首先对于给的每个条边,我们用lca求出他们的公共节点,然后在 ...
- SQL注入注释符(#、-- 、/**/)使用条件及其他注释方式的探索
以MySQL为例,首先我们知道mysql注释符有#.-- (后面有空格)./**/三种,在SQL注入中经常用到,但是不一定都适用.笔者在sqlilabs通关过程中就遇到不同场景用的注释符不同,这让我很 ...
- 将大量ASCII码值转换成字符函数CHR()的小技巧
一.在学习命令执行漏洞的过程中,遇到以下情况: 当服务器上传不了马或者马被过滤的时候,我们可以迂回一下,通过执行写马命令到服务器,在服务器里面写马,该命令是通过ascii编码过的命令,防止被过滤. 1 ...
- 【小技巧】Eclipse 中创建Maven项目后没有WEB-INF文件夹以及web.xml文件
懒得截图了,一张图配下面步骤搞定. 1.右键项目,选择propertities后选择图中①(被遮住了): 2.先不②勾选去掉,点击Apply:然后在把②处勾选上.此时④位置会出现东东,点击蓝色超链接. ...
- window下批量删除指定后缀文件
例子: 批量删除当前路径下后缀为 .jpg和 .json del /a /f /s /q "*.jpg" "*.json" *为通配符/a /f 是强制删除所有 ...
- [时间模块、random模块]
[时间模块.random模块] time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏 ...
- [bug] idea 导入多个 maven 项目
参考 https://www.cnblogs.com/qinxu/p/9649267.html
- [OS] 汇编语言
操作系统 每个进程拥有一片连续的内存空间(地址空间),空间中的每个字节都可以用一个32位无符号整数定位,每个字节的位置称为地址 CPU 32位:能够处理的数据最大为32bit,地址空间2^32< ...