
视觉SLAM & SfM
文章平均质量分 85
ORB-SLAM, ORB-SLAM2, ORB-SLAM3
瞻邈
老菜鸟一个。
展开
-
Building Rome with Convex Optimization论文阅读
我们提出了XM,一个可扩展且无需初始化的全局捆绑调整求解器,利用学习的深度和凸优化。通过将缩放捆绑调整放松为凸SDP,并使用Burer-Monteiro分解和基于CUDA的信任区域黎曼优化器高效地解决它XM在极端规模上实现了可证明的全局最优性。集成到XM-SfM管道中后,它保持了现有SfM方法的准确性,同时显著提高了速度和可扩展性。限制和未来工作。首先,虽然我们的XM求解器在速度上优于基线,但它可能对噪声和异常值敏感。未来的工作包括改进过滤过程和开发更好的方法来处理异常值。转载 2025-03-23 15:54:13 · 76 阅读 · 0 评论 -
有限视角重叠和不准确外参标定下的多相机SLAM的鲁棒初始化
本文提出了一种当相机只有有限的公共视野和不准确的外参标定情形下的用于多相机视觉SLAM系统的鲁棒初始化方法。有限的共同视野导致只有一些特征可以在相机之间匹配上。离线标定后,由于振动或相机错误放置而导致的不准确的外部位姿,使得三角化种子3D点以成功初始化SLAM系统变得更加困难。没有像大多数多相机系统那样将外参设为定值以用于特征匹配和3D点三角化,我们提出将不准确的外参作为软约束来适应标定误差。我们的初始化方法包括在不同相机之间匹配和在两个关键帧之间匹配两个阶段。这两个阶段都涉及优化包含来自不准确标定参数的外转载 2024-08-14 15:10:36 · 418 阅读 · 0 评论 -
SLAM中线特征的参数化和求导
众所周知,线特征比点特征可以提供更多的约束条件,并且在某些场合下比点特征要鲁棒。但是如果我们想要把线特征加入到SLAM系统中面临的是参数化和优化求导。这篇文章介绍了贺博的PL-VIO中线特征的参数化和求雅克比。下面我们就来详细介绍一下空间直线的两种参数化方法:Plücker参数化方法,直线正交表示方法。为什么需要两种参数化方法呢?因为空间中的直线有4个自由度,而Plücker参数化方法需要使用6个参数表示直线,这样就会导致过参数化,过参数化在优化的时候就需要采用带约束的优化,不太方便。于是引入了可以用4原创 2024-06-06 21:17:40 · 2440 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(六):Tracking程序详解(上)
Tracking线程流程框图:各流程对应的主要函数。原创 2024-05-23 09:29:54 · 2383 阅读 · 2 评论 -
Colmap学习笔记(一):Pixelwise View Selection for Unstructured Multi-View Stereo论文阅读
本文展示一套MVS系统,该系统利用非结构化的图片实现鲁棒且稠密的建模。本文的主要贡献是深度和法向量的联合估计,用光度和几何先验进行像素筛选,多视图几何一致项,该项同时进行精修和基于图片的深度和法向量的融合。在标准数据和大尺度网络图片上的实验证明了其在精度、完善性、效率方面的优异性能。原创 2024-02-22 19:38:18 · 774 阅读 · 0 评论 -
3D Line Mapping Revisited论文阅读
提出了一种基于线的重建算法,Limap,可以从多视图图像中构建3D线地图,通过线三角化、精心设计的评分和track构建以及利用线的重合,平行性和正交性等结构先验来实现的,可以与现有的基于点的SFM算法集成,并且可以利用其3D点来进一步改善线重建的结果。构建的3D线地图也开辟了新的研究方向,即基于线的视觉定位和BA,其中将线与点结合在一起会产生最佳结果。原创 2024-02-04 23:43:16 · 1511 阅读 · 0 评论 -
Unifying Flow, Stereo and Depth Estimation论文阅读
针对光流估计、校正的立体匹配和未矫正的深度估计,作者提出了统一的范式和模型。通过将这三个任务表述为一个统一的密集匹配问题,利用Transformer和softmax实现全局匹配,并结合self-attention处理遮挡问题,证明了它们都可以用一个统一的模型来解决。同时也支持跨任务迁移。利用三个任务相关的细化后处理,最终的模型在10个流行的光流/立体匹配/深度数据集上实现了最先进的或具有高度竞争力的性能,同时在模型设计和推理速度方面更简单、更高效。转载 2023-03-18 19:15:37 · 1542 阅读 · 0 评论 -
maplab 2.0 – A Modular and Multi-Modal Mapping Framework论文阅读
将多种传感器和深度学习集成到SLAM系统中是当前研究的重要领域。多模态是一块跳板,既可以在挑战场景下增强鲁棒性,又可以解决不同传感器配置的多机系统建图问题。Maplab 2.0提供了一个更加通用的开源平台,最初的Maplab用于创建和管理视觉惯性地图。Maplab 2.0集成了多种新模态,例如LiDAR、GPS、车轮编码器、语义对象等。除此之外,还提供了易于集成外部组件的接口,例如添加不同视觉特征或闭环约束。这些功能使新平台非常适合作为基于深度学习的特征点检测和闭环的研究工具。该系统是十分灵活的,本文列出如原创 2023-01-24 00:06:56 · 970 阅读 · 0 评论 -
Maplab:一个用于视觉惯性建图和定位研究的开源框架
鲁棒性(Robust)和准确性(accurate)的视觉惯性估计对机器人当今的许多挑战至关重要。其能够对先验地图(prior map)进行定位(localize)并获得准确且无漂移的姿态估计,从而可以进一步推动这种系统的适用性。然而,目前大多数可用的解决方案都集中在单一场景用例上(a single session use-case),缺乏定位能力(localization capabilities)或端到端线程(end-to-end pipeline)。我们相信,只有一个完整的系统,结合最先进的算法,可扩展原创 2023-01-23 17:01:27 · 4668 阅读 · 0 评论 -
PlanarSLAM:基于结构化约束的视觉SLAM
在我们所熟知经典SLAM系统,以ORB-SLAM为代表的通过特征点法在相机位姿估计方面有很好的表现,但在一些人为构造的弱纹理环境下,由于缺少可靠的特征点的缘故,导致表现性能下降。针对此种问题,作者通过根据周围环境的几何特征来提升结构化环境下的SLAM追踪和建图准确性。除特征点以外,我们还可以利用结构化环境提供的大量线和面的特征来进行SLAM系统的追踪与建图。在SLAM的追踪模块中,作者对点、线、面做了解耦合的优化处理,同时利用曼哈顿假设对位姿进行优化。对于建图部分,从稀疏到稠密不同等级的地图可以以较低原创 2022-12-03 00:42:50 · 1108 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十七):词袋模型
Bag-of-words模型是信息检索领域常用的文档表示方法。在信息检索中,BOW模型假定对于一个文档,忽略它的单词顺序和语法、句法等要素,将其仅仅看作是若干个词汇的集合,文档中每个单词的出现都是独立的,不依赖于其它单词是否出现。也就是说,文档中任意一个位置出现的任何单词,都不受该文档语意影响而独立选择的。例如有如下两个文档:原创 2022-11-29 15:54:27 · 1682 阅读 · 0 评论 -
ORB-SLAM3从理论到代码实现(六):地图回环优化
LoopClosing.cc这个文件是闭环检测与矫正的代码,其逻辑比较清晰。由于用到了多地图集,所以闭环检测不仅在当前地图中进行,还会在以前的地图中检测。如果是在当前地图中检测到了回环,则进行回环矫正;如果是在以前的地图中检测到了回环,则在回环处进行地图的融合,并矫正融合地图中所有的关键帧位姿和地图点。原创 2022-11-06 00:08:27 · 1209 阅读 · 0 评论 -
ORB-SLAM3从理论到代码实现(五):sim3优化
该函数实现于 src/Optimizer.cc 文件中,被 src/LoopClosing.cc 文件中的 LoopClosing::ComputeSim3() 调用。如果当前关键帧,与某一候选关键帧匹配时,则会计算两帧之间的 Sim3 变换 gScm(候选关键帧到当前帧的Sim3变换)。获得候选关键帧到当前帧的Sim3变换gScm之后,然后再利用两帧之间的匹配关系,对gScm进行优化,首先看下图:原创 2022-11-05 23:52:29 · 1097 阅读 · 0 评论 -
ORB-SLAM3从理论到代码实现(四):Optimizer尺度与重力优化
这一部分代码量巨大,查阅了很多资料结合来看的代码,将分为以下部分进行分析 单帧优化 局部地图优化 全局优化 尺度与重力优化 sim3优化 地图回环优化 地图融合优化原创 2022-11-05 23:47:52 · 974 阅读 · 0 评论 -
ORB-SLAM3从理论到代码实现(二):Optimizer局部地图优化
这一部分代码量巨大,查阅了很多资料结合来看的代码,将分为以下部分进行分析 单帧优化 局部地图优化 全局优化 尺度与重力优化 sim3优化 地图回环优化 地图融合优化原创 2022-11-05 23:41:13 · 1082 阅读 · 0 评论 -
VINS-Mono: A Robust and Versatile Monocular Visual-Inertial State Estimator
港科大的VINS-Mono作为目前state of the art的开源VIO项目,是研究视觉与IMU紧耦合的必读算法,网上的论文解读与代码实现也非常丰富(感谢!)。为更好地进行学习,本人在几篇VINS论文解读与翻译的参考与改进下,完成了自己对全文的阅读与翻译,以后将逐步更新自己对算法的解读,欢迎大家一起讨论。原文:VINS-Mono A Robust and Versatile Monocular Visual-Inertial State EstimatorVINS代码地址:https://gith转载 2022-10-29 10:40:15 · 1741 阅读 · 0 评论 -
多帧三角化原理
三角化是通过多帧相机对同一个点的观测计算出特征点在世界坐标系下的绝对3D坐标的一个过程,简单说就是相机位姿已知,需要求解特征点的3D位置。原创 2022-10-29 10:01:33 · 2328 阅读 · 3 评论 -
ORB-SLAM3从理论到代码实现(三):Optimizer全局优化
这一部分代码量巨大,查阅了很多资料结合来看的代码,将分为以下部分进行分析 单帧优化 局部地图优化 全局优化 尺度与重力优化 sim3优化 地图回环优化 地图融合优化原创 2022-10-24 13:38:27 · 1714 阅读 · 1 评论 -
ORB-SLAM3从理论到代码实现(一):Optimizer单帧优化
Optimizer是非常重要的代码文件!!这一部分代码量巨大,查阅了很多资料结合来看的代码,将分为以下部分进行分析 单帧优化 局部地图优化 全局优化 尺度与重力优化 sim3优化 地图回环优化 地图融合优化原创 2022-10-21 23:46:27 · 1276 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十六):ORB关键点提取和描述子
特征点由关键点和描述子组成,关键点是该特征点在图像中的位置,有些还包括方向、大小等信息,描述子是用来描述该关键点周围像素的一种描述方法,外观相似的关键点应该具有相似的描述子,想要判断两个不同位置的关键点是否相似,可以通过计算他们之间描述子的距离来确定。原创 2022-09-23 14:03:35 · 1089 阅读 · 0 评论 -
ORB-SLAM3从理论到代码实现(七):地图融合优化
这一部分代码量巨大,查阅了很多资料结合来看的代码,将分为以下部分进行分析 单帧优化 局部地图优化 全局优化 尺度与重力优化 sim3优化 地图回环优化 地图融合优化原创 2022-09-20 02:53:55 · 1495 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十五):KeyFrameDatabase类
这个类是关键帧的数据库,主要用于计算闭环检测和重定位时的候选帧,类中维护一个每个元素都是链表的vector容器,容器的每个元素是预先训练好的特征词汇,然后对应的连表上放的都是关键帧,包含这个词汇的关键帧。原创 2022-09-18 16:41:07 · 684 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十四):KeyFrame类
KeyFrame为关键帧,关键帧之所以存在是因为优化需要,所以KeyFrame的几乎所有内容都是位优化服务的。该类中的函数较多,我们需要归类梳理一下,明白其功能原理,才能真正弄懂它的内容。图优化需要构建节点和变,节点很好理解,就是关键帧的位姿,所以需要有读写位姿的功能,边分为两种,第一种边是和MapPoint之间的,所以需要有管理和MapPoint之间关系的函数,第二种边是和其他关键帧之间的,他们之间需要通过MapPoint产生联系,两帧能够共同观测到一定数量的MapPoint时则可以在他俩之间建立边,原创 2022-09-18 15:59:49 · 932 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十):LoopClosing程序详解
LoopClosing是专门负责做闭环的类,它的主要功能就是检测闭环,计算闭环帧的相对位姿病以此做闭环修正。原创 2022-09-18 15:32:13 · 664 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十三):MapPoint类
MapPoint是地图中的特征点,它自身的参数是三维坐标和描述子,在这个类中它需要完成的主要工作有以下方面:1)维护关键帧之间的共视关系2)通过计算描述向量之间的距离,在多个关键帧的特征点中找最匹配的特征点3)在闭环完成修正后,需要根据修正的主帧位姿修正特征点4)对于非关键帧,也产生MapPoint,只不过是给Tracking功能临时使用原创 2022-09-18 12:08:56 · 664 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十一):Map类详解
Map类比较简单,主要功能就是增删关键帧和地图点,此处直接列出主要函数列表原创 2022-09-18 11:54:13 · 435 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(九):LocalMapping程序详解
LocalMapping线程负责对新加入的KeyFrames和MapPoints筛选融合,剔除冗余的KeyFrames和MapPoints,维护稳定的KeyFrame集合,传给后续的LoopClosing线程。主要的功能点在: 处理新的关键帧ProcessNewKeyFrame() 剔除不合格地图点MapPointCulling() 三角化恢复新地图点CreateNewMapPoints() 融合当前帧与相邻帧重复的地图点SearchInNeighbors() 局原创 2022-09-18 10:11:56 · 817 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(十二):Frame类
Frame是帧,也就是对应一帧图像,可以是单目、双目、RGBD,所以该类所包含的操作就是slam中以帧为单位进行的处理,主要包括以下方面:1)读写该帧对应的相机位姿2)处理帧和特征点之间的关系,包括判断特征点是否在视野内、获取该帧一定区域内的特征点、特征点校正等3)恢复深度,如果有RGBD就直接读取深度值,如果有双目,就用SAD进行深度恢复原创 2022-09-16 14:03:07 · 772 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(八):Tracking程序详解(下)
在上一次进行重定位之后,过了20帧数据,或关键帧数小于20个,不满足不能生成在上一个关键帧插入之后,过了20帧,或局部建图是空闲状态,不满足不能生成。当前帧跟踪到大于若干个点,不满足不能生成当前帧的跟踪点数小于90%的参考关键帧跟踪点数,并且当前帧跟踪点数大于15,不满足不能生成。原创 2022-03-23 13:45:57 · 423 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(七):Tracking程序详解(中)
void Tracking::MonocularInitialization()(StereoInitialization()由于类似,不再赘述)步骤 1. 当第一次进入该方法的时候,没有先前的帧数据,将当前帧保存为初始帧和最后一帧,并初始化一个初始化器。 2. 第二次进入该方法的时候,已经有初始化器了。 3. 利用ORB匹配器,对当前帧和初始帧进行匹配,对应关系小于100个时失败。 4. 利用八点法的对极约束,启动两个线程分别计算单应矩阵和基础矩阵,并通过score判断用单应矩阵回复运动轨迹还是原创 2022-03-23 13:39:53 · 667 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(五):ORBmatcher程序详解
1. SearchByProjection(Frame &F, const vector<MapPoint*> &vpMapPoints, const float th)函数功能 SearchByProjection函数利用将相机坐标系下的Location MapPoints投影到图像坐标系,,在其投影点附近根据描述子距离选取匹配,由此增加当前帧的MapPoints 参数说明 F 当前帧 vpMapPoints Local MapPo..原创 2022-02-26 13:40:54 · 1437 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(四):相机成像原理、基本矩阵、本质矩阵、单应矩阵、三角测量详解
由于ORBmatcher.cc中有三角化和重投影等内容,所有我先写相机成像等多视图几何内容。1. 相机的成像原理假设空间中有一点P,它在世界坐标系中的坐标为P_{w},在相机坐标系中的坐标为P_{c}=[X,Y,Z],在图片中的像素坐标为P_{uv}.设相机内参为则P_{w},,P_{c},P_{uv}的关系为:上式中相机的位姿 R,t 又称为相机的外参数, 上式两侧都是齐次坐标。因为齐次坐标乘上非零常数后表达同样的含义,所以可以简单地把 Z 去掉:这就完成了..转载 2022-02-18 13:53:14 · 1003 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(三):ORB特征提取和匹配理论和代码详解
设置一个比例因子scaleFactor(opencv默认为1.2)和金字塔的层数nlevels(pencv默认为8)。将原图像按比例因子缩小成nlevels幅图像。缩放后的图像为:I’= I/scaleFactork(k=1,2,…, nlevels)。nlevels幅不同比例的图像提取特征点总和作为这幅图像的oFAST特征点。特征的旋转是由灰度质心法(Intensity Centroid)实现的。下面介绍灰度质心法。原创 2022-02-18 13:45:26 · 3321 阅读 · 0 评论 -
ORB-SLAM2从理论到代码实现(二):System类
具体的理论和代码解读。1. 代码解读System.cc是ORB-SLAM2的主程序,也是ORB-SLAM2系统的入口。本篇主要讲System.cc程序,以及其中用到的理论。把关键代码提取出来,进行标注。mpVocabulary = new ORBVocabulary();//读取ORB词袋mpKeyFrameDatabase = new KeyFrameDatabase(*mpVocabulary);//创建关键帧数据库mpMap = new Map();//创建地图对象m.原创 2022-02-11 15:45:51 · 810 阅读 · 3 评论 -
ORB-SLAM2从理论到代码实现(一):整体框架
ORB-SLAM是由Raul Mur-Artal,J. M. M. Montiel和Juan D. Tardos在2015年提出。它是一个基于特征识别的单目slam系统,可以实时运行,适用于各种场合,室内的或者室外的,大场景或小场景。系统具有很强的鲁棒性,可以很好地处理剧烈运动图像、可以有比较大的余地自由处理闭环控制、重定位、甚至全自动位置初始化。该系统具有三个线程:分别是跟踪(Tracking)、建图(LocalMapping)和闭环检测(LoopClosing)。以后我会结合ORB-SLAM......原创 2022-02-11 15:39:51 · 1959 阅读 · 0 评论 -
VINS预积分推导
状态转移方程where写成下面形式Where。原创 2021-01-15 19:02:55 · 372 阅读 · 1 评论 -
开源视觉SLAM方案
前言本文简单将各种开源视觉SLAM方案分为以下 7 类(固然有不少文章无法恰当分类):·Geometric SLAM·Semantic / Learning SLAM·Multi-Landmarks / Object SLAM·VIO / VISLAM·Dynamic SLAM·Mapping·Optimization一、Geometric SLAM(20项)这一类是传统的基于特征点、直接法或半直接法的 SLAM,虽说传统,但 2019 年也新诞生了 9 个开源方案.转载 2020-11-19 16:29:08 · 4421 阅读 · 1 评论