远程操作入门:机器人如何向人手学习
远程操作是当下大多数机器人操作数据的来源。走进采集流程:装置、延迟、标注,以及把录像变成训练信号的质检。
想象一所机器人实验室里的一名研究生,一只手握着一台小巧的主动臂(leader arm),另一只手扶着咖啡杯。她移动主动臂,长凳另一端的从动臂(follower arm)便同步复现她的每一次开合,直到把一条毛巾叠成整齐的方块。她把毛巾抖开,再叠一次,如此反复。一个下午下来,她记录了两百次折叠,而每一次都是一个训练样本。
今天很大一部分机器人操作数据正是这样得来的:不是从网络抓取,也不是在仿真里凭空生成,而是由人实时驾驶机器人演示出来的。开源的 DROID 数据集是一个不错的参照:大约 76,000 条演示轨迹、约 350 小时的交互,由 13 家机构、约五十名操作者用一年时间采集而成。与语言模型背后动辄上万亿 token 的语料相比,这个规模非常小,而且每一条轨迹都是人一手换来的。
远程操作(teleoperation)是具身智能的主力,却远不如它所喂养的模型光鲜。本文将完整走一遍演示数据的采集流程:一次演示究竟包含什么、操作者用什么样的装置生成它、延迟为何会悄悄拉低数据质量,以及决定一段录像是信号还是噪声的标注与质检工作。
一次演示到底是什么
抛开术语,一次演示其实是一束同步的时间序列。在一个 episode 的每一时刻,装置都会记录机器人看到了什么、身体处于什么姿态,以及操作者让它做了什么。
- 观测:一路或多路 RGB 视频(腕部相机加一路场景相机很常见),有时还有深度,有时还有触觉读数。
- 本体感知:关节角度、末端执行器位姿、夹爪开合宽度、腕部受力。
- 动作:操作者下发的指令,通常是目标位姿或关节增量,外加一个夹爪开合信号。
- 元数据:任务标签、成功标志、时间戳、相机标定,以及机器人的本体形态。
一个 episode 就是对某一任务的一次尝试,从复位到终止状态,通常持续几秒到一分钟。采样率的影响比看上去更大:ALOHA 式的双臂装置一般以约 50 Hz 记录,因此一次十五秒的折叠大约是 750 帧同步数据。采样率太低,快速动作会出现混叠;太高,则会让存储和数据加载被大量冗余帧淹没。动作流里还藏着一个更安静的选择:记录绝对目标位姿,还是相对增量。绝对动作便于回放,却把数据绑死在某一种工作区布局上;增量在不同装置间迁移得更好,但会累积微小误差。采样率与动作格式都是很早的决策,事后都很难更改。
装置:从主动臂到 VR
人与机器人之间的接口决定了下游的一切:动作看起来有多自然、episode 累积得有多快,以及哪些误差会被固化进数据。没有唯一的赢家,只有取舍。
| 装置 | 工作方式 | 动作保真度 | 吞吐量 | 典型用途 |
|---|---|---|---|---|
| 主动-从动臂 | 操作者反向拖动机器人的小型孪生臂,关节一一映射 | 高,可感知力 | 中等 | ALOHA 及多个双臂数据集 |
| VR 手柄或手部追踪 | 头显追踪手部位姿,重定向到末端执行器 | 中到高 | 中等 | DROID、人形与移动操作采集 |
| 三维鼠标(SpaceMouse) | 六轴手柄在笛卡尔空间里微调末端执行器 | 中,偏刻意 | 高,且便宜 | 桌面级低成本单臂远程操作 |
| 外骨骼或数据手套 | 穿戴式连杆或传感手套读取操作者自身关节 | 手部保真度高 | 较低,布置繁琐 | 灵巧的多指任务 |
| 动觉示教(直接拖动机械臂) | 操作者亲手移动经重力补偿的机器人 | 高,但没有相机视角 | 低 | 快速的单臂技能 |
两股力量相互拉扯。保真度更高的装置,比如带力反馈的主动臂,能捕捉接触密集任务所需的细微柔顺,但价格昂贵、运行更慢。更廉价的装置,比如 SpaceMouse,可以铺开到许多工位、许多楼宇,代价是动作看起来更「机器」。便携的 VR 手柄同样能这样铺开,DROID 正是借此获得场景多样性的。如何取舍,取决于瓶颈到底是数据量还是数据丰富度。
延迟是隐性的税
每一套远程操作系统都是一个把人放在回路里的控制环。操作者看到一帧画面,做出判断,移动控制器;指令传到机器人,机器人动作,新画面再传回来。把相机曝光与编码、网络跳数、控制周期和显示加在一起,即便是本地系统,往返时延也很少低于 100 ms;跨网络则可能糟糕得多。
人在大约 100-150 ms 处开始感到回路迟滞,于是会像网络卡顿时的司机那样去补偿:放慢速度、先冲过头再修正、分小步移动。这些补偿会被如实记录为动作。在高延迟演示上训练出的策略,会把这种迟疑当成任务本身来学。这正是为什么低延迟、干净的装置产出的数据训练效果更好,而不只是采集时手感更舒服。
还有一种更隐蔽的失效。如果观测流与动作流由不同的时钟打时间戳、又从未被正确对齐,数据集就会教会模型:机器人是在触发它的指令之前就动了。亚帧级的时间同步是不起眼的底层管道,却是相当多数据静默损坏藏身的地方。
机器人策略会继承操纵它的那些人的习惯。如果每个操作者都在同一处犹豫,模型也会犹豫,再多的参数也劝不动它改掉。
从片段到标签
原始录像还不能直接拿来训练。如今的视觉-语言-动作(VLA)模型期望每个 episode 都带一条自然语言指令,比如「把毛巾叠好」或「把杯子放到架子上」,往往还需要更细的结构:子任务分段、抓取与释放处的关键帧,以及一个可靠的成功或失败标签。
其中一部分可以在采集时用模板完成,操作者在每个 episode 前从菜单里选好任务。其余则要靠人工复核:观看片段、纠正标错的结果、撰写或核对语言标注。像 LeRobot 这样的工具集把 episode 格式标准化,使来自不同实验室、不同机器人的数据得以汇聚,这正是 Open X-Embodiment 这类跨本体工作的前提。一个借自强化学习的实用技巧是事后重标(hindsight relabeling):一段没有命中预期目标的录像,其实成功完成了它实际做到的那件事,因此可以用达成的目标重新标注,而不必丢弃。事实证明,标签在各来源之间的一致性,其重要性不亚于 episode 的原始数量。
质检:数据与噪声的分界线
采集只是堆出了一摞 episode,质检才决定哪些能留下来,价值也大多在此产生。
- 成功筛选:丢弃或重标失败的尝试,除非是有意保留失败以学习恢复行为。
- 同步与标定检查:核对相机外参、时间戳与本体感知是否一致,并在长时间采集中标记出安装松动带来的漂移。
- 异常与重复检测:揪出丢帧、卡死的数据流,以及那些只会虚增数量、却不增加多样性的近乎雷同的 episode。
- 回放验证:在机器人上或仿真中重新执行所记录的动作,确认它们能复现出同样的结果。
把这一流程记录清楚的数据集,比如详细说明其多机器人、多传感器采集协议的开源数据集 RH20T,要比一份更大却毫无出处的堆料有用得多。实践中,团队往往会丢掉所采集数据中相当可观的一部分。这个丢弃率是特性,而不是失败。
力气真正花在哪里
机器人数据集的头条数字,是演示的数量。而真正预示策略能否泛化的那个数字,更难印在标题上:场景有多多样、时间对齐有多干净、失败标注有多诚实、语言在不同操作者之间有多一致。远程操作看起来是简单的那部分,无非是一个人把机器人摆弄来摆弄去。把这些动作变成训练数据的工程,才是难的那部分,也是值得做对的那部分。