阅读高翔的RGBD-SLAM博文笔记
高翔的RGBD-SLAM笔记
RGBD相机的特点:
使用RGBD相机中的深度这一维信息,以及相机的针孔成像模型,相机的内参,可以将二维点恢复成三维()
前端VO:
二维的RGB图像则用于视觉里程计Visual Odometry,以连续两帧为例:
对两帧图像做特征点匹配(先分别提取特征,然后计算描述子,根据匹配算法来计算点对之间的匹配距离)
有了匹配点对,可以用ICP 或是PnP 等方法求解相机的变换矩阵T (由旋转矩阵Rotation和平移矩阵Translation组成),也就是相机的位姿估计
一个简单的两帧VO形成,存在问题:
当帧数增多时,如何取舍?
误差会随着时间累积,如何通过回环检测来减少误差累积带来的影响
得到姿态后,可以将其都转到同一坐标系下,且都转为3D点云,拼接,由此可以得到这两帧对应在某个世界坐标系下的地图 (也就是点云拼接)
- 需要注意!!!这里是RGBD SLAM,也就是深度信息是已知的,相当于估计出相机自身的位姿之后,就可以将图像里的观测数据转换成估计的路标点(或是估计的环境内容 属于mapping的内容)
后端优化
引入姿态图,G = {V, E}
最简单情况下,节点V代表相机的各个时刻的姿态,而边指的是两个节点之间的变换
- 可以理解成,节点 $v_1 = T_1 = T_{world->frame1} $, 而边 \(e_{12} = T_{12} = T_{frame1->frame2}\)
在VO中,姿态图是链状结构

但是如果是存在回环,则由于存在误差,使得所有的边给出的数据并不一致【比如 T13 * X1 不等于 T23 * X2 】

由此,可以优化一个不一致性误差:
\[
\min E = \sum_{i,j} ||x_i^*-T_{i,j} x_j^*||^2_2
\]
这里的 \(x_i^*\) 表示 \(x_i\) 的估计值,也就是随机或指定一个初始值 然后通过优化算法不断迭代更新的
关键帧的提取
把每一帧都拼到地图里面比较耗费时间与空间,因为帧间距离很近(时间间隔短)
所以只把关键帧拼到地图里。具体来说,对于新来的帧,将其和当前所有关键帧的最后一帧匹配,估计一下从关键帧到新帧的变换矩阵:
如果变换较小 则认为离前一个关键帧很近,丢弃;
如果变换太大,可能是计算错误;
如果匹配点较少则说明该帧图像质量不高;
剩下的情况是,特征匹配成功,运动估计正确,同时又离上一个关键帧有一定距离,则认为是新的关键帧
最后再将新的关键帧加入后端优化的过程:检测回环、加入姿态图优化、拼接点云地图
回环的检测
回环的本质是识别曾经到过的地方。
最简单的回环检测策略,就是把新来的关键帧与之前所有的关键帧进行比较,不过这样会导致越往后,需要比较的帧越多。所以,稍微快速一点的方法是在过去的帧里随机挑选一些,与之进行比较。更进一步的,也可以用图像处理/模式识别的方法计算图像间的相似性,对相似的图像进行检测。
阅读高翔的RGBD-SLAM博文笔记的更多相关文章
- 视觉SLAM实战(一):RGB-D SLAM V2
写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我 ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三
最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...
- ROS_RGB-D SLAM学习笔记--室内环境测试
ROS_RGB-D SLAM学习笔记 RTAB-Map's ros-pkg. RTAB-Map is a RGB-D SLAM approach with real-time constraints. ...
- 一起做RGB-D SLAM(7) (完结篇)
第七讲 添加回环检测 2016.11 更新 把原文的SIFT替换成了ORB,这样你可以在没有nonfree模块下使用本程序了. 回环检测的阈值作出了相应的调整. 请以现在的github上源码为准. 简 ...
- 三维重建7:Visual SLAM算法笔记
VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引
从发表第一篇文章到最后一篇文章,时间间隔有整整一个月,虽只有5篇文章,但每一篇文章都是我吸收<LEARNING HARD C#学习笔记>这本书的内容要点及网上各位大牛们的经验,没有半点废话 ...
- 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二
今天继续分享我的阅读<LEARNING HARD C#学习笔记>知识点总结与摘要二,仍然是基础知识,但可温故而知新. 七.面向对象 三大基本特性: 封装:把客观事物封装成类,并隐藏类的内部 ...
- (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)
/*************************************************************************************************** ...
- 一起做RGB-D SLAM 第二季 (一)
小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...
随机推荐
- SpringDataJpa-多表操作
多表之间的关系和操作多表的操作步骤 表关系 一对多 一对多 >> 一:主表 多:从表 多对多 >> 中间表中最少应该由两个字段组成,这两个字段作为 ...
- CSS百分比padding实现比例固定图片自适应布局
一.CSS百分比padding都是相对宽度计算的 在默认的水平文档流方向下,CSS margin和padding属性的垂直方向的百分比值都是相对于宽度计算的,这个和top, bottom等属性的百分比 ...
- BASIC合集
握手包 给你握手包,flag是Flag_is_here这个AP的密码,自己看着办吧. 提交格式:flag{WIFI密码} 破解wifi密码 丢到kali,用aircrack-ng kali有一个包含常 ...
- 数据驱动表格| 根据json数据,自动生成合并式table
1.数据驱动表格 2.数据驱动表格(2)
- 冒泡排序法(C语言)
冒泡排序(Bubble Sort)一种计算机科学领域的较简单的排序算法.它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小.首字母从从Z到A)错误就把他们交换过来.走访元素的工 ...
- 数组去重--ES6方法
数组去重方法1:用es6的set和...扩展运算符 let arr = [1,2,3,4,4,5,2]; console.log([...new Set(arr)]) // [1, 2, 3, 4, ...
- [[: not found,Ubuntu修改默认sh为bash
写好的shell sh执行脚本报错[[: not found,改shell多麻烦,索性直接把电脑默认的dash改成使用bash 1.查看目前使用 Ubuntu版本默认sh都是使用的dash 执行 ls ...
- asp.net core系列 63 领域模型架构 eShopOnWeb项目分析 上
一.概述 本篇继续探讨web应用架构,讲基于DDD风格下最初的领域模型架构,不同于DDD风格下CQRS架构,二者架构主要区别是领域层的变化. 架构的演变是从领域模型到CQRS, 一开始DDD是用领域 ...
- 解锁云原生 AI 技能 - 开发你的机器学习工作流
按照上篇文章<解锁云原生 AI 技能 | 在 Kubernetes 上构建机器学习系统>搭建了一套 Kubeflow Pipelines 之后,我们一起小试牛刀,用一个真实的案例,学习如何 ...
- Flink,Storm,SparkStreaming性能对比
Yahoo 的 Storm 团队曾发表了一篇博客文章 ,并在其中展示了 Storm.Flink 和 Spark Streaming 的性能测试结果.该测试对于业界而言极 具价值,因为它是流处理领域的第 ...