
slam
文章平均质量分 87
potxxx
>_<
展开
-
ORB-SLAM论文学习
梳理了一下ORB-SLAM论文一、系统架构1、ORB特征整个SLAM系统使用改进后的ORB特征(256维二进制描述符的带方向的多尺度FAST角点)2、三个线程A、TRACKING跟踪线程:主要负责对每帧图像的相机位置进行定位和关键帧的插入B、LOCAL MAPPING局部地图构建模块:处理关键帧并对周围相机位姿进行局部BAC、LOOP DETECTION回环检测: 对每...原创 2018-11-04 13:57:24 · 1391 阅读 · 0 评论 -
VSLAM基础(九)————LK光流法与直接法
到目前slam前端部分基本快结束了~在这里再补上光流法与直接法。我们之前介绍的都是基于特征点并计算描述子匹配的思路找到同名像点,然后通过射影几何的方法计算相机姿态。这种方法大体上已经很完善了,当然还是存在一些问题:特征点的提取、描述、匹配仍是slam里最耗时的部分;在一些特征稀疏的场景下(如白墙),可能找不到足够的匹配点;于是,人们希望找到其他的方法来克服这种问题,有了以下的思路:一、...原创 2019-02-05 13:42:24 · 2186 阅读 · 1 评论 -
VSLAM基础(十)————卡尔曼滤波
在vslam中对于观测数据估计位姿进行优化的方式是我们之前有讲到的BA,那么卡尔曼滤波KF是什么呢?在BA方法没有被普遍使用的时候,基于KF的优化方法是主流,这里我们也来了解一下,虽然在如今的主流视觉slam方法里不再使用KF的方法,但是有IMU等多传感器融合的slam系统里KF仍然占有一席之地。一、卡尔曼滤波EF首先来引用两篇博客:https://www.jianshu.com/p/...原创 2019-02-07 16:12:32 · 827 阅读 · 2 评论 -
ORB-SLAM2源码学习(六)——数据存储与数据结构
看过了具体代码流程后,我们来看看ORB-SLAM2里主要的数据结构组织方式。作为slam系统,ORB-SLAM2里也为常规的数据储存结构。一、system作为系统对象主要保存了://包含所有的mappoints与keyframesMap* mpMap;//回环检测和重定位的词袋索引KeyFrameDatabase* mpKeyFrameDatabase;二、Map存...原创 2019-02-21 17:04:16 · 1138 阅读 · 0 评论 -
VSLAM基础(十一)————李群与李代数
slam里一般涉及到的数学知识也就大学本科学过的那些,除了这次我们要接触的李群与李代数,不过在slam里也只是用到了这个数学工具一部分内容,理清思路后也是很清楚。李群是具有连续(光滑)性质的群;它既是群也是流形;直观上看,一个刚体能够连续的在空间中运动,故SO(3)和SE(3)都是李群。(注:SO(3)是特殊正交群 SE(3)是特殊欧式群,由于旋转矩阵R是3乘3的维度,但自由度的约束只有3个自...原创 2019-02-16 19:40:40 · 871 阅读 · 0 评论 -
ORB-SLAM2源码学习(七)——DBoW2词袋模型
ORB-SLAM2里使用词袋模型来做重定向与回环检测,使用的是第三方库DBoW2。首先,有一个离线词袋ORBvoc.txt文件(ORB-SLAM2作者提供了一个他们训练好的词典),一般这个称之为词典,为了快速查询,以空间换时间建立了一个d层的K叉树来保存词典,树的叶子节点包含了每个单词及在词典里的权重。词典的加载//在System对象的初始化中 mpVocabulary...原创 2019-02-23 11:05:03 · 3260 阅读 · 0 评论 -
ORB-SLAM2源码学习(八)——图优化g2o
首先,ORBSLAM2里的优化都是基于图优化的,使用的第三方库为g2o,这里先介绍一下g2o简要使用流程,然后再来看看ORBSLAM2里的几个优化函数。一、g2og2o是一个图优化求解库,它将优化问题表现为图的形式:包含顶点和边。在slam问题里,BA中参与优化的参数有位姿和地图点坐标,在g2o中,我们将这些需要进行优化的变量设置为顶点,一般一张图像的位姿为一个顶点,这张图像上所能观察...原创 2019-02-23 16:59:53 · 2288 阅读 · 0 评论 -
ORB-SLAM2源码学习(一)——系统结构及System.cc
开始阅读学习ORB-SLAM2的源码了,在这里做个学习记录,另外也是督促自己的学习的更加深入。前言首先ORB-SLAM2作为一个完整的slam系统,作者即提供了论文也有对应的源码,它的github主页:https://github.com/raulmur/ORB_SLAM2系统包括了单目、双目、rgbd的实现,这里我主要学习单目slam系统,就以单目slam的流程来学习。另外感...原创 2019-02-13 17:50:28 · 1805 阅读 · 0 评论 -
ORB-SLAM2源码学习(二)——单目初始化Initializer.cc
在Tracking模块里,单目第一步流程为MonocularInitialization,而这个函数主要涉及到的是Initializer.cc。一、Initializer.h// THIS IS THE INITIALIZER FOR MONOCULAR SLAM. NOT USED IN THE STEREO OR RGBD CASE./** * @brief 单目SLAM初始化...原创 2019-02-13 19:42:13 · 678 阅读 · 0 评论 -
ORB-SLAM2源码学习(三)——跟踪Tracking.cc
作为ORB-SLAM2里三大线程中的第一个,Tracking线程接收传感器(摄像头)传来的每一帧,并将处理的关键帧传递给LocalMapping线程。Tracking线程其实是系统里的主线程,通过反复调用Track函数进行。Tracking模块主要完成了以下几件事情:单目地图的初始化 当前帧的位姿估计 当前帧的局部地图跟踪 生成候选关键帧一、Tracking构造函数之前有讲...原创 2019-02-14 16:44:44 · 1110 阅读 · 0 评论 -
VSLAM基础(七)————光束平差法Bundle Adjustment
上一篇我们讲了线性的超定方程的解法,这节我们就接着讲讲slam里非线性方程的优化方法。一、BA光束平差法偷个图:首先到底啥是BA呢?在slam前端中,我们通过匹配特征点、对极约束、三角化就可以恢复出相机姿态(R,t)与三维物点坐标(用X表示),这两数据是我们通过观测到的像点坐标(用Z表示)求得。但是实际情况中往往存在大量的噪声,点与点不是精确地对应甚至出现一些错误匹配。 这...原创 2019-02-04 17:12:32 · 15140 阅读 · 2 评论 -
VSLAM基础(八)————相机内参数理解
前面的章节有说过在vslam里相机的参数是已知的,也就是我们在相机模型那一篇里描述的相机内参与几个畸变参数。在我们使用安装好一个相机后,它的内参与畸变参数基本是不会变化的,也就是说我们可以提前求出这些系数,这就是相机标定的过程。当然单目相机标定也有了很多成熟的方法,这不是本篇的重点,感兴趣的可以参考一下这篇文章:https://blog.youkuaiyun.com/lxy_2011/article/...原创 2019-02-04 20:13:22 · 1049 阅读 · 0 评论 -
VSLAM基础(一)————常见特征点提取算法及匹配优化
过年期间闲来无事,就想来把这半年学习的一些视觉知识(视觉slam相关)做个梳理,就以这篇图像特征点提取与匹配作为开头吧。一、关键点与描述子关键点:图像上某些特殊的、具有代表的点(常见表示就是图像上的横纵坐标、主方向、尺度等)。描述子:用一些数学方法描述关键点(常见表示是n维向量)。1)harris角点检测角点原理来源于人对角点的感性判断,即图像在各个方向灰度有明显变化。算法的核...原创 2019-02-02 14:44:06 · 11924 阅读 · 0 评论 -
VSLAM基础(二)————相机模型及视觉坐标系
继续上一篇,这篇讲一讲视觉slam里涉及到的相机模型以及用于描述的各种视觉坐标系。由于所学的是单目slam,所以这篇重点在于针孔相机模型及其畸变模型。一、针孔相机模型针孔相机模型是一个用来将三维世界坐标点映射到二维图像坐标的有效模型。小孔成像模型是相机成像采用最多的模型。在此模型下,物体的空间坐标和图像坐标之间是线性的关系,因而对相机参数的求解就归结到求解线性方程组上。四个坐...原创 2019-02-02 20:15:09 · 2163 阅读 · 0 评论 -
VSLAM基础(三)————对极几何中的基础矩阵F、本质矩阵E、单应矩阵H
在上一篇中,讲到了可以通过相机矩阵P(P=K[R|t])将三维点的世界坐标投影到图像像素坐标。而一般vslam问题中P矩阵并不是已知的(R,t未知),于是我们需要通过其他方法求得R,t,这就需要用到对极几何中的知识。一、对极几何那么什么是对极几何?对极几何(Epipolar Geometry)描述的是两幅视图之间的内在射影关系,与外部场景无关,只依赖于摄像机内参数和这两幅视图之间的的相...原创 2019-02-03 14:54:26 · 4920 阅读 · 1 评论 -
VSLAM基础(四)————RANSAC、最小二乘法、DLT
到目前为止,我们已经知道怎么由一系列图像得到它们之间的相对姿态了,在这里暂停一下,插入这篇讨论一下RANSAC、最小二乘、DLT。一、RANSAC随机抽样一致算法在vslam中通过对图像进行特征点匹配,然后根据匹配点坐标计算恢复出图像相对姿态。但是匹配会存在误匹配,数据也存在噪声,那么怎么在包含错误点的数据内获得我们想要的最优解呢?我们用到了RANSAC随机抽样一致算法。RANSAC是...原创 2019-02-03 16:12:48 · 1978 阅读 · 0 评论 -
VSLAM基础(五)————三角化、PnP、ICP
在之前的章节中我们获得了同名像点从而恢复相片的姿态,接下来就该轮到vslam前端中最后一部分————计算三维点坐标(三角化),并通过三维坐标预测姿态(PnP)。一、三角化在单目slam中仅通过单张图像无法获得像素的深度信息,所以我们需要通过三角测量(Triangulation)的方法来估计地图的深度。一般情况是当我们得到两个视图的一组匹配点,我们希望能恢复出世界点在三维世界的坐标。这里...原创 2019-02-03 18:19:50 · 2582 阅读 · 0 评论 -
ORB-SLAM2源码学习(四)——局部建图LocalMapping.cc
LocalMapping线程具体为一个run线程函数,其主要流程为:插入关键帧 剔除不合格MapPoints 生成新MapPoints并局部BA 删除冗余关键帧 当前帧加入闭环队列中void LocalMapping::Run(){ mbFinished = false; while(1) { // Tracking will s...原创 2019-02-14 22:47:37 · 1075 阅读 · 0 评论 -
ORB-SLAM2源码学习(五)——回环检测LoopClosing.cc
同局部构图模块一样回环检测模块同样是存在一个线程函数run;void LoopClosing::Run(){ mbFinished =false; while(1) { // Check if there are keyframes in the queue // Loopclosing中的关键帧是LocalMapping发送过...原创 2019-02-15 00:13:01 · 1246 阅读 · 0 评论 -
VSLAM基础(六)————超定线性方程组的解法
vslam前端部分基本讲完了,这里在进入后端之前,先讨论下超定线性方程组的解法,毕竟在slam问题里我们经常会遇到要解超定方程的时候。当然这篇只是介绍一下超定线性方程的解法,非线性方程等到介绍BA时再写吧。一、Ax=b的解法对于A矩阵n*m时,一般若n大于m,我们就说这个方程为超定没有解,当然我们slam里一般关心最小二乘解。线性方程组可能无解。即任意一组 都可能使...原创 2019-02-03 22:53:26 · 6751 阅读 · 0 评论