1.1.1 第一次初始化 (IMU第一阶段)
- 发生在InitializeIMU()函数中
- 主要目标:
- 估计初始重力方向
- 计算初始速度
- 获得IMU偏置的初始值
- 对尺度进行粗略估计
- 条件:
- 关键帧数量要足够(>10帧)
- 时间跨度要足够(单目>2s,其他>1s) 1.1.2 第二次初始化 (VIBA 1)
- 主要目标:
- 代码中称为Visual-Inertial BA 1
- 主要目标:
- 优化第一次初始化的结果
- 进一步改善重力方向、速度和尺度估计
- 条件:
- 地图已经完成第一次IMU初始化
- 跟踪状态正常(Tracking::OK)
- 累计时间差大于5s(mTinit>5.0f) 1.1.3 第三次初始化 (VIBA 2)
- 主要目标:
- 代码中称为Visual-Inertial BA 2
- 主要目标:
- 进行最终的精细优化
- 得到最准确的状态估计
- 条件:
- 已完成VIBA 1
- 累计时间差大于15s(mTinit>15.0f)
- 主要目标:
1.2.1 渐进式优化的需要 1.2.2 数据积累的需要
- 第一次:使用最少的数据快速获得初始值
- 第二次:有了更多数据后进行优化
- 第三次:积累足够多的数据后进行最终优化 1.2.3 稳定性考虑
- IMU数据容易受噪声影响
- 多次优化可以逐步提高估计的准确性
- 避免初始化不稳定导致的系统崩溃 1.2.4 精度提升的需要