
ORB-SALM2
英雄小摔哥
怕什么真理无穷,进一寸有一寸的欢喜
展开
-
ORB-SLAM2学习笔记——闭环检测DetectLoop
ORB-SLAM2学习笔记——闭环检测DetectLoop1、理论部分2、代码详解#include "KeyFrameDatabase.h"#include "KeyFrame.h"#include "Thirdparty/DBoW2/DBoW2/BowVector.h"#include<mutex>using namespace std;namespace ORB_SLAM2{KeyFrameDatabase::KeyFrameDatabase (const O原创 2021-04-16 11:19:19 · 907 阅读 · 0 评论 -
ORB-SLAM2学习笔记——EssentialGraph优化
1、理论部分(待更新)2、代码详解//BRIEF 闭环检测后,EssentialGraph优化//OptimizeEssentialGraph会在成功进行闭环检测后,全局BA优化前进行/** * BRIEF 闭环检测后,EssentialGraph优化 * * 1. Vertex: * - g2o::VertexSim3Expmap,Essential graph中关键帧的位姿 * 2. Edge: * - g2o::EdgeSim3(),BaseBinaryEdge原创 2021-04-11 11:45:10 · 1056 阅读 · 0 评论 -
ORB-SLAM2学习笔记——闭环时Sim3优化
ORB-SLAM2学习笔记——闭环时Sim3优化1、理论部分(待更新)2、代码详解//BRIEF 形成闭环时进行Sim3优化//sim3用于回环检测时计算关键帧与回环帧之间的关系 R 、t、 s//相似变换群sim3int Optimizer::OptimizeSim3(KeyFrame *pKF1, //关键帧1 KeyFrame *pKF2, //关键帧2 vector<Ma原创 2021-04-08 11:57:43 · 751 阅读 · 0 评论 -
ORB-SLAM2学习笔记——全局BA优化
ORB-SLAM2学习笔记——全局BA优化1、理论部分(待更新)2、代码详解void Optimizer::GlobalBundleAdjustemnt(Map* pMap, int nIterations, bool* pbStopFlag, const unsigned long nLoopKF, const bool bRobust){ //获取所有的关键帧和地图特征代点 vector<KeyFrame*> vpKFs = pMap->GetAllKeyFra原创 2021-04-07 11:34:22 · 2120 阅读 · 0 评论 -
ORB-SLAM2学习笔记——局部BA优化
ORB-SLAM2学习笔记——局部BA优化1、理论部分(待更新)2、代码详解void Optimizer::LocalBundleAdjustment(KeyFrame *pKF, bool* pbStopFlag, Map* pMap){ // 该优化函数用于LocalMapping线程的局部BA优化 //step 1 : 得到所有局部关键帧 //step 2 : 得到所有地图点 //step 3 : 把关键帧和能看到的地图点对应到一起 //step原创 2021-04-07 11:29:58 · 2794 阅读 · 0 评论 -
ORB-SLAM2学习笔记——BundleAdjustment函数
BundleAdjustment函数1、理论部分(待更新)2、代码详解//BA优化// BundleAdjustment( vpKFs //关键帧 ,vpMP //地图点 ,nIterations //迭代次数 ,pbStopFlag //停止标志 , nLoopKF //回环帧数量 , bRobu原创 2021-03-28 11:18:54 · 1268 阅读 · 0 评论 -
ORB-SLAM2学习笔记——epnp求解(代码好长阿)
epnp求解1、理论部分2、代码部分(作者牛pi)//对pnp求解后值进行保存PnPsolver::PnPsolver(const Frame &F, const vector<MapPoint*> &vpMapPointMatches): pws(0), us(0), alphas(0), pcs(0), maximum_number_of_correspondences(0), number_of_correspondences(0), mnInliersi(原创 2021-03-25 11:33:52 · 846 阅读 · 0 评论 -
ORB-SLAM2学习笔记——重定位过程
Relocalization函数1 、理论部分(待更新)2、代码部分bool Tracking::Relocalization(){ // Compute Bag of Words Vector //计算当前帧特征点的词袋映射 mCurrentFrame.ComputeBoW(); // Relocalization is performed when tracking is lost // Track Lost: Query KeyFrame Databa原创 2021-03-17 16:01:08 · 1311 阅读 · 0 评论 -
ORB_SLAM2 学习笔记(1)——总框架
ORB_SLAM2 学习笔记(1)——总框架说明:笔记主要参考视觉slam十四讲以及该博主的讲解一步步带你看懂orbslam2源码感谢各位前辈的无私奉献。orb_slam2总共三个线程(1)Tracking:负责提取orb特征;估计相机位姿;判断关键帧的插入。(2)Local Mapping: 负责处理新的关键帧;进行局部优化更新位姿;创建新的地图点更新局部地图;剔除多余关键帧。(3)Loop Closing: 负责回环检测,工具:DBOW视觉词袋;全局地图优化,减少累积误差。orb_slam原创 2021-02-20 12:16:56 · 355 阅读 · 0 评论 -
ORB_SLAM2学习笔记(2)——特征提取
ORB_SLAM2学习笔记(2)——特征提取本文主要参考slam十四讲,顺序参考一步步带你看懂orbslam2源码下面函数为单目Tracking线程的接口(文件momo_tum.cc中): // Pass the image to the SLAM system整个系统的核心所在,负责实时跟踪输入图片, SLAM.TrackMonocular(im,tframe);//输入的是图片和时间下面为图形控制界面,控制是否激活定位模式和是否系统复位功能代码如下(文件Sy原创 2021-02-21 16:56:40 · 766 阅读 · 0 评论 -
ORB_SLAM2学习笔记(3)——单目初始化(1)
ORB_SLAM2学习笔记(2)——单目初始化原创 2021-02-23 15:39:11 · 326 阅读 · 0 评论 -
ORB_SLAM2学习笔记(3)之 单目初始化(初始化地图)
ORB_SLAM2学习笔记(3)之 单目初始化(2)原创 2021-03-03 12:28:31 · 346 阅读 · 0 评论 -
ORB_SLAM2学习笔记——ReconstructH函数
1、理论部分2、ReconstructH 代码部分1、理论部分2、ReconstructH 代码部分//从本质矩阵中恢复出R t;bool Initializer::ReconstructH(vector<bool> &vbMatchesInliers, cv::Mat &H21, cv::Mat &K, cv::Mat &R21, cv::Mat &t21, vector<cv::P原创 2021-03-13 12:34:35 · 1420 阅读 · 5 评论 -
ORB-SLAM2学习笔记——Initialize函数
Initialize////mvIniMatches:帧1特征点在帧2中的匹配//Rcw,tcw:待求相机位姿//mvIniP3D:成功匹配点的空间3D坐标//vbTriangulated:成功三角测量--ture,三角测量失败--falsebool Initializer::Initialize(const Frame &CurrentFrame, const vector<int> &vMatches12, cv::Mat &R21, cv::Mat &am原创 2021-03-13 12:49:11 · 783 阅读 · 1 评论 -
ORB-SLAM2学习笔记—— FindHomography函数
FindHomographyvoid Initializer::FindHomography(vector<bool> &vbMatchesInliers, float &score, cv::Mat &H21){ // Number of putative matches const int N = mvMatches12.size(); // Normalize coordinates vector<cv::Point2f&原创 2021-03-13 12:47:53 · 1751 阅读 · 0 评论 -
ORB-SLAM2学习笔记——Triangulate三角化函数
1、 理论部分看图然后能得到下式,用第三个与前两个结合求解:u=λP0Xv=λP1X1=λP2X2、代码部分//三角化//将空间点投影到两个相机平面void Initializer::Triangulate(const cv::KeyPoint &kp1, const cv::KeyPoint &kp2, const cv::Mat &P1, const cv::Mat &P2, cv::Mat &x3D){ //构造A矩阵,用于求解空间点原创 2021-03-14 11:12:50 · 1294 阅读 · 0 评论 -
ORB-SLAM2学习笔记——ComputeH21函数、ComputeF21函数
1、ComputeH21函数cv::Mat Initializer::ComputeH21(const vector<cv::Point2f> &vP1, const vector<cv::Point2f> &vP2){ const int N = vP1.size(); cv::Mat A(2*N,9,CV_32F); for(int i=0; i<N; i++) { //提取像素点坐标,归一化平面上的原创 2021-03-14 11:37:31 · 613 阅读 · 0 评论 -
ORB-SLAM2学习笔记——CheckHomography函数
1、理论部分主要作用:计算误差,剔除外点,计算分数代码部分//去除外点,并计算分数float Initializer::CheckHomography(const cv::Mat &H21, const cv::Mat &H12, vector<bool> &vbMatchesInliers, float sigma){ //匹配的点对数量 const int N = mvMatches12.size(); //提取本质矩阵中的值原创 2021-03-14 11:47:59 · 551 阅读 · 0 评论 -
ORB-SLAM2学习笔记——利用词袋加速匹配
TrackReferenceKeyFrame函数1、理论部分大致意思就是在匹配过程中,利用词袋进行描述子的匹配,不再需要以往一样去匹配每一对描述子,利用词袋里的树结构找到最相似的描述子,层层匹配,大大提高了匹配速度2、代码部分bool Tracking::TrackReferenceKeyFrame(){ // Compute Bag of Words vector //将当前帧的描述子转化为BoW向量 mCurrentFrame.ComputeBoW(); //原创 2021-03-15 14:49:49 · 718 阅读 · 0 评论 -
ORB-SLAM2学习笔记——带有运动模型的跟踪匹配
TrackWithMotionModel函数1、理论部分.假设俩帧之间是匀速运动,根据这个条件来缩小匹配范围,加速匹配减少计算量。2、代码部分//带有运动模型的跟踪bool Tracking::TrackWithMotionModel(){ //匹配点大于90%的总数 ORBmatcher matcher(0.9,true); // Update last frame pose according to its reference keyframe //根据参原创 2021-03-15 14:54:13 · 472 阅读 · 0 评论