VIO紧耦合方案的主要思路就是通过将基于视觉构造的残差项和基于IMU构造的残差项放在一起构造成一个联合优化的问题,整个优化问题的最优解即可认为是比较准确的状态估计。 为了限制优化变量的数目,VINS-Mono 采用了滑动窗口的形式,滑动窗口中的全状态量: 滑动窗口内 n+1 个所有相机的状态(包括位置、朝向、速度、加速...
根据ESKF 中5.3.3 The error-state kinematics小节公式 对于中值积分下的误差状态方程为 简写为 δX k ˙ =FδX k +Gn 所以 展开得 其中 令 则简写为 此处F′ 即代码中 F,相关代码见 midPointIntegration。 最后得到 IMU 预积分测量关于 IMU Bias 的雅克比矩阵Jk+1、IMU 预积分测量的...
MONO中,为了处理一些悬停的case,引入了一个教程》 wwit1024 , two-way marginalization, 简单来说就是:如果倒数第二帧是关键帧, 则将最旧的pose移出sliding window, 将最旧帧相关联的视觉和惯性数据边缘化掉,也就是MARGIN_OLD,作为一部分先验值,如果倒数第二帧不是关键帧, 则将倒数第二帧pose移出sliding windo...
公式和细节代码在其他博客中都有介绍,这里只简要说明。 vins-mono中使用的是ceres::SizedCostFunction这个功能(是用ceres求残差的其中一种方法,不了解的话可以搜一搜): class IMUFactor : public ceres::SizedCostFunction<15, 7, 9, 7, 9> 自己的IMUFactor类继承ceres::SizedCostFunction这个类并重写其中的函数...
cv::Rodrigues:罗德里格斯公式,旋转向量和旋转矩阵之间相互转化 1|0视觉惯性联合校准(我认为的重点) 函数:visualInitialAlign 校准目标: 陀螺仪零偏标定bg 速度v,重力g,尺度s初始化 重力矢量修正 校准流程: 旋转外参如果不可知,先估计外参 利用旋转约束估计陀螺仪bias:qc0bk=qc0ck⊗q−1bcqc0bk=qc0ck⊗qbc...
6.1.3 利用相机旋转约束标定IMU角速度bias 求解的目标函数如下公式所示: 在SfM完成且外参数标定完之后,头两个值是已知的了,而且我们假设头两个值是准的。理想状态下,这三个数乘积应该是单位四元数,很可惜,第三个值是IMU预积分得到的,而预积分里面是有bias的。所以,通过最小化这个目标函数的,可以把旋转bias标定...
基础公式推导:从基本的几何变换、投影模型等基础知识出发,逐步推导出视觉SLAM和VIO中的关键公式。复杂公式解析:针对VINSMono中的复杂公式,如BA优化公式、IMU预积分公式等,进行详细解析和推导。源码逐行精讲:代码结构分析:对VINSMono的源码结构进行整体分析,了解各个模块的功能和相互之间的关系。关键函数...
Vins-mono是香港科技大学开源的一个VIO算法 是用紧耦合方法实现的,通过单目+IMU恢复出尺度,效果非常棒。 1.特征点跟踪 首先用cv::goodFeaturesToTrack在第一帧图像上面找最强的150个特征点,非极大值抑制半径为30。新的特征点都有自己的新的对应的id。然后在下一帧过... V
本文深入解析了VINS-MONO的初始化过程,主要聚焦视觉与IMU之间的关联对齐。首先,当相机坐标系与世界坐标系相关联时,通过外参数方程[公式]来构建关系。视觉和IMU对齐的关键在于估计相邻帧之间的旋转,可通过视觉测量[公式]和IMU旋转积分[公式]来得到两条路径,构建等式求解外参数。具体来说,利用旋转的两...