• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

c++学习16System.cc的SLAM.TrackMonocular(im,tframe)

武飞扬头像
m0_46973820
帮助5

类对象mpTracker、mpLocalMapper、mpLoopCloser都是十分重要的,是整个系统最最核心的3个类对象

  1.  
    //输入为单目图像时的追踪器接口
  2.  
    cv::Mat System::TrackMonocular(const cv::Mat &im, const double &timestamp)
  3.  
    {
  4.  
    /*1、判断传感器的类型是否为单目模式,如果不是,则表示设置错误,函数直接返回
  5.  
     
  6.  
    2、上锁 模式锁(mMutexMode):
  7.  
    (1)如果目前需要激活定位模式,则请求停止局部建图,并且等待局部建图线程停止,设置为仅追踪模式。
  8.  
    (2)如果目前需要取消定位模式,则通知局部建图可以工作了,关闭仅追踪模式
  9.  
     
  10.  
    3、上锁 复位锁(mMutexReset): 检查是否存在复位请求,如果有,则进行复位操作
  11.  
     
  12.  
    4、核心部分: 根据输入的图像获得相机位姿态(其中包含了特征提取匹配,地图初始化,关键帧查询等操作)
  13.  
     
  14.  
    5、进行数据更新,如追踪状态、当前帧的地图点、当前帧矫正之后的关键点等。*/
  15.  
     
  16.  
     
  17.  
    //4、获取相机位姿的估计结果
  18.  
    cv::Mat Tcw = mpTracker->GrabImageMonocular(im,timestamp);
  19.  
     
  20.  
    unique_lock<mutex> lock2(mMutexState);
  21.  
     
  22.  
    //5、
  23.  
    mTrackingState = mpTracker->mState;
  24.  
    mTrackedMapPoints = mpTracker->mCurrentFrame.mvpMapPoints;
  25.  
    mTrackedKeyPointsUn = mpTracker->mCurrentFrame.mvKeysUn;
  26.  
     
  27.  
    return Tcw;
  28.  
    }
学新通

mpTracker的初始化

  1.  
    mpTracker = new Tracking(this, //
  2.  
    mpVocabulary, //字典
  3.  
    mpFrameDrawer, //帧绘制器
  4.  
    mpMapDrawer, //地图绘制器
  5.  
    mpMap, //地图
  6.  
    mpKeyFrameDatabase, //关键帧地图
  7.  
    strSettingsFile, //设置文件路径
  8.  
    mSensor); //传感器类型iomanip
  1.  
    cv::Mat Tracking::GrabImageMonocular(const cv::Mat &im,const double &timestamp)
  2.  
    {
  3.  
    mImGray = im;
  4.  
     
  5.  
    // Step 1 :将彩色图像转为灰度图像
  6.  
    //若图片是3、4通道的,还需要转化成灰度图
  7.  
     
  8.  
    // Step 2 :构造Frame
  9.  
    //判断该帧是不是初始化
  10.  
    mCurrentFrame = Frame(
  11.  
    mImGray,
  12.  
    timestamp,
  13.  
    mpORBextractorLeft, //正常运行的时的ORB特征点提取器,提取指定数目特征点
  14.  
    mpORBVocabulary,
  15.  
    mK,
  16.  
    mDistCoef,
  17.  
    mbf,
  18.  
    mThDepth);
  19.  
     
  20.  
     
  21.  
    // Step 3 :跟踪
  22.  
    Track();
  23.  
     
  24.  
    //返回当前帧的位姿
  25.  
    return mCurrentFrame.mTcw.clone();
  26.  
    }
学新通

GrabImageMonocular 函数中,最核心的部分在于 Track() 函数。但是其上的 Frame 创建也是十分重要的,其中做了很多追踪需要的预备工作,如图像金字塔、特征提取,关键点矫正、特征点均匀分布等操作

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfieaka
系列文章
更多 icon
同类精品
更多 icon
继续加载