欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ORB-SLAM3 Tracking类源码分析(一)

程序员文章站 2024-01-04 12:27:41
...

[email protected]

tracking部分主要实现的是:
1、提取ORB 特征(提取ORB (关键点)keypoints和ORB descriptor)
2、初始化
3、获得初始的Pose
4、在Track Local Map中优化获得的Pose
5、判断当前帧是否被选为Keyframe(关键帧)

在整体代码中,tracking的实现部分都在Track()这个成员函数中。

一、首先介绍一下Tracking的构造函数

1.读取相机参数

2.加载ORB参数,读取ORB特征提取的相关参数

3.读取imu参数


{
    // 从设置文件加载相机参数
    cv::FileStorage fSettings(strSettingPath, cv::FileStorage::READ);//只读
    //读取相机参数
    //如果是ROS,DepthMapFactor应该设为1,即深度不进行缩放
    bool b_parse_cam = ParseCamParamFile(fSettings);
    if(!b_parse_cam)
    {
        std::cout << "*Error with the camera parameters in the config file*" << std::endl;
    }
    //加载ORB参数
    //读取ORB特征提取的相关参数,在此函数中会根据参数构造ORB提取器mpORBextractorLeft(左目)、mpORBextractorRight(右目)、mpIniORBextractor(初始化用)
    bool b_parse_orb = ParseORBParamFile(fSettings);
    if(!b_parse_orb)
    {
        std::cout << "*Error with the ORB parameters in the config file*" << std::endl;
    }
    initID = 0; lastID = 0;
    // Load IMU parameters
    bool b_parse_imu = true;
    if(sensor==System::IMU_MONOCULAR || sensor==System::IMU_STEREO)
    {
        //读取imu参数,在此函数中会根据参数构建预积分处理器mpImuPreintegratedFromLastKF
        b_parse_imu = ParseIMUParamFile(fSettings);
        if(!b_parse_imu)
        {
            std::cout << "*Error with the IMU parameters in the config file*" << std::endl;
        }
        mnFramesToResetIMU = mMaxFrames;
    }
    mbInitWith3KFs = false;
    mnNumDataset = 0;
    if(!b_parse_cam || !b_parse_orb || !b_parse_imu)
    {
        std::cerr << "**ERROR in the config file, the format is not correct**" << std::endl;
        try
        {
            throw -1;
        }
        catch(exception &e)
        {

        }
    }
#ifdef SAVE_TIMES
    f_track_times.open("tracking_times.txt");
    f_track_times << "# ORB_Ext(ms), Stereo matching(ms), Preintegrate_IMU(ms), Pose pred(ms), LocalMap_track(ms), NewKF_dec(ms)" << endl;
    f_track_times << fixed ;
#endif
}

上一篇:

下一篇: