ORB SLAM2学习笔记之mono_kitti(四)

本文详细解析ORB SLAM2中的MonocularInitialization过程,包括Track函数、单目初始化、特征匹配、基础矩阵与单应性矩阵计算、3D点三角化,以及关键帧与地图点的创建和优化。
摘要由CSDN通过智能技术生成

探索Track函数之MonocularInitialization(单目初始化)

Tracking.cpp里面的Track()函数可以说是 Tracking 线程最主体部分了,来看看调用Track()函数的过程:
在这里插入图片描述
Tracking线程中初始化函数用的是MonocularInitialization(),在第一次进入这个函数之前,初始化了mpInitializer(单目初始器)赋值为null,所以一开始会进入下面的if语句:

void Tracking::MonocularInitialization()
{
   

    //(第一次进入函数时)初始化tracking时赋了null
    //(第二次进入函数时)第一次新建了mpInitializer,所以执行else
    if(!mpInitializer)
    {
   
        // Set Reference Frame
        // 单目初始帧的特征点数必须大于100
        if(mCurrentFrame.mvKeys.size()>100)
        {
   

            //初始化mono的时候,初始帧和上一帧都是当前帧赋值
            mInitialFrame = Frame(mCurrentFrame);
            mLastFrame = Frame(mCurrentFrame);

            // mvbPrevMatched最大的情况就是所有特征点都被跟踪上
            mvbPrevMatched.resize(mCurrentFrame.mvKeysUn.size());
            for(size_t i=0; i<mCurrentFrame.mvKeysUn.size(); i++)
                mvbPrevMatched[i]=mCurrentFrame.mvKeysUn[i].pt;

            if(mpInitializer)
                delete mpInitializer;

            // 这里实例化Initialize类的一个对象指针,初始化的值为选取的当前帧和测量误差1.0,RANSAC迭代次数200
            mpInitializer =  new Initializer(mCurrentFrame,1.0,200);

            fill(mvIniMatches.begin(),mvIniMatches.end(),-1);  //先都填上-1 现在还没匹配呢

            return;
        }
    }

第二次进入这个函数的时候已经创建了一个mpInitializer,所以会进入else语句:

    else
    {
   
        // Try to initialize
        if((int)mCurrentFrame.mvKeys.size()<=100)
        {
   
            delete mpInitializer;
            mpInitializer = static_cast<Initializer*>(NULL);
            fill(mvIniMatches.begin(),mvIniMatches.end(),-1);
            return;
        }

        // Find correspondences
        ORBmatcher matcher(0.9,true);

        // mvbPrevMatched为前一帧的特征点,存储了mInitialFrame中哪些点将进行接下来的匹配
        // mvIniMatches存储mInitialFrame,mCurrentFrame之间匹配的特征点,键值对是两帧匹配特征点的索引
        // mvbPrevMatched,mvIniMatches获得更新
        int nmatches = matcher.SearchForInitialization(mInitialFrame,mCurrentFrame,mvbPrevMatched,mvIniMatches,100);

        // Check if there are enough correspondences
        if(nmatches<100)
        {
   
            delete mpInitializer;
            mpInitializer = static_cast<Initializer*>(NULL);
            return;
        }

        cv::Mat Rcw; // Current Camera Rotation
        cv::Mat tcw; // Current Camera Translation
        vector<bool> vbTriangulated; // Triangulated Correspondences (mvIniMatches)

        //如果初始化成功,intializer得到Rcw, tcw
        if(mpInitializer->Initialize(mCurrentFrame, mvIniMatches, Rcw, tcw, mvIniP3D, vbTriangulated))
        {
   
            for(size_t i=0, iend=mvIniMatches.size(); i<iend;i++)
            {
   
                if(mvIniMatches[i]>=0 && !vbTriangulated[i])
                {
   
                    mvIniMatches[i]=-1;
                    nmatches--;
                }
            }

            // Set Frame Poses  初始帧也就是第一帧为世界坐标系,所以无需旋转平移
            mInitialFrame.SetPose(cv::Mat::eye(4,4,CV_32F));
            cv::Mat Tcw = cv::Mat::eye(4,4,CV_32F);

            //Tcw赋值给mCurrentFrame
            Rcw.copyTo(Tcw.rowRange(0,3).colRange(0,3));
            tcw.copyTo(Tcw.rowRange(0,3).col(3));
            mCurrentFrame.SetPose
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: ORB-SLAM2_with_semantic_label是一种基于ORB-SLAM2的视觉SLAM系统,它使用语义标签信息来增强场景理解和地图构建。该系统通过将每个地图点与语义标签相对应,从而为地图中的每个区域提供更多的上下文信息。这有助于提高系统的鲁棒性和场景理解能力,并可以在机器人导航、自动驾驶等领域得到广泛应用。 ### 回答2: ORB-SLAM2是一种视觉SLAM算法,可以实现从单个或多个摄像头的图像序列中实时重建3D地图,同时在该地图中定位相机。它广泛应用于机器人导航、增强现实、自动驾驶等领域。然而,在某些现实场景中,例如室内场景、城市环境等,只有3D地图是不够的,需要利用语义信息来更好地理解环境。 因此,ORB-SLAM2的研究人员进行了扩展,开发了一种ORB-SLAM2_with_semantic_label算法,以结合视觉SLAM和语义信息。该算法的目标是在ORB-SLAM2中增加对语义信息的支持,从而允许机器理解其所在环境中的物体及其特征。该算法的一个重要应用是在机器人导航中,机器人可以利用语义标签对其周围环境进行更准确、更可靠的理解,从而更好地规划路径。 该算法的关键步骤包括以下几个方面。首先,需要将语义分割模型与ORB-SLAM2进行集成,产生语义标记的地图,这可以在ORB-SLAM2映射初始化期间完成。其次,需要利用深度学习技术提取图像的语义特征,用于在传统视觉SLAM系统中增加语义信息。接着,需要将ORB-SLAM2中的回环检测模块改进,以考虑语义信息来消除误报。最后,需要使用机器学习算法,通过对特定环境中所遇到的物体的历史观测进行学习,从而使机器人能够在不同环境中尽可能准确地识别物体。 该算法的优点是可以在不增加太多计算量的情况下增加语义信息,从而使机器能够自然地与人类进行交互。但是,该算法的缺点是需要对语义标注数据进行精确的手动标注,这是一项非常耗时的任务。此外,该算法对光照和尺度变化非常敏感,因此在实际应用中需要特别注意。 ### 回答3: ORB-SLAM2是一种基于视觉SLAM技术的实时多目标跟踪和定位系统,它结合了ORB特征提取器和BoW词袋模型,使得系统具有高效的实时位姿估计能力。而ORB-SLAM2 with Semantic Label则是在ORB-SLAM2的基础上,加入了语义标签的支持。 语义标签是指对环境元素的分类标注,例如标注图像中的建筑、人、车等。加入语义标签的目的是提高系统对环境信息的理解和描述能力。在ORB-SLAM2 with Semantic Label中,可以通过在输入图像中标记语义标签信息,并将其存储到地图数据中,从而实现地图的语义化描述。同时,语义标签可以通过深度学习等技术来实现自动分类。 与传统的视觉SLAM系统相比,ORB-SLAM2 with Semantic Label可以更好地应对复杂的环境场景。在城市街道和室内场所等环境中,ORB-SLAM2 with Semantic Label可以对人、车辆和建筑等复杂元素进行识别,并在建立地图时,将这些语义信息一同存储在地图中。这样可以提供更为精确的地图信息,使得系统的位置估计更加准确、稳定。 总之,ORB-SLAM2 with Semantic Label是一种具有语义理解能力的SLAM系统,可以为机器人的自主导航和环境理解等方面的应用提供更为准确、可靠的基础支撑。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值