LoopClosing是专门负责做闭环的类,它的主要功能就是检测闭环,计算闭环帧的相对位姿病以此做闭环修正。 老规矩,先上一张图,清晰明了 从图里可以看出,这个类最主要的就是三个函数,下面分别介绍 1. DetectLoop:检测闭环 它的主要流程包括: 1)如果地图中的关键帧数小于10,那么不进行闭环检测 2)获取共视关键帧,并计算他们和当前关键帧之间的BoW分数,求得最低分
LocalMapping是管理局部地图的类,管理的内容包括关键帧和地图点,所谓管理就是增加、删除和修正位姿。具体的方法在下图中 上图是功能上的概括,下图可以详细的看出它的工作流程 一图胜千言,有了上面这两张图,其实这个类的内容就了解的差不多了,下面我们详细看一下几个主要函数的内容 1. ProcessNewKeyFrame:插入新的关键帧 主要流程: 1)从缓冲队列中取出一帧
Tracking类的主要功能是初始化、更新当前帧位姿、跟踪关键帧和局部地图、重定位等。由于Tracking类的代码比较长,而且它里面用到的算法内容都在解析其他几个类的时候解释过了,所以本篇文章就不详细解释所有的代码了,而是重点梳理它的流程。 先上一张图,列出这个类的基本流程和主要函数。 这张图已经很好的概括了这个类的主要内容了,为了更详细的了解这个类的工作流程,我们祭出下面这张图
Initializer是用来初始化的,初始化的方法是根据当前帧和参考帧匹配得到的特征点对,利用RANSAC方法去计算单应性矩阵H和基础矩阵F,然后根据重投影误差大小决定选择哪个矩阵,最后使用SFM方法利用矩阵计算旋转R和平移T。 这里之所以要同时计算单应性矩阵H和基础矩阵F,是因为当特征点在同一个平面上时,基础矩阵F会出现退化现象,导致位姿计算错误。这也导致这个类的代码中,所有关于恢复矩阵的
Optimizer是用来优化的类,ORB SLAM2中所有优化的方法都存放在这个类中。 优化的目的是调整位姿,如果不只想知道优化包含哪些东西,还想弄明白为什么包含这些东西,就要先弄清楚有哪些地方需要计算位姿,位姿计算按复杂程度由低到高一共包含以下四种: 1)当前帧位姿计算 2)闭环检测时两帧之间相对位姿计算 3)局部地图关键帧位姿和地图点位置调整 4)全局地图关键帧位姿和地图点位置调整
Map类比较简单,主要功能就是增删关键帧和地图点,此处直接列出主要函数列表 直接上代码 //添加关键帧 void Map::AddKeyFrame(KeyFrame *pKF) { unique_lock<mutex> lock(mMutexMap); mspKeyFrames.insert(pKF); if(pKF->mnId&
该类的主要作用就是利用词袋数据,在已有的关键帧中查找和当前帧最接近的帧。 这个功能有两个作用,一是重定位时候,通过检测当前帧和哪个关键帧最接近,来确定相机当前的位置和姿态,对应的检测函数是DetectRelocalizationCandidates。二是在闭环检测时,通过检测来确定当前关键帧需要和哪些关键帧建立闭环修正的边,对应的检测函数是DetectLoopCandidates。 二者
一、原理分析 KeyFrame为关键帧,关键帧之所以存在是因为优化需要,所以KeyFrame的几乎所有内容都是位优化服务的。该类中的函数较多,我们需要归类梳理一下,明白其功能原理,才能真正弄懂它的内容。 图优化需要构建节点和变,节点很好理解,就是关键帧的位姿,所以需要有读写位姿的功能,边分为两种,第一种边是和MapPoint之间的,所以需要有管理和MapPoint之间关系的函数,第二种边是
Frame是帧,也就是对应一帧图像,可以是单目、双目、RGBD,所以该类所包含的操作就是slam中以帧为单位进行的处理,主要包括以下方面: 1)读写该帧对应的相机位姿 2)处理帧和特征点之间的关系,包括判断特征点是否在视野内、获取该帧一定区域内的特征点、特征点校正等 3)恢复深度,如果有RGBD就直接读取深度值,如果有双目,就用SAD进行深度恢复 这些功能对应的函数如下图所示 下
MapPoint是地图中的特征点,它自身的参数是三维坐标和描述子,在这个类中它需要完成的主要工作有以下方面: 1)维护关键帧之间的共视关系 2)通过计算描述向量之间的距离,在多个关键帧的特征点中找最匹配的特征点 3)在闭环完成修正后,需要根据修正的主帧位姿修正特征点 4)对于非关键帧,也产生MapPoint,只不过是给Tracking功能临时使用 它的主要功能梳理完以后,我们就可
代码解读主要是自己梳理代码过程中的记录,和网上各位大神的解读水平比不了。 ORB SLAM的大名和介绍就不需要在这里多介绍了,直接进入代码解读环节吧。 一、系统代码结构 ORB SLAM的代码结构非常清晰,直接看下面这张图就可以 这张图里可以看出orb一共有三个线程,分别负责跟踪(TRACKING)、局部建图(LOCAL MAPPING)和闭环(LOOP CLOSING)功能,同时
论文题目:Enhanced free space detection in multiple lanes based on single CNN with scene identification 开源代码:https://github.com/fabvio/ld-lsi/ ——————重要的事情要框住—————— 这是一篇很奇特的论文,作者骨骼清奇,脑回路与众不同,我也不清楚应该怎样去评价
论文题目:Spatial As Deep: Spatial CNN for Traffic Scene Understanding 开源代码:XingangPan/SCNN 一、概述 本篇论文提出了一种新的神经网络结构用于提取车道线,相比于传统网络在各个层之间直接进行卷积的方法不同的是,该网络按照一定方向(上、下、左、右)按照顺序进行卷积,作者认为这样更符合真实世界中物体结构的延伸,尤其是车
文章题目:Traffic Sign Classification Using Deep Inception Based Convolutional Networks 开源代码地址:https://github.com/vxy10/p2-TrafficSigns 一、概述 本篇文章提出了一种基于深度学习的交通标志识别方法,网络以Google Inception网络模型为基础,做了一些改进,并增
论文题目:End-to-end Lane Detection through Differentiable Least-Squares Fitting 开源代码:https://github.com/wvangansbeke/LaneDetection_End2End 一、概述 本篇论文是一篇关于车道线检测的文章,该文章的创新点在于实现了端到端的车道线拟合,输入图片,输出车道线曲线模型参数。
1. 概述 本篇文章和大家一起讨论SuperPoint系列文章的第三篇,也就是真正提出SuperPoint的一篇文章。 论文地址:http://arxiv.org/pdf/1712.07629 开源代码地址:https://github.com/MagicLeapResearch/SuperPointPretrainedNetwork SuperPoint是作者经过前面两篇文章的工作,经过总
1. 概述 这次我们一起讨论SuperPoint系列文章的第二篇Toward Geometric Deep SLAM,这篇文章延续了作者清晰的写作思路,读起来很顺畅。 本文是针对SLAM设计的基于深度学习的特征提取方法,主要包括两部分,一是特征点提取网络MagicPoint,二是基于提取的特征点进行位姿估计的网络MagicWarp。特别指出的是,改方法不需要学习描述子,而只提取特征点位置。由于训练
0. 写在前面 SuperPoint 是基于自监督训练的特征点检测和描述符提取方法,是2018年MagicLeap发表的一篇文章中提出的。MagicLeap是一个备受争议的做VR的公司,大家如果对他的八卦有兴趣可以看这篇文章: 年度盘点,一文详解Magic Leap 2018年热搜高居不下的原因baijiahao.baidu.com/s?id=1617826608054524938&
概述 上一篇文章我们一起学习了GCN网络,它的作用是提取特征点和描述子,用于匹配得到位姿。本次我们一起学习它的改进版GCNv2,改进版在速度上大幅度提升,精度上和原网络性能相当。并且改进版所提取的特征点具有和ORB一样的格式,因此作者把它在ORB-SLAM中替换掉了ORB特征,也就是GCN-SLAM。 论文链接:https://arxiv.org/abs/1902.11046v1 代码链
概述 GCN(Geometric Correspondence Network)是一个用于从图像中提取特征点和描述子的深度神经网络,所提的特征点和描述子可以用于位姿更新和闭环检测。GCNv2是GCN的改进版,提高了运行效率,把原来需要在GPU上运行的算法改进到可以在TX2上运行。GCN-SLAM就是基于GCNv2的实时SLAM系统。因此我们需要按照GCN->GCNv2->GC
这个专栏第一大部分主要是slam方面的论文和源码解读,从技术领域可分为激光slam和视觉slam,同时视觉slam中语义slam已经成为一个重要的分支,所以我们把它单独提出来作为一部分。激光slam虽然也有很多结合语义的,但是它在方法上和论文数量上还没有像视觉那样丰富,所以暂时不把激光语义slam单独提出来。 第二大部分是我自己会写一套从零开始做定位的系列博客,以及相关的一些我对定位这件事的
经过了漫长的周期,终于把这个阶段写完了。中间经历了重写,希望没有对看过重写之前的那些烂文章的朋友造成误导,也再次对大家道个歉,没有把好质量关,惭愧不已! 一、主题回顾 这一系列的文章本质是围绕“优化”和“滤波”这两种融合方式来写的,其中在优化方案中,为了达到实时性,优化要使用滑动窗口。剩余大部分章节都是对这两个主题的基础知识补充。 优化与滤波的关系是什么,区别是什么?下面这张图可以给出很好的解释。
一、概述 在第十和第十一这两篇文章中,虽然一直在介绍融合,但是各位应该也注意到了一点,就是这个融合是建图任务下的融合,主要原因是因为,那种一次性优化所有内容的融合方法(结构图如下),效率太低了,执行一次优化所需要的时间太长,所以它不适合用来做实时的定位,而建图任务是离线的,所以无所谓。 那么问题来了,在实时的定位中,这个融合该怎么做嘞? 二、滑动窗口简介 要解决上面的问题,有一个简单的思路,就是
一、概述 多传感器的外参标定和时间同步(统称时空标定)是融合的重要前提条件,前面介绍的所有融合都是默认已经标定好了的。但实际上,标定当然是需要在融合之前做的,之所以放在后面讲,是因为标定所用到的知识比融合多,或者可以讲,标定是一种更高级别的融合。 由于标定的方法多种多样,要标定的内容也十分的多,所以本篇文章无法对每一种方法进行详细的介绍,索性我们在这里把常见方法的思路汇总梳理一下,弄清楚什么情况下
一、概述 在上一篇文章中,我们给出了下面的框图中实现框图对应的理论部分,但是也提到,虚线对应的部分太过复杂,当时没有介绍。 下面来分析一下具体的原因。带IMU的融合模型中的优化问题可以表示为 三种约束分别通过以下方式获得: 1) 激光里程计约束:使用激光里程计,计算每个关键帧位姿,进而得到相对位姿; 2) IMU约束:在上一个关键帧位姿基础上,进行惯性积分,从而得到两关键帧相对位姿; 3) R
为了把本篇文章的任务讲清楚,定好核心方向,我们需要把该算法所引用的场景任务梳理一下。 任务用一句话描述就是融合建图嘛,融合的传感器包括: 1)组合导航系统(输出绝对位姿) 2)雷达里程计(输出相邻帧间相对位姿) 3)回环检测系统(输出再次走到同一场景时,当前帧与历史帧之间的相对位姿) 综合以上各种信息,整个系统的结构图大概应该长这个样子 如果对这些东西做融合的具体实现还不清楚,可以再回头去看一下
一、概述 在目前主流的融合框架里,基本就分为优化和滤波两大类,滤波我们在前面通过大量的篇幅已经介绍过了,这里就介绍基于优化的方法。 优化的方法仍然是一个包含复杂内容的东西,一篇文章肯定也介绍不完,所以我们在本篇文章里,同样只介绍基础知识部分,基于优化的融合放在下一篇文章介绍。 二、优化问题定义 为了避免后续内容陷入繁杂的公式推导中摸不着方向,所以我们得先搞清楚优化是在做什么,也就是先定义什么是优化
一、概述 上一篇文章说到kalman滤波就是用预测的位姿(一般imu提供)和观测的位姿(一般由gps或者雷达和点云地图匹配得到)进行加权融合,并针对kalman的五个公式说明了整个加权过程,但这只是理解,要真正实现一整套融合系统,就需要把刚才那简单的几句话再展开成具体的实现步骤,做到这一点,除了kalman以外,还需要用到更早之前介绍的imu解算、imu误差模型等知识,如果已经忘了,还是需要翻一翻
一、概述 kalman滤波是一个重要的融合手段,虽然最近几年,随着基于优化的方法不断推广,基于滤波的方法逐渐式微,但是,由于二者各有优缺点,滤波方法现在及将来都仍然是重要的融合手段之一。 在多传感器融合定位系统中,kalman解决的其实是这样一个任务 它的本质是,结合预测与观测,得到最“精确”的后验值。实际中,预测与观测均从传感器而来(预测往往从IMU、编码器等传感器递推而来,观测往往从GPS、
一、概述 在定位领域的几乎所有多传感器融合系统中,都有IMU存在,而且,IMU是定位系统的主线与核心(对此可能很多人并不同意,但是我仍然坚定地坚持这一观点)。 对于IMU参与的融合系统(无论是基于滤波还是基于优化),它的误差分析就既是核心内容,也是基础内容,是必须要掌握的。如果要简单解释,所谓融合,就是根据观测误差去反推状态误差,而误差分析就是给出观测误差与状态误差之间的关系,让这个“反推”不再是
一、 概述 标定的本质是参数辨识。首先明确哪些参数可辨识,其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 辨识就比较丰富了,如果让各位先不局限于标定任务,想一想你了解的辨识方法有哪些,常见的回答应该有这样几个: 1)解析法或最小二乘 2)滤波(kalman等) 3)梯度下降迭代优化 确实没错,标定里用的就是这些方法。这说明标定其实就是一个普通的参数辨识问题,它和你遇到
一、概念及意义 拿到一个IMU,首要任务是对其器件误差进行分析,包括陀螺仪的误差和加速度计的误差。由于陀螺仪与加速度计的误差特性类似,仅是测量的物理量含义不同,因此我们就以陀螺仪为准来介绍随机误差成分、原理及分析方法。加速度计的误差分析直接照葫芦画瓢就行。 陀螺仪的误差主要包括这样几项: 1. 量化噪声 量化噪声是数字传感器必然出现的噪声,我们通过AD采集把连续时间信号采集成离散信号,在这个过程中
时隔多日,开始填坑,催稿催的我心慌慌~~~ 一、概述 惯性导航的解算是一个实现起来非常简单,但是理解起来要费一番功夫的东西,所谓“实现”就是把公式变成代码,所谓“理解”,就是要弄明白几个公式是怎么推导出来的。 鉴于这种情况,我们先把本篇文章的核心思路捋清楚,然后再去搞细节,不然很容易稀里糊涂地陷入繁琐的公式推导当中去,相信各位以前应该都有过这种体会,每一个公式都看得懂,但是连在一起就不知道它为什么
1. 前言 在自动驾驶或机器人领域,我们目前接触最多的惯性器件就是MEMS了,偶尔会接触到采集车里的光纤惯导。这是我们处在这个行业所看到的情况,但其实它只是惯性领域的局部,把局部放在全局里去看,会对它有更深的理解。为了做到这一点,我们需要在横向上了解还有哪些其它的惯性器件,在纵向上了解每种器件的发展历史。 2. 发展历史 惯性技术的发展史,本质上就是惯性器件的发展史。惯导系统的每一次突破,都是从惯
《多传感器融合定位理论基础》是《从零开始做自动驾驶定位》系列的第二阶段,这一阶段的文章是根据我之前在《泡泡机器人》公众号上写的《组合导航系列文章》重新修改而来。 在这里必须向《泡泡机器人》的读者道歉,当时写那几篇系列文章时,我的认真度不够,尤其到了后期,交了几篇潦草的稿子,干货太少,浪费了各位读者的宝贵时间。这件事后来让我非常自责,这是我在那段时间里,在技术上做过的最后悔的一件事,一直耿耿于怀,心
积分
粉丝
勋章
TA还没有专栏噢
第三方账号登入
看不清?点击更换
第三方账号登入
QQ 微博 微信