GVINS文件夹下分为cameral_model,config,docker,estimator,feature_tracker
重点是特征跟踪器(feature_tracker)跟状态估计器(estimator)
一般特征跟踪器的作用是负责相机图像的特征提取和跟踪,以及与状态估计器之间的通信。
状态估计器负责整体的状态估计算法和优化过程。
特征跟踪器里有feature_tracker的三个文件,parameters的两个文件以及计算各模块运行时间的tic_toc文件
参数头文件
参数cpp文件:
#include "parameters.h"
//用于存储从配置文件中读取到的图像话题、IMU数据话题、相机名称和鱼眼遮罩路径。
std::string IMAGE_TOPIC;
std::string IMU_TOPIC;
std::vector<std::string> CAM_NAMES;
std::string FISHEYE_MASK;
//用于存储从配置文件中读取到的各种参数值
int MAX_CNT;//最大特征点数
int MIN_DIST;//最小距离
int WINDOW_SIZE;//窗口大小
int FREQ;//频率
double F_THRESHOLD;//特征点阈值
int SHOW_TRACK;//显示跟踪结果
int STEREO_TRACK;//双目跟踪
int EQUALIZE;//均衡化
int ROW;//行
int COL;//列
int FOCAL_LENGTH;//焦距
int FISHEYE;//鱼眼相机
bool PUB_THIS_FRAME;//发布当前帧数据
template <typename T>
T readParam(ros::NodeHandle &n, std::string name)
{//用于读取ROS节点参数。它接受一个 ros::NodeHandle 对象和一个参数名作为输入,并返回读取到的参数值。
T ans;
if (n.getParam(name, ans))
{
ROS_INFO_STREAM("Loaded " << name << ": " << ans);
}
else
{
ROS_ERROR_STREAM("Failed to load " << name);
n.shutdown();
}
return ans;
}
void readParameters(ros::NodeHandle &n)
{//读取配置文件中的参数,并将其赋值给上述的全局变量。
std::string config_file;
config_file = readParam<std::string>(n, "config_file");//使用 readParam() 函数读取配置文件路径
cv::FileStorage fsSettings(config_file, cv::FileStorage::READ);//使用OpenCV的 FileStorage 类读取配置文件中的其他参数,并将它们赋值给对应的全局变量。
if(!fsSettings.isOpened())
{
std::cerr << "ERROR: Wrong path to settings" << std::endl;
}
std::string GVINS_FOLDER_PATH = readParam<std::string>(n, "gvins_folder");//使用 readParam() 函数读取GVINS文件夹路径
fsSettings["image_topic"] >> IMAGE_TOPIC;
fsSettings["imu_topic"] >> IMU_TOPIC;
MAX_CNT = fsSettings["max_cnt"];
MIN_DIST = fsSettings["min_dist"];
ROW = fsSettings["image_height"];
COL = fsSettings["image_width"];
FREQ = fsSettings["freq"];
F_THRESHOLD = fsSettings["F_threshold"];
SHOW_TRACK = fsSettings["show_track"];
EQUALIZE = fsSettings["equalize"];
FISHEYE = fsSettings["fisheye"];
if (FISHEYE == 1)
FISHEYE_MASK = GVINS_FOLDER_PATH + "config/fisheye_mask.jpg";
CAM_NAMES.push_back(config_file);
WINDOW_SIZE = 20;
STEREO_TRACK = false;
FOCAL_LENGTH = 460;
PUB_THIS_FRAME = false;
if (FREQ == 0)
FREQ = 100;
fsSettings.release();
}