后端优化 | VINS-Mono 论文公式推导与代码解析分讲

后端优化 | VINS-Mono 论文公式推导与代码解析分讲

这是我们 SLAM 组同事高洪臣写的文章,感谢分享❤️❤️❤️~

3. 后端优化(紧耦合)

VIO 紧耦合方案的主要思路就是通过将基于视觉构造的残差项和基于IMU构造的残差项放在一起构造成一个联合优化的问题,整个优化问题的最优解即可认为是比较准确的状态估计。

为了限制优化变量的数目,VINS-Mono 采用了滑动窗口的形式,滑动窗口 中的 全状态量

优化过程中的误差状态量

进而得到系统优化的代价函数(Minimize residuals from all sensors)

其中三个残差项依次是

三种残差都是用 马氏距离(与量纲无关) 来表示的。

Motion-only visual-inertial bundle adjustment: Optimize position, velocity, rotation in a smaller windows, assuming all other quantities are fixed

3.1 IMU 测量残差

(1)IMU 测量残差

上面的IMU预积分(估计值 - 测量值),得到 IMU 测量残差

/**
 * [evaluate 计算IMU测量模型的残差]
 * @param Pi,Qi,Vi,Bai,Bgi  [前一次预积分结果]
 * @param Pj,Qj,Vj,Baj,Bgj  [后一次预积分结果]
 */
Eigen::Matrix<double, 15, 1> evaluate(
        const Eigen::Vector3d &Pi, const Eigen::Quaterniond &Qi, const Eigen::Vector3d &Vi, const Eigen::Vector3d &Bai, const Eigen::Vector3d &Bgi,
        const Eigen::Vector3d &Pj, const Eigen::Quaterniond &Qj, const Eigen::Vector3d &Vj, const Eigen::Vector3d &Baj, const Eigen::Vector3d &Bgj)
{
    Eigen::Matrix<double, 15, 1> residuals;

    Eigen::Matrix3d dp_dba = jacobian.block<3, 3>(O_P, O_BA);
    Eigen::Matrix3d dp_dbg = jacobian.block<3, 3>(O_P, O_BG);

    Eigen::Matrix3d dq_dbg = jacobian.block<3, 3>(O_R, O_BG);

    Eigen::Matrix3d dv_dba = jacobian.block<3, 3>(O_V, O_BA);
    Eigen::Matrix3d dv_dbg = jacobian.block<3, 3>(O_V, O_BG);

    Eigen::Vector3d dba = Bai - linearized_ba;
    Eigen::Vector3d dbg = Bgi - linearized_bg;

    // IMU预积分的结果,消除掉acc bias和gyro bias的影响, 对应IMU model中的\hat{\alpha},\hat{\beta},\hat{\gamma}
    Eigen::Quaterniond corrected_delta_q = delta_q * Utility::deltaQ(dq_dbg * dbg);
    Eigen::Vector3d    corrected_delta_v = delta_v + dv_dba * dba + dv_dbg * dbg;
    Eigen::Vector3d    corrected_delta_p = delta_p + dp_dba * dba + dp_dbg * dbg;

    // IMU项residual计算,输入参数是状态的估计值, 上面correct_delta_*是预积分值, 二者求'diff'得到residual
    residuals.block<3, 1>(O_P, 0)  = Qi.inverse() * (0.5 * G * sum_dt * sum_dt + Pj - Pi - Vi * sum_dt) - corrected_delta_p;
    residuals.block<3, 1>(O_R, 0)  = 2 * (corrected_delta_q.inverse() * (Qi.inverse() * Qj)).vec();
    residuals.block<3, 1>(O_V, 0)  = Qi.inverse() * (G * sum_dt + Vj - Vi) - corrected_delta_v;
    residuals.block<3, 1>(O_BA, 0) = Baj - Bai;
    residuals.block<3, 1>(O_BG, 0) = Bgj - Bgi;

    return residuals;
}

(2)协方差矩阵

此处用到的协方差矩阵为前面 IMU 预积分计算出的协方差矩阵。

残差的后处理对应代码:

这里残差 residual 乘以 sqrt_info,这是因为真正的优化项其实是 Mahalanobis 距离:d= r^{T} P^{-1} r , 其中 P_{} 是协方差。Mahalanobis距离其实相当于一个残差加权,协方差大的加权小,协方差小的加权大,着重优化那些比较确定的残差。

