3. 数据采集基础
在 LeRobot 的模仿学习工程中,数据采集是决定策略上限的第一道关口。模型再先进,也无法从噪声大、标定错、动作空间混乱的数据中学到稳定可用的操作技能。本节围绕四个基础问题展开:用什么设备遥操作、相机如何标定、关节状态与动作如何定义、数据以什么格式落盘。理解这四点,才能保证后续训练与部署的一致性。
一、遥操作设备:把人的动作变成机器人可学的信号
遥操作设备的核心作用,是让操作者以自然方式产生示范轨迹,并同步记录机器人本体状态与视觉观测。常见方案包括主从臂(leader-follower)、空间鼠标/手柄、VR 控制器以及动捕手套。在 LeRobot 生态中,最典型的是 SO-100/SO-101 这类低成本主从臂:操作者手动拖动 leader 臂,follower 臂按关节映射跟随,同时采集 follower 的关节位置与相机画面。
选择设备时要关注三点:自由度匹配(主从关节数是否一致)、回传延迟(影响示教流畅度)、可重复性(同一动作多次示教是否一致)。延迟过高会让操作者过度修正,数据中充满抖动;自由度不匹配则需要做映射,容易引入额外误差。
二、相机标定:让像素坐标与机器人空间对齐
相机标定解决两个问题:内参(焦距、主点、畸变)和外参(相机相对机器人基座或末端的位置姿态)。内参决定像素到归一化平面的映射,外参决定视觉观测与动作空间的几何关系。若只做端到端策略,外参不显式使用,但相机安装位置必须固定且可复现,否则同一任务在不同安装下分布漂移。
标定流程通常为:打印棋盘格/ArUco 标定板 → 多角度拍摄 → 检测角点 → 求解内参 → 固定相机后求解外参 → 验证重投影误差。LeRobot 常用 OpenCV 完成内参标定,外参可用手眼标定或直接测量安装位姿。
# 内参标定示例(OpenCV)
python -m lerobot.calibrate_camera \
--images ./calib_imgs \
--pattern 9x6 \
--square_size 0.025 \
--output camera_intrinsics.json
标定完成后应保存为 JSON,并在数据集中记录相机名称、分辨率、帧率与内参文件路径,便于复现与跨设备迁移。
三、关节状态与动作空间:统一“看什么”和“做什么”
关节状态(state)是策略的输入之一,动作(action)是策略的输出。二者必须使用同一套关节顺序、单位与坐标系。常见定义包括:关节角度(弧度或度)、关节速度、末端位姿(位置+四元数)、夹爪开合度。LeRobot 通常以关节位置作为 state 和 action 的主要维度,夹爪单独一维。
动作空间有三种典型形式:关节空间(直接输出各关节目标角)、末端空间(输出末端位姿,需逆解)、增量动作(输出相对当前状态的 delta)。关节空间最稳定,适合低成本臂;末端空间更易跨本体迁移,但依赖运动学求解质量。
| 维度 | 常见定义 | 单位/范围 | 注意事项 |
|---|---|---|---|
| state | 6 关节角 + 夹爪 | rad / 0~1 | 顺序固定,与 URDF 一致 |
| action | 6 关节目标角 + 夹爪 | rad / 0~1 | 需与 state 同序 |
| 图像 | RGB 观测 | H×W×3 | 分辨率、帧率固定 |
| 时间戳 | 采集时刻 | 秒或纳秒 | 用于对齐与回放 |
四、数据格式与存储结构:让数据可读、可训、可复现
LeRobot 数据集通常采用分 episode 存储的结构:每个 episode 是一段完整示教,包含若干帧的观测与动作。常见格式为 Parquet(表格数据)+ MP4(视频)或直接存为 HDF5。目录结构大致如下:
dataset/
meta/
info.json # 数据集元信息:fps、features、相机名
stats.json # 各维度均值/方差/极值
episodes.jsonl # episode 索引与长度
data/
chunk-000/
episode_000000.parquet
episode_000001.parquet
videos/
observation.images.top/
episode_000000.mp4
其中 info.json 定义 features 的 shape 与 dtype,stats.json 用于归一化。训练时按 episode 采样,避免跨 episode 拼接造成时序断裂。采集阶段还应记录任务描述、操作者、设备型号与标定文件,方便后续复盘与数据筛选。
五、常见误区与复盘清单
- 标定一次用到底:相机被碰过、换镜头或重新安装后必须重标,否则视觉分布漂移。
- state 与 action 不同序:训练不报错但策略学反,表现为动作镜像或抖动。
- 忽略时间戳:图像与关节读数不同步,策略学到“看前一帧、做后一帧”的错位关系。
- episode 切分过碎:每条太短会导致策略缺乏完整任务上下文,建议单条覆盖完整操作流程。
- 不记录元信息:缺少 fps、相机名、标定文件,后续无法复现或做数据筛选。