1. 课程导入
当无人机飞入室内、峡谷、城市楼宇之间或卫星导航被干扰的区域时,GPS 往往无法提供稳定、连续、可信的位置信息。此时,无人机若仍要完成自主悬停、避障、路径跟踪与返航,就必须依靠自身携带的相机、惯性测量单元等传感器,实时估计“我在哪里、我朝哪里、我移动了多快”。这正是视觉里程计与航迹推算要解决的核心问题。
本课程围绕“如何让无人机仅凭视觉与惯性信息实现连续定位与轨迹估计”展开。学习目标不是记住若干算法名称,而是建立一条从传感器数据到位姿输出、再到飞行控制的完整技术链路认知。学完本课程,你应当能够理解视觉里程计的基本原理,掌握航迹推算的数学表达,能够分析不同方案的适用边界,并具备阅读、调试和评估相关系统的能力。
本节核心问题:无人机在没有 GPS 或 GPS 不可靠时,如何利用相机图像序列与惯性数据,连续估计自身位置、姿态和运动轨迹?
一、学习目标与能力地图
本课程的学习目标可分为四个层次。第一层是概念层:理解视觉里程计、视觉惯性里程计、航迹推算、位姿、尺度、漂移等基本术语。第二层是原理层:掌握特征点法、光流法、直接法、惯性预积分、卡尔曼滤波与非线性优化等核心方法。第三层是系统层:能够把相机模型、IMU 模型、时间同步、外参标定、初始化、后端优化和回环检测串成完整系统。第四层是应用层:能够针对室内巡检、隧道飞行、灾后搜救、农业植保等场景选择合适方案,并判断其精度、鲁棒性与实时性边界。
为了便于建立整体框架,可以用下面的能力地图来理解本课程的知识结构:
二、核心概念:从“里程计”到“航迹推算”
视觉里程计(Visual Odometry, VO)是指利用相机图像序列估计相邻帧之间相机运动,并逐步累积得到轨迹的方法。它不依赖外部定位基础设施,只依靠图像本身。VO 的输出通常是相机位姿序列,若相机与无人机机体之间的外参已知,就可以换算为无人机位姿。
视觉惯性里程计(Visual-Inertial Odometry, VIO)是在 VO 基础上引入 IMU 数据。IMU 提供高频角速度和加速度,能够在图像帧间进行短时位姿预测,弥补视觉在快速运动、弱纹理或遮挡时的不足;视觉则提供长期观测约束,抑制 IMU 积分产生的漂移。二者融合,形成当前无人机定位的主流方案。
航迹推算(Dead Reckoning)是一个更基础的概念:已知初始位置和姿态,通过对速度、角速度进行积分,递推得到后续位置和姿态。它不依赖外部观测,短时精度高、输出频率高,但误差会随时间累积。视觉里程计本质上是一种“带观测修正的航迹推算”,而 VIO 则是“视觉观测 + 惯性递推”的紧耦合或松耦合实现。
关键区分:VO 只回答“相机怎么动”,VIO 回答“无人机怎么动且尺度如何”,航迹推算回答“从上一时刻状态如何递推到下一时刻状态”。三者是层层递进、互相支撑的关系。
三、方法流程:一条完整的数据链路
无论采用特征点法、直接法还是深度学习法,一个典型的视觉惯性里程计系统通常包含以下步骤:
- 传感器采集与同步:相机以 20~60 Hz 采集图像,IMU 以 100~1000 Hz 采集角速度和加速度,并进行时间戳对齐。
- 前端视觉处理:提取特征点或计算光度误差,进行帧间跟踪,估计相对运动。
- IMU 预积分:在相邻图像帧之间对 IMU 测量进行积分,得到相对旋转、速度和位置增量。
- 初始化:估计重力方向、速度、尺度、IMU 零偏和相机-IMU 外参。
- 后端优化:构建因子图或滑动窗口,联合优化视觉重投影误差与 IMU 预积分残差。
- 回环检测与重定位:识别曾经到过的位置,消除累积漂移,构建全局一致轨迹。
- 输出与融合:将位姿、速度、协方差输出给飞控,参与位置环与速度环控制。
下面给出一个简化的参数配置示例,帮助理解系统运行时需要关注的关键量:
# 典型 VIO 系统关键参数示例
camera:
resolution: 752x480
frame_rate: 30 Hz
model: pinhole + radtan
imu:
rate: 200 Hz
noise_gyro: 0.005 rad/s/√Hz
noise_acc: 0.05 m/s²/√Hz
fusion:
estimator: sliding_window_optimization
window_size: 10 frames
keyframe_interval: 0.5 m
enable_loop_closure: true
output:
pose_rate: 200 Hz
frame_id: world
四、典型应用场景与方案对比
不同场景对视觉里程计与航迹推算的要求差异很大。下表从环境特征、主要挑战和推荐方案三个维度进行对比:
| 应用场景 | 环境特征 | 主要挑战 | 推荐方案 | 关键指标 |
|---|---|---|---|---|
| 室内巡检 | 纹理丰富、光照稳定 | 尺度漂移、长期累积误差 | 单目 VIO + 回环检测 | 定位误差 < 1% 轨迹长度 |
| 隧道飞行 | 弱纹理、重复结构 | 视觉退化、特征误匹配 | 双目 VIO + IMU 强约束 | 失效检测响应 < 200 ms |
| 灾后搜救 | 烟尘、动态遮挡、光照剧变 | 快速初始化、鲁棒性 | 多传感器融合 + 深度学习特征 | 初始化时间 < 2 s |
| 农业植保 | 重复农田纹理、低空飞行 | 高度估计、地面纹理单一 | 下视光流 + 气压计 + IMU | 高度误差 < 0.3 m |
| 城市楼宇间 | GPS 多径、动态障碍 | GNSS 不可信、尺度变化 | VIO + GNSS 松耦合 | 水平误差 < 2 m |
五、常见误区与学习复盘
误区一:认为视觉里程计可以完全替代 GPS。VO/VIO 会随时间产生漂移,长时间飞行仍需回环检测、地图匹配或外部基准修正。
误区二:忽视时间同步与外参标定。相机与 IMU 之间哪怕几毫秒的时间偏差,也会在快速运动时造成显著位姿误差。
误区三:只关注算法,不关注传感器质量。低纹理、运动模糊、卷帘快门、IMU 饱和都会直接导致系统失效,算法无法凭空恢复信息。
误区四:把航迹推算等同于低精度。航迹推算在短时、高频输出上具有不可替代的优势,关键在于与视觉观测形成互补。
学习本课程时,建议始终围绕三个问题复盘:第一,当前方法依赖哪些观测?第二,这些观测在什么条件下会退化或失效?第三,系统如何检测失效并切换到备用策略?把这三个问题贯穿到每一章,就能从“会调包”走向“能设计、能排障、能评估”。