1. 课程导入

在无人机自主飞行中,最基础也最棘手的问题之一是:我在哪里,我正朝哪个方向运动?全球定位系统(GPS)在室外开阔环境下能给出较好的绝对位置,但一旦进入城市峡谷、室内、林下、隧道或强电磁干扰区域,定位就会漂移甚至失效。视觉惯性里程计(Visual-Inertial Odometry,VIO)正是为解决这一问题而生的核心技术:它把相机与惯性测量单元(IMU)的数据融合起来,在无GPS条件下估计无人机的位姿与运动轨迹。

本课程面向无人机VIO工程实践,从传感器模型、状态估计、后端优化到真实飞行部署,逐步构建一套可落地的VIO系统。第1章先建立全局认知:VIO是什么、为什么需要它、它经历了怎样的发展、在哪些场景中不可替代,以及后续30章的学习路线。

一、VIO的定义与核心原理

VIO是一种多传感器融合的里程计方法。它利用单目、双目或RGB-D相机提供视觉观测,利用IMU提供高频的角速度与加速度测量,通过滤波或优化估计无人机的位姿、速度、重力方向以及传感器偏置。与纯视觉里程计相比,VIO在快速运动、纹理缺失、光照变化等场景下更鲁棒;与纯惯性导航相比,VIO能有效抑制IMU积分带来的漂移。

从信息流角度看,VIO的核心可以概括为三个环节:

  • 视觉前端:提取特征点或直接使用像素光度信息,进行帧间跟踪与关键帧选择。
  • 惯性预积分:在两次视觉观测之间,对IMU测量进行预积分,得到相对旋转、速度和位置约束。
  • 后端估计:以滑动窗口优化或滤波器形式,联合视觉重投影误差与惯性预积分残差,求解状态量。

一句话理解VIO:相机负责“看世界”,IMU负责“感知自身运动”,融合算法负责“把两者对齐并估计出无人机在三维空间中的位置、姿态和速度”。

下面这张图展示了无人机VIO系统的典型信号链与模块关系,后续章节会围绕图中的每个模块展开。

无人机VIO系统信号链与模块关系 相机 单目 / 双目 / RGB-D 图像序列 · 时间戳 IMU 陀螺仪 + 加速度计 高频角速度 · 比力 视觉前端 特征提取 / 光流跟踪 关键帧 · 重投影误差 IMU预积分 旋转 / 速度 / 位置增量 偏置 · 噪声 · 重力 后端估计 滑动窗口优化 / 滤波 联合残差 · 边缘化 位姿输出 位置 · 姿态 速度 · 偏置 反馈:偏置估计与状态更新 工程关键点 时间同步与标定 · 外参/内参 · 初始化与尺度 · 故障检测与恢复 · 实时性与算力约束 · 与飞控/导航模块接口 输出频率:IMU 100–1000 Hz,视觉 20–60 Hz,VIO 位姿通常 20–100 Hz

二、发展历程:从视觉里程计到紧耦合VIO

VIO并非一蹴而就,它经历了从“视觉为主、惯性辅助”到“视觉惯性紧耦合”的演进。早期视觉里程计(VO)只依赖相机,通过特征匹配估计帧间运动,但存在尺度不确定、快速旋转易丢失、纹理缺失易失败等问题。随着MEMS IMU成本下降和算力提升,研究者开始将IMU引入视觉系统。

阶段 代表方法/系统 核心特点 主要局限
纯视觉里程计 PTAM、ORB-SLAM视觉部分 特征跟踪、光束法平差、回环检测 尺度未知、快速运动易丢失
松耦合VIO 早期MSCKF、视觉与惯性分别估计后融合 模块清晰、易于实现 信息利用不充分、精度受限
紧耦合滤波VIO MSCKF、ROVIO 视觉观测直接进入滤波状态更新 线性化误差、维护复杂
紧耦合优化VIO VINS-Mono、OKVIS、ORB-SLAM3 滑动窗口联合优化、鲁棒性强 算力需求高、初始化敏感
学习增强VIO DeepVIO、自监督学习融合 学习特征/深度先验,提升弱纹理表现 泛化性、实时性与可解释性挑战

