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

vins博客的一部分2

程序员文章站 2022-03-26 15:52:47
...

sync_process()

对两个imgBuf里的图像进行双目时间匹配(通过判断双目图像时间之差 <3ms),扔掉匹配不到的老帧。

double time0 = img0_buf.front()->header.stamp.toSec();//front 返回值为队列中的第一个元素,也就是最早、最先进入队列的元素
double time1 = img1_buf.front()->header.stamp.toSec();
if(time0 < time1 - 0.003)
{
    img0_buf.pop(); //如果img0里最靠前的元素太老了,就出队列:先进先出
}
else if(time0 > time1 + 0.003)
{
    img1_buf.pop();//如果img1里最靠前的元素太老了,就出队列
}

不断丢弃老帧,直到image0image1能匹配的上。然后将双目图像,时间戳输入到估计器中,然后进行光流法跟踪等一系列后续计算。inputImage如下。

estimator.inputImage(time, image0, image1);

sync_process()到此结束

Estimator::inputImage()

首先按照如下格式建立图像特征帧,存储每一帧的所有特征点的信息(camera_id xyz_uv_velocity)

map<int, vector<pair<int, Eigen::Matrix<double, 7, 1>>>> featureFrame;
// 数据格式为feature_id camera_id(0或1) xyz_uv_velocity(空间坐标,像素坐标和像素速度)

然后帧间光流法跟踪、检测特征点、左右目光流法匹配、计算像素速度、画图等,详见trackImage

featureFrame = featureTracker.trackImage(t, _img, _img1)
//追踪双目,得到FeatureFrame:{特征点id, [相机id, (特征点空间坐标,像素坐标,像素速度)]}的集合

写到这儿~~~~~~~~~~~~~~~
如果要画图,用featureTracker.getTrackImage()得到trackImage()中处理的imTrack(左右目的拼接图、画上特征点、帧间变化轨迹),然后发布话题.

trackImage得到的特征点featureFrame,和时间戳组成pair,放到featureBuf中:

featureBuf.push(make_pair(t, featureFrame));//按照{时间,featureFrame}往featureBuf中填元素

最后执行imu预积分等后续操作:

processMeasurements()

processMeasurements

相关标签: vins