1. 课程导入

当无人机飞入室内、峡谷、城市楼宇之间或卫星导航被干扰的区域时,GPS 往往无法提供稳定、连续、可信的位置信息。此时,无人机若仍要完成自主悬停、避障、路径跟踪与返航,就必须依靠自身携带的相机、惯性测量单元等传感器,实时估计“我在哪里、我朝哪里、我移动了多快”。这正是视觉里程计与航迹推算要解决的核心问题。

本课程围绕“如何让无人机仅凭视觉与惯性信息实现连续定位与轨迹估计”展开。学习目标不是记住若干算法名称,而是建立一条从传感器数据到位姿输出、再到飞行控制的完整技术链路认知。学完本课程,你应当能够理解视觉里程计的基本原理,掌握航迹推算的数学表达,能够分析不同方案的适用边界,并具备阅读、调试和评估相关系统的能力。

本节核心问题:无人机在没有 GPS 或 GPS 不可靠时,如何利用相机图像序列与惯性数据,连续估计自身位置、姿态和运动轨迹?

一、学习目标与能力地图

本课程的学习目标可分为四个层次。第一层是概念层:理解视觉里程计、视觉惯性里程计、航迹推算、位姿、尺度、漂移等基本术语。第二层是原理层:掌握特征点法、光流法、直接法、惯性预积分、卡尔曼滤波与非线性优化等核心方法。第三层是系统层:能够把相机模型、IMU 模型、时间同步、外参标定、初始化、后端优化和回环检测串成完整系统。第四层是应用层:能够针对室内巡检、隧道飞行、灾后搜救、农业植保等场景选择合适方案,并判断其精度、鲁棒性与实时性边界。

为了便于建立整体框架,可以用下面的能力地图来理解本课程的知识结构:

无人机视觉里程计与航迹推算整体框架 传感器输入层 单目 / 双目 / RGB-D 相机 IMU 加速度计 + 陀螺仪 气压计 / 超声波 / 光流 前端视觉处理 特征提取与匹配 光流跟踪 / 直接法 对极几何 / PnP 求解 后端优化与融合 IMU 预积分 滑动窗口 / 因子图优化 回环检测与重定位 输出与应用 6DoF 位姿 速度与轨迹 地图与导航 航迹推算(Dead Reckoning)基础支撑 IMU 积分 → 短时高频位姿预测 | 视觉观测 → 长期漂移修正 | 二者互补构成 VIO 坐标系:世界系 W → 机体系 B → 相机系 C | 状态量:位置 p、速度 v、姿态 q、零偏 b 典型场景一:室内巡检 GPS 拒止、纹理丰富 视觉特征稳定,适合 VIO 重点:尺度与漂移控制 典型场景二:隧道与峡谷 弱纹理、重复结构 视觉退化,IMU 权重上升 重点:鲁棒性与失效检测 典型场景三:灾后搜救 烟尘、光照剧变、动态遮挡 多传感器冗余与快速初始化 重点:实时性与容错

二、核心概念:从“里程计”到“航迹推算”

视觉里程计(Visual Odometry, VO)是指利用相机图像序列估计相邻帧之间相机运动,并逐步累积得到轨迹的方法。它不依赖外部定位基础设施,只依靠图像本身。VO 的输出通常是相机位姿序列,若相机与无人机机体之间的外参已知,就可以换算为无人机位姿。

视觉惯性里程计(Visual-Inertial Odometry, VIO)是在 VO 基础上引入 IMU 数据。IMU 提供高频角速度和加速度,能够在图像帧间进行短时位姿预测,弥补视觉在快速运动、弱纹理或遮挡时的不足;视觉则提供长期观测约束,抑制 IMU 积分产生的漂移。二者融合,形成当前无人机定位的主流方案。

航迹推算(Dead Reckoning)是一个更基础的概念:已知初始位置和姿态,通过对速度、角速度进行积分,递推得到后续位置和姿态。它不依赖外部观测,短时精度高、输出频率高,但误差会随时间累积。视觉里程计本质上是一种“带观测修正的航迹推算”,而 VIO 则是“视觉观测 + 惯性递推”的紧耦合或松耦合实现。

关键区分:VO 只回答“相机怎么动”,VIO 回答“无人机怎么动且尺度如何”,航迹推算回答“从上一时刻状态如何递推到下一时刻状态”。三者是层层递进、互相支撑的关系。

三、方法流程:一条完整的数据链路

无论采用特征点法、直接法还是深度学习法,一个典型的视觉惯性里程计系统通常包含以下步骤:

  1. 传感器采集与同步:相机以 20~60 Hz 采集图像,IMU 以 100~1000 Hz 采集角速度和加速度,并进行时间戳对齐。
  2. 前端视觉处理:提取特征点或计算光度误差,进行帧间跟踪,估计相对运动。
  3. IMU 预积分:在相邻图像帧之间对 IMU 测量进行积分,得到相对旋转、速度和位置增量。
  4. 初始化:估计重力方向、速度、尺度、IMU 零偏和相机-IMU 外参。
  5. 后端优化:构建因子图或滑动窗口,联合优化视觉重投影误差与 IMU 预积分残差。
  6. 回环检测与重定位:识别曾经到过的位置,消除累积漂移,构建全局一致轨迹。
  7. 输出与融合:将位姿、速度、协方差输出给飞控,参与位置环与速度环控制。

下面给出一个简化的参数配置示例,帮助理解系统运行时需要关注的关键量:

# 典型 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 饱和都会直接导致系统失效,算法无法凭空恢复信息。

误区四:把航迹推算等同于低精度。航迹推算在短时、高频输出上具有不可替代的优势,关键在于与视觉观测形成互补。

学习本课程时,建议始终围绕三个问题复盘:第一,当前方法依赖哪些观测?第二,这些观测在什么条件下会退化或失效?第三,系统如何检测失效并切换到备用策略?把这三个问题贯穿到每一章,就能从“会调包”走向“能设计、能排障、能评估”。