ORB-SLAM3 Tracking类源码分析(一)
程序员文章站
2024-01-04 12:27:41
...
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
}