高翔的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. 初学JavaScript正则表达式(十三)

    字符串方法 search(reg) search()用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串 方法返回第一个匹配结果index,查找不到返回-1 search()不执行全局匹 ...

  2. Redis学习笔记(八、缓存设计)

    目录: 缓存更新策略 缓存粒度 缓存穿透 缓存雪崩 缓存击穿 缓存更新策略: 1.内存溢出淘汰策略 当redis的使用内存超过maxmemory时会触发相应的策略,具体策略由maxmemory-pol ...

  3. DRF视图功能介绍(2)

    本帖最后由 杰哥,我就服你 于 2018-12-20 13:22 编辑 Django rest framework(DRF) D:是一个用于构建Web API强大又灵活的框架,基于Django框架二次 ...

  4. jQuery核心(一)

    API文档:http://jquery.cuishifeng.cn/ 一. jQuery.extend(object) 用于扩展jQuery对象本身.用来在jQuery命名空间上增加新函数. jQue ...

  5. 20191031 牛客网CSP-S Round2019-2

    花了 \(50min\) 打了 \(130\) 分的暴力... T2想到正解之后开始 VP CF了...

  6. CF1204D Kirk and a Binary String

    题目链接 problem 给出一个长度为\(n(n\le 10^5)\)的只包含01的字符串.把尽可能多的1变为0,使得对于所有的\(l \in [1,n],r\in [l,n]\),区间\([l,r ...

  7. Mac 电脑无法登陆 账号了

    版本:10.14.2 每次输入用户名和密码都没有反应: 进入 命令行执行: defaults delete com.apple.appstore.commerce Storefront 然后重启机器, ...

  8. angular修改端口号port

    报错:Port 4200 is already in use. Use '--port' to specify a different port. 因为4200端口已被使用,请使用“--port”修改 ...

  9. spring tomcat启动 请求处理

    onRefresh(); protected void onRefresh() { try { createEmbeddedServletContainer(); } } private void c ...

  10. LeetCode20——有效的括号

    在记事本中写算法题和在纸上写其实感觉差不多,反正是不能进行调试.想起某高手的话,写代码要做到“人机合一”,写高级语言时(指的是 C 和 C++)脑海中要知道当前写的代码对应的反汇编代码,也就是要深入了 ...