高翔的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博文笔记的更多相关文章

  1. 视觉SLAM实战(一):RGB-D SLAM V2

    写在前面 首先打个广告.SLAM研究者交流QQ群:254787961.欢迎各路大神和小白前来交流. 看了前面三篇博文之后,是不是有同学要问:博主你扯了那么多有用没用的东西,能不能再给力一点,拿出一个我 ...

  2. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

    最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...

  3. 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. ...

  4. 一起做RGB-D SLAM(7) (完结篇)

    第七讲 添加回环检测 2016.11 更新 把原文的SIFT替换成了ORB,这样你可以在没有nonfree模块下使用本程序了. 回环检测的阈值作出了相应的调整. 请以现在的github上源码为准. 简 ...

  5. 三维重建7:Visual SLAM算法笔记

    VSLAM研究了几十年,新的东西不是很多,三维重建的VSLAM方法可以用一篇文章总结一下. 此文是一个好的视觉SLAM综述,对视觉SLAM总结比较全面,是SLAM那本书的很好的补充.介绍了基于滤波器的 ...

  6. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要系列文章索引

    从发表第一篇文章到最后一篇文章,时间间隔有整整一个月,虽只有5篇文章,但每一篇文章都是我吸收<LEARNING HARD C#学习笔记>这本书的内容要点及网上各位大牛们的经验,没有半点废话 ...

  7. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要二

    今天继续分享我的阅读<LEARNING HARD C#学习笔记>知识点总结与摘要二,仍然是基础知识,但可温故而知新. 七.面向对象 三大基本特性: 封装:把客观事物封装成类,并隐藏类的内部 ...

  8. (1)RGB-D SLAM系列- 工具篇(硬件+关键技术)

    /*************************************************************************************************** ...

  9. 一起做RGB-D SLAM 第二季 (一)

    小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...

随机推荐

  1. 第15讲:嵌入式SQL语句(动态SQL)

    一.动态SQL概述 1. 静态SQL vs 动态SQL ①动态SQL是相对静态SQL而言的 ②静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量传递给SQL语句即可 specN ...

  2. ShiroUtil 对密码进行加密

    ShiroUtil 对密码进行加密 package com.mozq.sb.shiro02.config; import org.apache.shiro.authc.SimpleAuthentica ...

  3. 作业一(python初认识)

    一.python发展历史 1989,为了度过圣诞假期,Guido开始编写Python语言编译器.Python这个名字来自Guido的喜爱的电视连续剧<蒙蒂蟒蛇的飞行马戏团>.他希望新的语言 ...

  4. ES6 Set求两个数组的并集、交集、差集;以及对数组去重

    并集: const arr1 = [1, 2, 3, 2, 5]; const arr2 = [1, 4, 6, 8, 3]; // 将两个数组合并 const concatArr = [...arr ...

  5. <Math> 258 43

    258. Add Digits class Solution { public int addDigits(int num) { if(num == 0) return 0; if(num % 9 = ...

  6. C# 位运算基本大全

    1.原码 反码 补码 只用补码进行计算,且没有减法.只有用补码进行加法运算,具体原因,详见:http://www.cnblogs.com/zhangziqiu/archive/2011/03/30/C ...

  7. 【Java语言特性学习之三】Java4种对象引用

    为了更灵活的控制对象的生命周期,在JDK1.2之后,引用被划分为(引用的级别和强度由高到低)强引用.软引用.弱引用.虚引用四种类型,每种类型有不同的生命周期,它们不同的地方就在于垃圾回收器对待它们会使 ...

  8. LeetCode 752:打开转盘锁 Open the Lock

    题目: 你有一个带有四个圆形拨轮的转盘锁.每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' .每个拨轮可以自由旋转:例如把 ' ...

  9. 我是如何理解并使用maven的

    前言 一直想写一篇关于Maven的文章,但是不知如何下笔,如果说能使用,会使用Maven的话,一.两个小时足矣,不需要搞懂各种概念.那么给大家来分享下我是如何理解并使用maven的. 什么是Maven ...

  10. JSONObject解析json数据

    首先先看一下我们要解析的json数据是什么样子的: 代码: String url="http://113.57.190.228:8001/Web/Report/GetBigMSKReport ...