前言:
刚接触了IMU传感器,除了IMU预积分的相关知识外,关于IMU的另一个重要知识点就是IMU的初始化。
IMU为什么需要初始化?
IMU初始化是为了获得重力方向和IMU零偏的初始值。有了正确的重力方向才能消除IMU预积分中加速度计关于重力的影响,得到的IMU预积分数据才能保证准确。
ORB-SLAM3中的IMU初始化
1.ORB-SLAM3刚开始运行时,IMU还没有进行初始化,此时系统运行的纯视觉模式,地图初始化也是在这个阶段完成的,但是此时的地图坐标系(世界坐标系)缺乏重力信息。
2.当带有IMU预积分数据的关键帧超过一定数量时,开始进行IMU初始化。通过前面积累的关键帧IMU预积分数据可以求得重力在世界坐标系中的方向,进而求得重力坐标系到世界坐标系的旋转矩阵的初值。
3.当得到世界坐标系到重力坐标系的旋转矩阵之后,就可以将世界坐标系的Z轴与重力方向进行对其了。随后将每个关键帧的位姿进行矫正,同时矫正地图点的位姿和IMU预积分的结果。
if (!mpCurrentKeyFrame->GetMap()->isImuInitialized())
{
Eigen::Matrix3f Rwg;
Eigen::Vector3f dirG;
dirG.setZero