当前工程实践中,基于滑动窗口优化的紧耦合VIO是主流方案,典型代表如VINS-Mono/Fusion、ORB-SLAM3等。它们在无人机、手持设备、AR/VR和自动驾驶中都有广泛应用。

三、应用场景:无人机为什么需要VIO

无人机对VIO的需求,本质上来自GPS拒止环境下的自主导航。以下场景中,VIO往往是不可替代的:

  • 室内巡检与仓储物流:GPS信号弱,无人机需要在货架间穿行、精准停靠。
  • 城市峡谷与密集建筑区:多路径效应导致GPS跳变,VIO提供连续位姿。
  • 隧道、地下管廊与矿井:无GPS、光照变化大,VIO结合视觉与惯性维持定位。
  • 林下与农业植保:树冠遮挡GPS,VIO辅助保持航线与避障。
  • 灾后搜救与应急响应:室内废墟、烟雾环境,VIO与激光/雷达融合提升鲁棒性。
  • 无人机群协同:在无GPS区域,VIO为每架无人机提供相对定位基础。

工程提示:VIO不是万能的。在完全无纹理、强运动模糊、纯旋转或IMU饱和的场景中,VIO也会失效。实际系统通常将VIO与激光雷达、气压计、磁力计、超声波等传感器融合,形成多源冗余导航。

四、课程学习路线图

本课程共30章,按照“基础—前端—后端—工程—实战”的主线组织。第1章建立全局认知,后续章节逐步深入。学习路线如下:

  1. 基础篇(第1–6章):VIO定义与发展、坐标系与旋转表示、相机模型与标定、IMU模型与预积分、时间同步与外参标定、初始化与尺度估计。
  2. 前端篇(第7–12章):特征提取与跟踪、光流与直接法、关键帧策略、视觉重投影误差、异常值剔除、前端性能优化。
  3. 后端篇(第13–20章):滑动窗口优化、边缘化、IMU预积分残差、鲁棒核函数、滤波器与优化对比、回环检测与全局一致、地图管理、多传感器融合。
  4. 工程篇(第21–26章):实时性与算力约束、ROS/嵌入式部署、飞控接口、故障检测与恢复、参数调优、日志与可视化。
  5. 实战篇(第27–30章):仿真环境搭建、真实飞行测试、数据集评估、完整项目复盘与性能优化。
# 典型VIO工程目录结构(后续章节会逐步填充)
vio_ws/
├── config/          # 相机内参、IMU噪声、外参
├── launch/          # 启动文件与节点配置
├── src/
│   ├── frontend/    # 特征跟踪、关键帧
│   ├── backend/     # 滑动窗口优化、边缘化
│   ├── imu/         # 预积分、偏置估计
│   └── utils/       # 时间同步、坐标变换
└── test/            # 仿真与真实数据测试

五、常见误区与学习建议

初学者在VIO学习中容易陷入几个误区:

  • 误区一:只关注算法,忽视标定与时间同步。相机与IMU的外参、时间偏移若不准,再好的后端也会发散。
  • 误区二:认为VIO可以完全替代GPS。VIO是相对定位,长期运行仍会漂移,需要回环或绝对观测修正。
  • 误区三:盲目追求复杂模型。工程中稳定性和实时性往往比理论精度更重要。
  • 误区四:忽略IMU噪声与饱和。低成本IMU的偏置和噪声特性直接决定VIO上限。

学习建议:每学一个模块,都要在仿真或公开数据集上复现;先跑通开源方案(如VINS-Mono),再逐步替换模块,理解每个环节的作用。不要一开始就手写完整VIO,先从标定、预积分、前端跟踪等小模块入手。

本章建立了无人机VIO的整体认知:它是什么、为什么重要、经历了怎样的发展、用在哪些场景,以及本课程的学习路线。接下来,我们将从坐标系与旋转表示开始,进入VIO的数学与工程基础。