- VINS的初始化过程?
- 首先进行纯视觉SfM:把滑窗填满,然后选择枢纽帧(和最后一帧有足够的视野重叠保证计算的位姿精度,并且和最后一帧有足够的视差保证三角化地图点的精度)。用对极几何计算枢纽帧和最后一帧之间的位姿,然后三角化地图点。再遍历滑窗中所有帧,依次用PnP计算枢纽帧和他们之间的位姿。最后,做一个全局的BA提高SfM的精度。
- 然后进行视觉惯性对齐,这部分有好几个步骤:
(1)计算陀螺仪零偏:以视觉SfM计算的旋转为准,相邻两帧视觉计算的旋转和IMU计算的旋转应该相等,把IMU预计分的旋转用一阶泰勒展开得到关于陀螺仪零偏的线性方程,然后构造非线性最小二乘问题求解陀螺仪零偏。
(2)计算每一帧的速度、重力方向、尺度:利用IMU预积分中平移部分的预积分,由于平移部分含有当前帧到世界坐标系下的旋转,但是这个是未知的,所以这里把它转成当前帧到枢纽帧下的旋转(这个前面SfM已经得到了,是已知的)。这样此时IMU预积分的平移方程中就包含了重力方向、速度两个变量,但是我们还要计算尺度。这里就把IMU的body系下的位置转成尺度s*相机系下的位置,从而引入了尺度。这样IMU预积分的平移公式中包含了尺度、速度、重力方向,并且关于这些未知量都是线性的,所以使用多个方程组合成线性方程组就可以求解出速度、重力方向、尺度。
(3)重力细化:上面的线性方程中没有约束重力的尺度,导致求解结果重力尺度可能不是9.81。如果约束了重力模长是9.81,则实际上重力只有两个自由度。所以就在半径为9.81的球的切平面上计算重力移动的方向,也就是实际上上面一步我们相当于求解了一个初始的重力方向。这样把三个变量的重力修改为两个变量的重力增量,再次带入上面的步骤(2)中求解,得到满足重力模长约束的结果。
(4)对齐到世界坐标系:求出来重力在枢纽帧下的表示,就可以把重力转到第0帧下表示。然后又已知重力在世界坐标系下表示是0,0,9.81,所以通过计算两个向量之间的旋转矩阵,就可以计算第0帧的坐标系和世界坐标系之间的旋转矩阵。得到这个旋转矩阵,乘到每一帧上,就对齐到世界坐标系了。然后对每一帧的平移都乘以尺度s,就恢复到了米制尺度。至此,VINs初始化完成。
- xx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)