目录
前言
在vins前端中主要包含图像光流追踪和imu预积分两部分。光流追踪主要是为了实现追踪相邻两帧图像的相同地图点信息,以供后端求解两帧图像之间的位姿变换。对于相邻两帧图像求得匹配的地图点有两种方案,一种是进行特征点提取,然后根据描述子进行特征匹配;另一种就是光流追踪法,基于灰度不变假设通过求解特征点的运动速度进而估计匹配的特征点像素坐标。在前端feature_tracker_node节点中,主要实现了该功能,还包含了一些其他的细节问题。在vins-fusion中,光流追踪放到了和后端优化同一个节点中。本篇内容详细介绍一下在前端光流追踪节点vins-mono都做了哪些工作。
feature_tracker_node详解
准备工作
1.读取参数
在前端中包含很多vins-mono的系统参数,这些参数是通过读取参数文件获得的。前端主要包含的参数如下面代码所示:
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 = VINS_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;
从上到下依次是原始图像话题名称、imu数据话题名、提取特征点的最大个数、提取特征点的最小像素距离、图像的高度和宽度、前端发布的频率、ransac除杂的像素阈值、是否显示轨迹、是否进行直方图均衡标志位、鱼眼相机标志位。后面其他参数直接在程序里面设置,比较重要的是FOCAL_LENGTH=460,这是虚拟焦距,具体作用在后面有解释。
2.生成相机模型
通过trackerData[i].readIntrinsicParameter(CAM_NAMES[i])生成一个相机模型,先从参数文件读取相机类型,vins-mono中是针孔模型。然后再将参数文件中的相机参数赋给该相机模型,该过程在函数CameraPtr
CameraFactory::generateCameraFromYamlFile(const std::string& filename)完成。此外,该函数内还包含camera->setParameters(params)函数,主要是记录一些中间变量,这些中间变量是为了去畸变部分使用。
img_callback()详解
该部分是前端处理的主要函数,实现的功能是计算出特征点的相关信息。
- 第一帧图像进来,存储第一帧信息,不进行其他处理;
- 判断图像时间流是否正常;
- 控制发布频率小于100Hz;
- 将ros格式图像转化成opencv格式;
- 进入光流追踪及特征点相关信息计算,trackerData[i].readImage(ptr->image.rowRange(ROW * i, ROW * (i + 1)), img_msg->header.stamp.toSec());
该函数第一个参数是确定图像的行的范围,这是为了双目做准备,对于单目相机i就是0,第二个参数是图像的时间戳。函数具体实现的功能下面详细介绍:
- 自适应图像直方图均衡
该部分主要是为了解决在过亮或过暗情况下特征点提取困难问题。然而,在vins-fusion版本中,该功能被作者去掉了,可能是对于光流追踪的实际效果增益不大另外比较耗时。
- 第一帧图像,直接进行特
vins-mono前端光流追踪节点详解

本文详细介绍了vins-mono前端的feature_tracker_node,包括参数设置、相机模型生成、img_callback中的图像处理(包括自适应直方图均衡、特征点提取与追踪、去除外点和特征点速度计算),以及与光流追踪法和特征点+描述子方法的对比。
最低0.47元/天 解锁文章
2万+

被折叠的 条评论
为什么被折叠?