而 ceres 只接受最小二乘优化,也就是 min e^{T}e_{} ,所以把 P^{-1} 做 LLT分解,即 LL^{T}=P^{-1} ,则 d= r^{T}\left( LL^{T} \right)r=\left( L^{T} r\right)^{T}\left( L^{T}r \right) ,令 r ′=( L^{T}r ),作为新的优化误差,所以 sqrt_info 等于 L^{T}

(3)雅克比矩阵

高斯迭代优化过程中会用到IMU测量残差对状态量的雅克比矩阵,但此处我们是 对误差状态量求偏导,下面对四部分误差状态量求取雅克比矩阵。

雅克比矩阵计算的对应代码在class IMUFactor : public ceres::SizedCostFunction<15, 7, 9, 7, 9>中的Evaluate()函数中。

3.2 视觉(td) 测量残差

视觉测量残差 即 特征点的重投影误差,视觉残差和雅克比矩阵计算的对应代码在 ProjectionFactor::Evaluate 函数中。

(1)切平面重投影误差(Spherical camera model)

(2)像素重投影误差(Pinhole camera model)

(3)协方差矩阵

固定的协方差矩阵,归一化平面的标准差为 \frac{1.5}{f} ,即像素标准差为 1.5。

(4)雅克比矩阵

下面关于误差状态量对相机测量残差求偏导,得到高斯迭代优化过程中的雅克比矩阵。

(5)Vision measurement residual for temporal calibration

视觉残差和雅克比矩阵计算的对应代码在 ProjectionTdFactor::Evaluate 函数中。

3.3 Temporal Calibration

Timestamps

Time Synchronization

Temporal Calibration

3.4 边缘化(Marginalization)

滑窗(Sliding Window)限制了关键帧的数量,防止pose和feature的个数不会随时间不断增加,使得优化问题始终在一个有限的复杂度内,不会随时间不断增长。

Marginalization

然而,将pose移出windows时,有些约束会被丢弃掉,这样势必会导致求解的精度下降,而且当MAV进行一些退化运动(如: 匀速运动)时,没有历史信息做约束的话是无法求解的。所以,在移出位姿或特征的时候,需要将相关联的约束转变成一个约束项作为prior放到优化问题中,这就是marginalization要做的事情。

边缘化的过程就是将滑窗内的某些较旧或者不满足要求的视觉帧剔除的过程,所以边缘化也被描述为 将联合概率分布分解为边缘概率分布和条件概率分布的过程(就是利用shur补减少优化参数的过程)。

直接进行边缘化而不加入先验条件的后果:

VINS-Mono 中为了处理一些悬停的case,引入了一个 two-way marginalization:

在悬停等运动较小的情况下,会频繁的 MARGIN_NEW ,这样也就保留了那些比较旧但是视差比较大的 pose 。这种情况如果一直 MARGIN_OLD 的话,视觉约束不够强,状态估计会受 IMU 积分误差影响,具有较大的累积误差。

Schur Complement

First Estimate Jacobin

更多 SLAM 内容:


点赞 和分享 是对我们的最大鼓励呀~

玻璃钢生产厂家宜宾玻璃钢餐桌椅厂家直销大连玻璃钢座椅哪家好德阳不锈钢花盆加工山东玻璃钢座椅哪家好日照玻璃钢花坛厂家宿州玻璃钢座椅定制上海玻璃钢茶几定制玉林玻璃钢摆件制造六安商业美陈厂家直销阳江玻璃钢医疗外壳厂家新乡玻璃钢装饰价格长沙玻璃钢花钵制造吉林玻璃钢花盆吉安玻璃钢茶几加工昭通玻璃钢坐凳厂家直销安顺玻璃钢家具公司济宁玻璃钢沙发加工武威玻璃钢坐凳哈密商场美陈本溪玻璃钢机械外壳生产厂家梧州玻璃钢休闲椅延安玻璃钢动物雕塑厂家廊坊玻璃钢花钵生产厂家儋州玻璃钢花池哪家好河南玻璃钢种植池定制延安玻璃钢坐凳定制承德玻璃钢垃圾桶生产厂家本溪玻璃钢花钵生产厂家宝鸡玻璃钢设备外壳厂铜仁玻璃钢花盆定制香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化