1. 课程导入

视觉惯性里程计(VIO)是移动机器人、无人机、AR/VR 设备实现自主定位的核心技术。它把相机图像与 IMU 惯性测量融合在一起,在无 GPS 环境下估计载体的位姿与速度。很多初学者能跑通开源 VIO 工程,却说不清“预积分到底在积什么”“状态量为什么这样定义”“协方差为何会漂移”。本课程的目标,就是把这些工程细节讲透,让你不仅能调参,还能改代码、定位问题、评估精度。

本课程围绕一条主线展开:IMU 预积分建模 → 状态估计理论 → 后端优化实现 → 工程调参与评估。学完后,你应能独立阅读 VINS-Mono、ORB-SLAM3 等系统的预积分与优化模块,并具备从零搭建一个简化 VIO 后端的能力。

一、学习目标:从“会跑”到“会改”

本课程设定四个递进目标。第一层是概念清晰:理解 IMU 测量模型、预积分量的物理含义、状态量的构成。第二层是推导熟练:能独立推导预积分残差对状态量与零偏的雅可比。第三层是工程落地:掌握滑动窗口、边缘化、零偏更新、协方差传播等实现技巧。第四层是评估排障:能用轨迹误差、重投影误差、零偏收敛曲线判断系统是否健康。

二、核心概念:预积分与状态估计的关系

IMU 以高频输出角速度与加速度,直接积分会随初始状态变化而重复计算。预积分把两帧图像之间的 IMU 数据压缩成一个与初始状态无关的相对运动约束,使优化时无需重新积分。状态估计则是在概率框架下,融合视觉观测与预积分约束,求解位姿、速度、零偏等状态量。

关键状态量通常包括:旋转 \(R\)、位置 \(p\)、速度 \(v\)、陀螺零偏 \(b_g\)、加速度零偏 \(b_a\),以及相机与 IMU 的外参。预积分量包括旋转增量 \(\Delta R\)、速度增量 \(\Delta v\)、位置增量 \(\Delta p\),它们都带有对零偏的雅可比,用于零偏更新时的一阶修正。

VIO 预积分与状态估计整体框架 相机图像 特征提取 / 光流跟踪 IMU 测量 角速度 / 加速度 IMU 预积分 ΔR, Δv, Δp 零偏雅可比 J 滑动窗口状态估计 状态: R, p, v, b_g, b_a 残差: 视觉 + 预积分 求解: 高斯牛顿 / LM 边缘化: Schur 补 输出与评估 轨迹 / 速度 / 零偏 / 协方差 零偏反馈

三、方法流程:一次完整的 VIO 优化迭代

下面用一段伪代码展示预积分约束如何进入优化。真实工程中,视觉残差与预积分残差会一起构成最小二乘问题。

// 1. 读取两帧之间的 IMU 数据
for each imu_sample between frame_k and frame_k+1:
    propagate_delta_R(delta_R, gyro - b_g, dt)
    propagate_delta_v(delta_v, acc - b_a, delta_R, dt)
    propagate_delta_p(delta_p, delta_v, dt)
    update_jacobian_bias(J_R_bg, J_v_ba, J_p_ba)

// 2. 构建预积分残差
r_imu = [ Log(delta_R^T * R_k^T * R_k1),
          R_k^T * (v_k1 - v_k - g*dt) - delta_v,
          R_k^T * (p_k1 - p_k - v_k*dt - 0.5*g*dt^2) - delta_p,
          b_g1 - b_g0,
          b_a1 - b_a0 ]

// 3. 与视觉重投影残差联合求解
H = J_visual^T * W_visual * J_visual + J_imu^T * W_imu * J_imu
b = J_visual^T * W_visual * r_visual + J_imu^T * W_imu * r_imu
delta_x = solve(H, b)
state = state + delta_x

四、实战路线与典型场景

课程按“仿真验证 → 开源系统复现 → 自研模块替换 → 真实数据评估”推进。典型场景包括:无人机室内悬停、扫地机回环建图、AR 眼镜头部追踪。每个场景对零偏稳定性、时间同步、外参标定的敏感度不同。

阶段 核心任务 关键工具/数据 验收标准
基础 理解预积分推导与雅可比 论文、Python 仿真 能复现 ΔR/Δv/Δp 数值
进阶 跑通 VINS-Mono / ORB-SLAM3 EuRoC、TUM-VI 数据集 ATE 误差在合理范围
工程 替换预积分模块、调参 Ceres、G2O、Eigen 零偏收敛、无发散
实战 真实设备部署与评估 标定板、rosbag、evo 轨迹闭合、重投影误差小

五、常见误区与复盘建议

误区一:把预积分当成普通积分,忽略零偏雅可比,导致零偏更新后残差计算错误。
误区二:时间同步没做好,相机与 IMU 时间戳差几毫秒,轨迹就会明显漂移。
误区三:只关注轨迹精度,不看协方差与零偏收敛,系统在弱纹理场景容易突然发散。
建议每学完一章,用 evo 工具画一次轨迹对比图,并记录零偏估计曲线。复盘时重点问三个问题:残差是否下降?零偏是否收敛?边缘化后信息是否丢失?这三个问题能覆盖大部分 VIO 工程故障。