- 博客(30)
- 收藏
- 关注
原创 (十三)ORBSLAM3子地图融合优化
前言 距离上一次博客更新已经过去了N年。。。 ORB-SLAM2继续更新,这真的是有生之年系列。 ORB-SLAM3在2的基础上,引进了IMU的初始化和融合估计,以及子地图功能。笔者目前 IMU 相关的知识相对比较薄弱,因此准备在第十四讲的时候再为大家介绍VI-ORBSLAM相关的内容。本讲主要关心的是纯视觉的子地图融合功能。ORB-SLAM子地图简介 ORB-SLAM3使...
2021-12-08 23:06:00
1365
原创 《计算机图形学编程》笔记——第四章
《计算机图形学编程》笔记——第四章管理3D图形数据关键模块介绍1. 缓冲区2. 统一变量3. 顶点属性插值4. 模型-视图5. 矩阵堆栈代码及结果BUG引用碎碎念管理3D图形数据使用OpenGL渲染3D图形通常需要将若干数据集发送给OpenGL着色器管线。举个例子:想要绘制一个简单的3D对象,比如一个立方体,至少需要发送以下项目:立方体模型的顶点;控制立方体在3D空间中朝向表现的变换矩阵;把数据发送给OpenGL管线。3.1. 通过顶点属性的缓冲区。3.2. 直接发送给统一变量。关键模块
2021-02-04 23:27:04
409
原创 《计算机图形学编程》笔记——第三章
《计算机图形学编程》笔记——第三章数学基础矩阵1. 变换矩阵2. 视图矩阵3. 投影矩阵4. LookAt矩阵代码及结果BUG1. GLM引用数学基础计算机图形学中大量使用了数学原理,尤其是矩阵和矩阵代数。3D图形学中几乎每个方面、每种效果——移动、缩放、透视、纹理、光照、阴影等都在很大程度上以数学方式实现。矩阵图形学中大量使用了矩阵相关的操作,特别是变换矩阵、视图矩阵、模型矩阵和投影矩阵以及LookAt矩阵。1. 变换矩阵这里的变换矩阵指的是:平移矩阵、旋转矩阵以及缩放矩阵。尽管视图矩阵也
2021-02-04 22:59:33
498
原创 《计算机图形学编程》笔记——第二章
《计算机图形学编程》笔记——第二章OpenGL图像管线图像管线介绍1. 顶点着色器2. 曲面细分着色器3. 几何着色器4. 光栅化5.片段着色器6. 像素操作代码及结果BUG1. GLEW初始化:glError:20802. 颜色缓冲区刷新引用OpenGL图像管线现代3D图形学编程会使用管线的概念,在管线中,将3D场景转换为2D图形的过程被分成多个步骤。实际上,图形学做的事情,笔者是这样理解的:构建三维模型,随后采用虚拟相机对该模型进行拍摄,最终呈现在用户眼前。这个过程需要考虑成像原理、成像效果等。图
2021-02-04 22:29:06
571
原创 《计算机图形学编程》笔记——第一章
《计算机图形学编程》笔记——第一章入门要求开源代码引用入门嗨,各位读者朋友们好,最近由于看到图形学有很多好玩的东西,于是想着尝试一下入门学习相关知识。图形学的用途非常推荐各位小伙伴看一下胡渊明博士的GAMES201第一讲:GAMES201:高级物理引擎实战指南2020,概述就介绍得非常好,笔者当初看了这一讲以后对图形学产生了浓厚的兴趣,无奈笔者三天打鱼两天晒网。。。遗憾的是,看完第一讲后,后续的内容专业性就比较高了,对于流体力学等没什么研究的笔者来说要求太高,无奈只能从更基本的课程开始看。后来发现其实
2021-02-04 21:30:31
633
原创 DSO全家桶(四)——DSO前端:前端跟踪
DSO前端跟踪 嗨,各位读者朋友们好!今天我们接着讲前端跟踪。由于第三讲中的初始化部分包含trackFrame估计初始两帧运动,与本讲内容重叠,因此笔者将其初始化中的跟踪合并到当前讲中,具体的区别稍后我们会在介绍跟踪流程的过程中叙述。 OK,我们还是一如既往地先上个流程图,如图1所示。笔者始终认为只有把流程图画清晰了,才能说明自己对整个流程足够了解。在写博客的时候,流程图有助于梳...
2020-12-27 22:48:00
819
2
原创 DSO全家桶(三)——DSO前端:初始化
DSO初始化流程 嗨,各位读者朋友们好!今天我们接着讲DSO全家桶中的第三讲——初始化。 这一讲的内容相对来说会简单一些,因为笔者会将初始化阶段的运动估计移到下一讲:DSO全家桶(四)——前端:前端跟踪中去讲,因为本质上这两个跟踪的方法比较接近,就没有必要赘述了。 在第二讲中,我们已经介绍了DSO提取梯度点的策略,那么这一讲就接着后续的操作,讲讲这些梯度点会怎么用。对于单目...
2020-12-16 23:08:00
676
原创 DSO全家桶(二)——DSO前端:提取梯度点
嗨,各位读者朋友们好!今天我们接着讲DSO全家桶的第二讲——提取梯度点。 首先,我们会先介绍一下DSO中从图像读取到提取梯度点的整个流程,然后再对重点的部分——“提取梯度点”进行讲解,让大家对整个流程的逻辑有个较为清晰的认识。这样写的目的主要是让大家在后续自己实现代码的时候,可以有目标地写测试用例。图1.图像预处理到提取梯度点流程图 OK,我们开始吧!如图1所示,我们将...
2020-11-14 14:47:00
707
原创 DSO全家桶(一)——DSO流程概述
嗨,各位读者朋友们好久不见。在开始之前,再碎碎念几句。 笔者从2019年开始接触DSO,主要是得益于赵开勇博士的指导,将我领入DSO的大门。随后,在学习的过程中,也遇到非常多的挫折,虽然现在还有很多问题没彻底搞清楚,但是有幸的是,泡泡机器人SLAM的朋友们为我提供了非常多的帮助,其中包括但不限于勇哥(赵开勇)、威爷(曲星威)、晨博(邱笑晨)、金戈戈(涂金戈)、龚益群、吴佳田等大佬...
2020-11-02 22:49:00
1136
1
原创 (一) DSO开篇碎碎念
大家好哇, 好久没来更博客了. 过去一年, 在结束了ORB-SLAM2的博客以后, 就开始去研究DSO了, 因此ORB-SLAM2的很多模块化的代码并没有写完, 后面有时间再补上吧, 先立个flag. 之所以并不急于去做这件事, 一来是DSO确实是耗费心力, 二来是ORB-SLAM2的参考资料实在是太多了, 因此我也就偷了个懒.... 其实早在今年三四月份, DSO相关的内容也基...
2020-08-03 18:07:00
347
原创 (六)PNP
PNP算法 在视觉SLAM中,我们通常会有不同的观测数据。 比如单目相机中,我们获取的两帧图像通常只有匹配的像素坐标,这时我们就只能利用对极几何来优化相对位姿,如果我们的特征点分布大体上接近一个平面,那么我们还可以估算两帧间的单应矩阵; 如果我们有RGB-D相机,我们还可以获得匹配像素对应的深度信息,那么我们就得到了两组三维匹配点,这时就可以通过ICP(迭代最近点)来进行运动...
2020-04-10 01:03:00
738
1
原创 (五)迭代最近点(ICP)
ICP算法 从这里开始,笔者便秉承恩师的教诲,用一些比较规范的写法来介绍算法原理。已知条件 匹配的一组三维点云:$$p = \{p_{1}, p_{2}, \dots, p_{n} \}, q = \{q_{1}, q_{2}, \dots, q_{n} \}$$Tips: (这堆点云一般是根据两帧图像的特征点进行匹配,再利用匹配的像素位置在深度图中查找深度值,利用相机内参...
2020-04-04 17:35:00
202
原创 (四)单应矩阵
单应矩阵原理 单应(透射变换)是射影几何中的概念,又称为射影变换。他把一个射影平面上的点映射到另一个平面对应的位置,并且把直线映射为直线,具有保线性质。与对极几何不同的是,对极几何将点映射到线上,而单应矩阵是点对点的关系。要注意的是单应矩阵的适用场景为:当场景中的特征点都落在同一平面上,比如墙、地面等,此时可用单应性估计运动。 单应(透射变换)可以看成是仿射变换的拓展。仿射变换在...
2020-04-01 14:15:00
546
原创 (三)对极几何
对极约束理解:1. 对于有重叠纹理的两帧图像,通过特征点匹配可以找到一些匹配对,这是对极几何约束的基础;2. 匹配对是由同一空间点在不同像素平面投影得到的不同像素坐标,以参考帧为基础,假设空间点为 $P_{w}$,参考帧投影像素为 $p_{r}$, 当前帧投影像素为 $p_{c}$。由于空间点 $P_{w}$ 深度值不确定,因此其可能在参考帧光心 $O_{r}$ 和投影像素 $...
2020-03-31 13:48:00
221
原创 (二)特征匹配
特征匹配 特征匹配,又可以称之为数据关联。在图像领域中,特征匹配的作用非常大。比如:在图像拼接中,需要进行特征匹配,方便求出单应矩阵以拼接两幅图像;在三维重建中,需要进行特征匹配,方便求出变换矩阵以及三角化特征点;在图像检索中,可以通过特征点在数据库中检索,查找到特征匹配数量最多的识别结果;... 检索部分暂时不提,毕竟涉及到了复杂的数据结构。并且在SLAM中用的并不...
2020-03-12 15:03:00
1663
原创 (一)特征提取
特征提取 特征的种类在图像领域主要分为点,线,面。线特征和面特征对图像信息利用得更多,因而其分辨性更高。但遗憾的是,由于线特征和面特征提取的条件比较苛刻,因此在实际应用中并不广泛。(尽管在SLAM中也有点线结合的实例,在图像纹理较弱的情况下,线特征可以发挥更大的用处。但是却是在增加计算量的同时,提高的性能较为有限。)随着深度学习在图像方面的不断提升,基于全图学习得到的特征向...
2020-03-12 12:33:00
924
原创 (十二)ORBSLAM2系统流程所有细节
本讲的文字内容主要用于描述图片,这张思维导图是我在阅读ORB-SLAM2源码时记录的,ORB-SLAM2系列的博客全部都是根据思维导图中的内容扩充的。可以说,这个思维导图就是我对ORB-SLAM2的大部分的理解。但因为个人能力有限,理解难免有所偏颇,望大家见谅。 这次,我就不私藏了。贡献给大家阅读。...
2019-09-28 12:11:00
307
原创 (十一)ORBSLAM2在ROS下运行
ORBSLAM2运行ROS节点障碍 ORBSLAM2提供了与ROS耦合的应用程序,放在单独的ROS文件夹中。同样的,它提供了与ROS无关联的同类型的应用程序。不过,为了方便,笔者主要测试了它在ROS下的应用程序,因为笔者的摄像头是用ROS提供的openni2来驱动的,所以可以利用相机主题直接为ORBSLAM2提供输入图像。不过,笔者在跑通这个程序的过程中遇到了一些障碍,所以在此做...
2019-05-21 11:37:00
788
原创 (七)ORBSLAM特征点的三角化
ORBSLAM2特征点三角化简介 插入关键帧以后,我们还需要插入新的地图点。为了确保新插入的地图点是足够鲁棒的,进行严格的检查是必要的。ORBSLAM2在插入地图点的时候也十分仔细,上一讲我们提到了地图的更新策略,唯独三角化没有细讲,倒不是因为它不重要而不提,而是因为三言两语说不清楚,所以才需要单独用一讲来说说这个方法。 接下来,笔者将会从一下两个方面来介绍本讲的内容: 1...
2019-05-17 22:38:00
484
原创 (十)ORBSLAM闭环
ORBSLAM闭环简介 SLAM中闭环的目的,是将当前的相机位姿和场景与回环帧处的位姿和场景进行融合,从而消除累积误差,校正运动轨迹。那么达到这个目的的前提,是必须要检测到正确的回环。当然,这个要求在前面我们讲解回环检测的时候已经详细介绍过了,如果不能通过层层筛选,那么我们会选择不要闭环。但是,在检测到正确的回环以后,我们还需要保证闭环的融合和校正是高质量的,这样才能消除累积误差...
2019-05-15 16:26:00
235
原创 (九)ORBSLAM回环检测之几何验证
ORBSLAM2回环检测之几何验证简介 回环检测的目的是找到当前场景在历史中是否出现过,如果出现过,那会给我们提供一个非常强的约束条件,把我们偏离很多的轨迹一下子修正到正确的位置上。当然,这么好的东西,有利自然就有弊。万一我们检测出来的回环不是真正的回环,也就是说我们认错了地方,这种时候提供的回环约束会导致轨迹被错误地“修正”了,结果就是估计的轨迹跟真实的轨迹相差十万八千里,这显...
2019-05-07 12:13:00
430
原创 (八)ORBSLAM回环检测之位置识别
ORBSLAM2回环检测简介 由于回环检测模块包含两个部分的内容:其一是位置识别,即外观验证,通过图像间的相似度信息进行判断;其二是几何验证,通过回环候选帧与当前关键帧的几何关系来做进一步验证。 由于两部分内容都较为繁琐,因此笔者将回环检测模块拆分成两讲,今天这一讲主要介绍外观验证,下一讲则继续几何验证。 外观验证,或者叫位置识别,实际上是一个图像检索的问题,即输入图像与...
2019-05-05 12:11:00
350
原创 (六)ORBSLAM地图的更新策略
ORBSLAM2地图更新策略简介 地图的更新目标在于如何插入新的关键帧和地图点,同样,怎么剔除多余的关键帧和没用的地图点。 接下来,笔者会从下面几个方面来介绍地图的更新策略: 1. 统计当前关键帧的共视图关键帧,构建临时的局部地图; 2. 剔除当前关键帧中质量较差的地图点; 3. 局部地图重投影获取更多匹配对; 4. 剔除冗余的关键帧。共视图关键帧 共...
2019-04-29 20:48:00
281
原创 (五)ORBSLAM关键帧的筛选和插入
ORBSLAM2的关键帧简介 图像插入频率过高会导致信息冗余度快速增加,而这些冗余的信息对系统的精度却十分有限,甚至没有提高,反而消耗了更多的计算资源。这等于吃力不讨好。 关键帧的目的在于,适当地降低信息冗余度,减少计算机资源的损耗,保证系统的平稳运行。 ORBSLAM2也是沿袭PTAM的方案,将定位和建图分成两个线程,不过ORBSLAM2还增加了回环这个线程,在关键帧的问...
2019-04-28 23:00:00
825
原创 (四)ORBSLAM运动估计
ORBSLAM2的运动估计简介 ORBSLAM2中的运动估计核心方法就是3D-2D的PNP,而在跟踪过程主要分为三种类型:无运动模型的跟踪,即基于参考帧的跟踪;基于匀速运动模型的跟踪;重定位; 上述三种方案,我们只介绍前两种,重定位由于需要用到回环检测,我们会在之后讲解。PNP运动估计 在介绍ORBSLAM2的跟踪策略之前,我们先了解一下他所用的运动估计方...
2019-04-24 12:06:00
333
原创 (三)ORB特征匹配
ORBSLAM2匹配方法流程 在基于特征点的视觉SLAM系统中,特征匹配是数据关联最重要的方法。特征匹配为后端优化提供初值信息,也为前端提供较好的里程计信息,可见,若特征匹配出现问题,则整个视觉SLAM系统必然会崩掉。因此,本系列将特征匹配独立成一讲进行分析。 ORBSLAM2中的匹配流程如下所述: 1. 计算当前帧描述子对应的BOW向量; 2. 设置匹配阈值; ...
2019-04-17 22:08:00
354
原创 (二)ORB描述子提取源码思路与实现
ORBSLAM2中ORB特征提取的特点 ORBSLAM2中通过对OpenCV中的ORB特征点提取类进行修改,对图像进行分块提取,而后划分节点,使得每个节点中保存的特征点性能是该节点所有特征点中最好的。 可能按照上面说的方式,大家不太能理解。 这么说吧。将铺满苹果的桌子进行画格子,然后每个格子中就会有不同数量的苹果,在每个格子中选出最好吃的苹果,格子中其他的苹果全部扔掉。...
2018-12-08 14:50:00
244
原创 (一)ORB描述子提取
ORBSLAM2中使用ORB描述子的方法 经典的视觉SLAM系统大体分为两种:其一是基于特征点法的,其二是基于直接法的。那么本文主要就讲特征点法的SLAM。 基于特征点法的视觉SLAM系统典型的有PTAM,ORBSLAM等。本文主要围绕ORBSLAM2的方案来阐述特征点法SLAM,因为ORBSLAM2可以说是特征点法SLAM的巅峰之作。ORBSLAM2采用三个主要线程:跟踪,...
2018-12-05 17:46:00
260
原创 双目立体匹配——归一化互相关(NCC)
归一化相关性,normalization cross-correlation,因此简称NCC,下文中笔者将用NCC来代替这冗长的名称。 NCC,顾名思义,就是用于归一化待匹配目标之间的相关程度,注意这里比较的是原始像素。通过在待匹配像素位置p(px,py)构建3*3邻域匹配窗口,与目标像素位置p'(px+d,py)同样构建邻域匹配窗口的方式建立目标函数来对匹配窗口进行度量相关性,...
2017-08-13 17:30:00
522
1
原创 初次进入博客园
初次进入博客园写文章,先来试试水。看看编辑器以及流程~笔者兴趣点在于视觉SLAM,三维重建与AR,但是目前还是个初级研究者,所写内容不免有许多瑕疵,因此希望通过博客记录与相关方向研究者学习。emmmm.... 就这样啦~...
2017-08-13 10:51:00
126
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人