vins博客的一部分4

processMeasurements()

取出数据
将 featureBuf中,最早帧的feature取出:feature = featureBuf.front()

节点的接收IMU的消息再imu_callback中被放到了accBufgryBuf里,以{t,值}的形式存储。
上一帧时间为prevTime,本帧的时间为curTime,用getIMUInterval()将该时间段内的IMU数据取出来存到accVector, gyrVector中(然后Buf就pop掉取过的):

getIMUInterval(prevTime, curTime, accVector, gyrVector);

初始化
如果尚未对IMU初始化,先用initFirstIMUPose(accVector)对齐重力,详见initFirstIMUPose

imu预积分

然后IMU预积分(输入为:时间 时间间隔 加速度(就当前一个值) 角速度(就一个值)),详见processIMU

for(size_t i = 0; i < accVector.size(); i++)IMU预积分(prevTime到curTime之间)
{
	dt = accVector[i].first - accVector[i - 1].first;//求两个imu测量的时间间隔
    processIMU(accVector[i].first, dt, accVector[i].second, gyrVector[i].second)
}

vins剩余部分

然后处理图像,包括检测关键帧,估计外部参数,初始化,状态估计,划窗等等,详见processImage

processImage(feature.second, feature.first)//输入:[id(id,xyz_uv_vxvy)], 时间

processImage得到位姿之后,进行发布

pubOdometry(*this, header);		//odom和path,即Ps[WINDOW_SIZE]
pubKeyPoses(*this, header);		//本次优化的10个关键帧位姿
pubCameraPose(*this, header);	//WINDOW_SIZE - 1的相机位姿
pubPointCloud(*this, header);	//所有的特征点
pubKeyframe(*this);				//WINDOW_SIZE - 2的odom、出现次数满足要求的特征点
pubTF(*this, header);			//发布Ps[WINDOW_SIZE],Rs[WINDOW_SIZE];
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值