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
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–6章):VIO定义与发展、坐标系与旋转表示、相机模型与标定、IMU模型与预积分、时间同步与外参标定、初始化与尺度估计。
- 前端篇(第7–12章):特征提取与跟踪、光流与直接法、关键帧策略、视觉重投影误差、异常值剔除、前端性能优化。
- 后端篇(第13–20章):滑动窗口优化、边缘化、IMU预积分残差、鲁棒核函数、滤波器与优化对比、回环检测与全局一致、地图管理、多传感器融合。
- 工程篇(第21–26章):实时性与算力约束、ROS/嵌入式部署、飞控接口、故障检测与恢复、参数调优、日志与可视化。
- 实战篇(第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的数学与工程基础。