第十五章:视频→轨迹数据集构建(单/双/多摄 + IMU)
15.1 目标:从视频估计相机轨迹与尺度
开篇段落
本章的目标是解决一个奠基性的问题:如何将原始、无标签的室内视频流,转化为一个精确、带有物理尺度、可用于监督学习的六自由度(6-DoF)相机轨迹数据集。这个过程是所有模仿学习(Imitation Learning)和许多世界模型(World Models)训练的基石。它将无结构的像素信息,提炼为结构化的 (观测, 动作) 数据对,其中相机轨迹精确地定义了机器人的“动作”真值(Ground Truth)。我们将深入探讨一个离线的、以精度为最高优先级的处理管线,它融合了经典的计算机觉和现代状态估计算法,能够处理从单目到多目、有无 IMU 的各种传感器配置,并最终解决最棘手的尺度模糊性问题。这本质上是一个将“原始感官经验”转化为“可供学习的专家示范”的过程。
15.2 SfM/VIO/SLAM 管线:特征、匹配、BA、尺度恢复
将视频序列转化为精确轨迹,是一个成熟但充满细节的领域。其核心思想源于运动恢复结构(Structure from Motion, SfM)、视觉惯性里程计(Visual-Inertial Odometry, VIO)和同步定位与建图(Simultaneous Localization and Mapping, SLAM)。在离线数据处理中,我们不受实时性约束,因此可以构建一个计算密集但精度极高的“终极”管线。
一个理想化的离线处理流程如下所示:
原始数据 (视频帧/IMU)
|
v
[1. 前端:特征提取与跟踪] -> 检测稳定地标,并在帧间进行匹配
|
v
[2. 几何校验与初始化] -> 剔除错误匹配,建立初始几场景
|
v
[3. 后端:滑动窗口优化 (Local BA)] -> 在局部范围内精化位姿和地图点
|
v
[4. 闭环检测与全局优化] -> 识别重访区域,消除全局累积漂移
|
v
[5. 尺度恢复与度量化] -> 将相对轨迹转换为米制单位的绝对轨迹
|
v
处理后轨迹 (带时间戳的 6-DoF 位姿)
前端的目标是从连续的图像帧中提取稳定、可重复检测的视觉特征,并建立它们在时间上的对应关系。
- 传统特征:
- SIFT:尺度不变特征变换。对光照、尺度、旋转具有极强的鲁棒性,是离线高质量处理的黄金标准,尽管计算成本高。
- ORB:兼顾速度与性能的特征,常用于实时 SLAM 系统。但在离线场景下,其鲁棒性不如 SIFT。
- 学习特征:
- SuperPoint/LoFTR:基于深度学习的特征点检测与匹配方法。在弱纹理、重复纹理等传统方法失效的场景下表现优异,能提供更密集的特征匹配。
- 经验法则 (Rule-of-thumb):在构建数据集的离线流程中,计算成本不是首要瓶颈,特征的质量和鲁棒性才是。因此,推荐使用 SIFT 或 SuperPoint 这类重量级但效果最好的方法。可以将多种特征的匹配结果进行融合,以获得最全面的约束。
2. 几何校验与初始化 (Geometric Verification & Initialization)
- 几何校验:通过对极几何约束和 RANSAC(随机抽样一致性)算法,从大量的初始特征匹配中,筛选出符合刚体运动假设的“内点”(Inliers)。此步骤的内点率是衡量前端跟踪质量的关键健康指标。
- 初始化:这是整个管线的引导步骤。系统需要根据最初几帧(通常是两帧)的匹配关系,恢复出初始的相机相对位姿和一批三维地图点。这一步对视差(Parallax)有较高要求——纯旋转或微小移动很难成功初始化。对于 VIO 系统,初始化更为复杂,需要联合估计 IMU 的偏置(bias)、速度和重力向量方向。
3. 后端:滑动窗口优化 (Sliding Window / Local Bundle Adjustment)
这是系统的核心“引擎”。在一个包含最近 N 帧的滑动窗口内,通过非线性优化的方式,同时调整窗口内的相机位姿和所有被观测到的三维地图点的坐标,目标是最小化重投影误差(Reprojection Error)。
- 重投影误差是三维空间点 $P_j$ 在世界坐标系 $W$ 下,通过相机 $i$ 的位姿 $T_{CW_i}$ 投影到该相机成像平面上的预测像素位置 $\pi(T_{CW_i}, P_j)$,与实际观测到的像素位置 $p_{ij}$ 之间的差异。
\(E_{reproj} = \sum_{i \in \text{Window}} \sum_{j \in \text{Points}} \rho \left( \left\| p_{ij} - \pi(K, T_{CW_i}, P_j) \right\|^2_{\Sigma_{ij}} \right)\)
其中 $K$ 是相机内参,$\rho(\cdot)$ 是鲁棒核函数(如 Huber Loss),用于抑制外点的影响,$\Sigma_{ij}$ 是观测噪声的协方差矩阵。对于 VIO 系统,优化问题中还会加入 IMU 预积分残差项。
4. 闭环检测与全局优化 (Loop Closure & Global Optimization)
- 闭环检测:当机器人回到一个曾经访问过的地方时,系统需要有能力“认出”这个场景。这通常通过 Bag-of-Words (BoW) 模型(如 DBoW2/3)实现,它能高效地将图像转换为一个稀疏向量,用于场景检索。
- 全局优化:一旦检测到闭环,就在位姿图(Pose Graph)中增加一条非相邻节点之间的约束边。然后执行一次全局优化(通常是位姿图优化,或者更耗时但更精确的全局 BA),将闭环带来的校正信息传播到整个轨迹上,从而大幅消除累积的漂移。
- 经验法则 (Rule-of-thumb):一条用于学习的高质量轨迹必须包含有效的闭环。没有闭环的轨迹,无论前端多精确,其终点的误差都会随路径长度性增长。
5. 尺度恢复与度量化 (Scale Recovery & Metrication)
这是单目视觉方案的根本软肋。
- 问题:仅凭单目相机,我们无法区分一个近处的小物体和一个远处的大物体。因此,所有纯视觉重建的轨迹和地图都只在“相似变换”(Similarity Transformation)下是确定的,即尺度未知。
- 解决方案(按可靠性排序):
- 视觉惯性融合 (VIO):这是最推荐的方案。IMU 的加速度计以米/秒² ($m/s^2$) 为单位提供测量,重力加速度 $g \approx 9.8 m/s^2$ 是一个强大的物理先验。在紧耦合的 VIO 优化框架中,系统必须求解出一个唯一的物理尺度,才能使视觉上的位移和 IMU 积分出的位移相符。
- 双目/多摄系统:两个或多个相机之间的物理距离(基线,baseline)是预先标定的,单位是米。这个已知的基线为三角化测量提供了天然的尺度参考。
- 场景/物体先:这是最后的手段。可以在场景中放置已知尺寸的物体(如 Aruco 码、棋盘格),或利用场景中常见的标准尺寸物体(如门高、A4纸),在重建后手动或半自动地对整个轨迹和地图进行缩放。这种方法精度较低,且难以自动化。
15.3 多摄同步与外参求解
对于配备多个摄像头的人形机器人,多摄数据能提供更宽的视场和鲁棒性,但引入了新的挑战。
- 时间同步 (Temporal Synchronization):
- 重要性:时间不同步是多传感器融合的“沉默杀手”。即使是几毫秒的误差,在机器人快速运动时(
空间误差 ≈ 速度 × 时间误差),也会导致错误的几何约束,使优化器无法收敛或收敛到错误结果。
- 硬件同步:最理想的方案。所有相机的图像传感器由同一个外部时钟信号触发曝光。这是保证数据质量的首选方案,应在硬件设计阶段优先考虑。
- 软件同步:若无硬件同步,可采用后处理方法。例如,在所有相机视野内制造一个瞬时事件(如闪光灯),然后通过分析视频帧亮度找到对应帧,从而估计时间戳偏移。在 VIO 框架中,也可以将微小的时间戳偏移作为优化变量进行在线估计。
- 外参求解 (Extrinsic Calibration):
- 定义:求解相机之间的相对位姿(旋转和平移,$T_{cam2}^{cam1}$)。这个关系在机器人本体上是刚性固定的。
- 离线标定:这是最可靠的方法。使用一个标定目标(如棋盘格或 AprilTag 阵列),在所有相机视野中充分移动,然后使用 Kalibr 等开源工具包进行一次性、高精度的外参标定。
- 在线自标定:作为优化问题的一部分,在 BA 中同时估计轨迹和外参。这要求相机间有足够的公共视野,并且场景提供足够的视差。对于数据集生成,其精度和稳定性通常不如离线标定。
15.4 品质评估:ATE/RPE/内点率/重投影误差/闭环得分
生成轨迹后,必须进行严格的量化评估。不合格的数据应被标记为低质量或直接废弃。
| 指标 (Metric) |
描述 |
“好”的典型值 (Rule-of-thumb) |
指示意义 |
| 绝对轨迹误差 (ATE) |
估计轨迹与真值(如Mocap)对齐后的全局均方根误差。 |
< 1-2% of trajectory length |
全局一致性的最终“成绩单”。 |
| 相对位姿误差 (RPE) |
在固定时间间隔(如1秒)内的位姿变化量与真值的误差。 |
Translation < 1-3%, Rotation < 0.1°/s |
局部漂移率的度量,反映程计的性能。 |
| 平均重投影误差 |
全局 BA 收敛后,所有地图点在所有观测帧上的平均投影误差(像素)。 |
< 0.5 pixels |
内部几何一致性。值越低,模型与观测越吻合。 |
| 前端跟踪内点率 |
RANSAC 几何校验后,保留的匹配点对占总数的比例。 |
> 50-60% (for stable tracking) |
前端跟踪质量的实时健康指标。 |
| 有效闭环数量/强度 |
整条轨迹中成功检测并验证的闭环数量,以及每个闭环的共视特征数。 |
> 1 per significant loop |
消除长期漂移的能力。越多越强的闭环越好。 |
经验法则 (Rule-of-thumb):即使没有动作捕捉系统提供的真值(Ground Truth),内部一致性指标(重投影误差、内点率)也是必须检查的。一个重投影误差很低(<0.5px)但最终漂移很大的轨迹,通常意着数据中缺少闭环。
15.5 轨迹平滑与时空重采样,导出统一 Schema
原始的 SLAM 输出需要精炼才能成为合格的训练数据。
- 轨迹平滑 (Smoothing):
- SLAM 输出的位姿可能存在由优化伪影或传感器噪声引起的高频抖动。
- 方法:可使用 Savitzky-Golay 滤波器,它能更好地保留运动的原始形态。对于更精细的控制,可以在李群(SE(3))空间上应用高斯过程回归 (Gaussian Process Regression) 进行平滑,这是一种更符合几何本质的概率方法。
- 警告:过度平滑会“抹杀”真实的急转弯、加减速等动态细节,损害模仿学习的效果。平滑参数需谨慎选取。
- 时空重采样与插值 (Spatio-temporal Resampling & Interpolation):
- SLAM 系统通常只在关键帧(Keyframes)上输出精确位姿,其时间戳是不均匀的。而下游的神经网络模型通常需要固定频率(如 10Hz)的输入。
- 插值方法:
- 平移部分 (Translation):简单的线性插值即可。
- 旋转部分 (Rotation):必须使用球面线性插值 (SLERP)。因为四元数代表的旋转位于一个四维超球面上,直接对四元数的四个分量进行线性插值会导致错误的、非匀速的旋转路径。
- 最终目标是为数据集中的每一帧视频,都生成一个与之精确对齐的、经过插值的 6-DoF 位姿。
- 导出统一 Schema (Unified Schema Export):
- 所有处理完毕的数据都应遵循一个严格、版本化的数据模式(Schema),并存储在可高效查询的格式中(如 Parquet)。
- 一个健壮的 Schema 应包含:
{
"sequence_id": "lab_corridor_walk_2023_10_26_01",
"source_video_file": "cam_front/001.mp4",
"processing_pipeline_version": "v2.1.3-colmap+gtsam",
"timestamp_ns": 1678886400123456789,
"frame_index": 123,
"pose_world_to_camera": {
"position_meters": {"x": 1.23, "y": 4.56, "z": 0.78},
"quaternion_xyzw": {"x": 0.0, "y": 0.0, "z": 0.707, "w": 0.707}
},
"quality_metrics": {
"mean_reprojection_error_pixels": 0.45,
"is_keyframe": true,
"local_inlier_ratio": 0.82
},
"calibration_id": "humanoid_head_v3_calib_2023_09"
}
- 这种详尽的元数据对于数据溯源、质量控制和模型迭代至关重要。
本章小结
本章构建了一个从原始视频到高质量轨迹数据集的完整算法蓝图。我们从 SfM/VIO/SLAM 的核心流程出发,详细分解了从特征提取到全局优化的每一步,并强调了各个环节的质量控制要点。我们深入剖析了单目视觉的尺度模糊性这一核心痛点,并给出了基于 VIO 和多摄系统的根本性解决方案。对于多摄数据,时间同步与外参标定的重要性和实施方法也被重讨论。我们提供了一套可量化的轨迹质量评估体系,确保了数据集的可靠性。最后,通过平滑、重采样和标准化的 Schema 导出,我们将原始的算法输出转化为可直接用于下游机器学习任务的、结构化的“数字资产”。
常见陷阱与错误 (Gotchas)
- 陷阱:忽视 IMU-相机的时间戳同步与外参标定
- 症状:VIO 系统初始化极其困难或完全失败;轨迹在运动过程中频繁发散;优化后的重投影误差和 IMU 残差居高不下,即使在静止时也存在显著漂移。
- 调试:使用 Kalibr 等工具进行精确的时间偏移和外参标定。一个简单的“闪光灯测试”(在所有相机视野内快速闪光)可以直观地暴露时间戳不同步问题。检查 IMU 的加速度计和陀螺仪噪声参数是否与传感器手册匹配。
- 根源:错误的标定参数为优化器提供了相互矛盾的“事实”,优化器无法找到一个能同时满足视觉和惯性约束的解,最终导致发散。
- 陷阱:滚动快门(Rolling Shutter)污染
- 症状:在机器人快速旋转或摄像头剧烈晃动时,轨迹出现波浪形或“果冻状”的误差。即使场景纹理丰富,重投影误差也无法降到理想水平。
- 调试:逐帧检查快速运动的视频片段,观察是否有明显的图像扭曲。
- 根源:消费级相机大多使用滚动快门,图像的顶部和底部不是在同一时刻曝光的。这违反了 SLAM 算法的“单瞬时曝光中心”的刚体假设。
- 缓解:在采集时避免剧烈运动。使用支持滚动快门建模的 VIO/SLAM 算法(如 ORB-SLAM3)。最根本的解决方案是使用全局快门(Global Shutter)相机。
- 陷阱:在低纹理或退化场景中盲目信任输出
- 症状:机器人在经过一面白墙、纯色地毯或充满反光的玻璃幕墙时,轨迹出现巨大的、瞬时跳变或长时间的零速漂移。
- 调试:将轨迹与视频同步回放,观察在哪些视觉场景下误差开始急剧增大。监控前端跟踪的内点率,它在进入退化场景时会暴跌。
- 根源:基于特征点的视觉里程计在缺乏稳定视觉特征的区域会“失明”。此时若无 IMU 辅助,系统将完全丢失跟踪。
- 处理:将这些数据片段标记为“低置信度”,在训练时可以降低其权重或直接剔除。
- 陷阱:混淆坐标系定义
- 症状:生成的轨迹在可视化时出现左右翻转、上下颠倒,或者与机器人的实际运动方向相反。下游模型学到的策略完全错误。
- 调试:明确定义并统一所有工具链中的坐标系:世界坐标系(通常是 Z 轴向上还是 Y 轴向上?),相机坐标系(是 OpenCV 定义还是 OpenGL 定义?),IMU 坐标系。做一个简单的“向前移动一米”的测试,验证输出轨迹的平移分量是否符合预期。
- 根源:不同的 SLAM 库、可视化工具和机器人框架(如 ROS)对坐标系的“前-右-下”或“右-下-前”等约定不同,未经转换直接使用会导致灾难性后果。在数据 Schema 中明确记录所使用的坐标系约定至关重要。