2. VIO基础回顾
视觉惯性里程计(Visual-Inertial Odometry,VIO)是把相机与IMU两类互补传感器融合起来,在未知环境中连续估计载体位姿与速度的技术。相机提供丰富的环境结构信息,但单帧尺度不可观、快速运动易模糊;IMU提供高频角速度与加速度,短时精度高、能观测尺度与重力方向,但零偏会随时间积分漂移。VIO的核心思想正是用视觉约束抑制IMU漂移,用IMU高频预测弥补视觉帧率不足,从而在量产设备上获得稳定、可复现的定位输出。
一、核心原理:紧耦合与松耦合
按融合深度,VIO可分为松耦合与紧耦合。松耦合把视觉位姿与IMU预积分结果分别求解后再做滤波或优化融合,结构简单、模块解耦,但丢失了原始观测间的相关性,精度与鲁棒性受限。紧耦合则把视觉重投影误差与IMU预积分残差放入同一个优化或滤波框架中联合求解,视觉特征与惯性状态互相约束,是当前主流方案(如VINS-Mono、OKVIS、ORB-SLAM3的惯性模式)的基础。
从信息流看,VIO的典型处理链路为:IMU原始数据 → 预积分 → 视觉前端特征跟踪 → 关键帧与滑窗管理 → 后端联合优化 → 边缘化 → 输出位姿、速度、零偏。IMU预积分把两帧之间的高频测量压缩为相对位姿、速度与零偏雅可比,避免在优化中重复积分,是紧耦合能实时运行的关键。
二、坐标系定义与外参标定
VIO中至少涉及四个坐标系:世界系 W(重力对齐、局部原点)、机体系 B(IMU本体)、相机系 C(光心与光轴)、像素系 P(图像平面)。状态量通常在世界系下表达,而观测在相机系与像素系中产生,因此必须明确各系之间的变换关系。
- 外参 T_BC:相机与IMU之间的旋转与平移,是VIO精度的关键参数,量产中需逐台标定。
- 时间偏移 t_d:相机与IMU的采样时刻不同步,未标定会直接引入运动模糊方向的系统性误差。
- 重力方向:由IMU加速度在静止段估计,决定世界系Z轴,影响尺度与俯仰/横滚可观性。
三、状态估计框架与传感器模型
VIO的状态向量通常包含滑动窗口内各关键帧的位姿、速度、IMU零偏,以及相机外参与时间偏移。以VINS-Mono为例,状态可写为:
X = [ x_0, x_1, ..., x_n, λ_0, ..., λ_m, T_BC, t_d ]
x_k = [ p_k, v_k, q_k, b_a, b_g ] // 位置、速度、姿态、加速度零偏、陀螺零偏
λ_j : 第 j 个特征点的逆深度
IMU测量模型为:
ω_m = ω + b_g + n_g
a_m = R_WB^T (a_W - g_W) + b_a + n_a
视觉测量模型为针孔投影加畸变:
z = π( K · T_CB · T_WB · P_W ) + n_z
后端把IMU预积分残差与视觉重投影残差加权求和,构造非线性最小二乘问题,用Ceres或g2o求解。滑动窗口通过边缘化旧帧保持计算量恒定,同时保留历史信息约束。
| 模块 | 输入 | 输出 | 关键参数 |
|---|---|---|---|
| IMU预积分 | 角速度、加速度 | ΔR、Δv、Δp及雅可比 | 零偏、噪声密度 |
| 视觉前端 | 图像序列 | 特征轨迹、关键帧 | 跟踪数、最小视差 |
| 初始化 | 预积分+视觉 | 尺度、重力、速度、零偏 | 窗口长度、静止检测 |
| 联合优化 | 残差与信息矩阵 | 状态更新量 | 迭代次数、鲁棒核 |
| 边缘化 | 旧帧约束 | 先验信息 | 滑窗长度 |
四、典型场景与常见误区
在量产机器人或AR设备上,VIO初始化阶段最易出问题。若设备启动时处于运动状态,IMU无法准确估计重力与零偏,会导致尺度错误、轨迹漂移。建议在固件中加入静止检测,满足加速度方差与角速度阈值后再触发初始化。
复盘时建议重点检查三类指标:初始化收敛时间、外参标定残差、滑窗内特征跟踪数量。若跟踪数骤降,优先排查光照突变、纹理缺失与运动模糊;若零偏估计发散,检查IMU温漂与标定质量。只有把传感器模型、坐标系与外参、状态估计框架三者对齐,VIO才能在量产环境中稳定输出可信位姿。