Reflex:人形机器人用自带相机接住抛来的箱子,却接不住更远、更小的

一个人抬起手,松手。纸箱离开掌心,沿一道不长的弧线飞向几米外的双足人形机器人。从箱子离手到它撞上机器人胸口,留给机器人的时间大约只有一秒。

2026 年 10 月,一个由华盛顿大学、斯坦福大学、南加州大学等机构研究者组成的团队把这一秒做成了,论文标题是 Reflex: Visually Grounded Reactive Humanoid Control,照字面翻译就是「视觉接地的反应式人形机器人控制」。它接得住这一秒,却不是在任何距离、任何箱子上都接得住。在模拟里,这套系统接住了 85.7% 的抛掷,把完整真值给到同一套身体的对照版本是 87.9%,两者几乎并驾齐驱;可同一套东西搬到真机上,2.5 米抛来的箱子接住 65%,5 米掉到 40%,7 米只剩 15%,箱子换成小号,真正被抱住的只有 25.5%,而它碰到箱子的概率有 58.1%。为什么一台人形机器人只靠装在身上的相机,能把高速飞来的箱子接住,却又偏偏在更远、更小这两个方向上失手?这是论文在讨论章节里自己先认下的缺口,也是下面每一段要回答的同一个问题。Reflex

图注:项目页公开的一段真机部署画面:一台人形机器人一臂举着带明显运动模糊的纸箱,对面是戴眼镜的抛箱者,左上角小窗是同场景另一机位的俯视画面。运动模糊说明这是抛接发生的瞬间,而不是摆拍;画面本身读不出具体距离,5 米这个数字来自该视频片段的标注。Reflex 项目页

要回到那个问题,得先知道它凭什么能接住。难的不是看见箱子,一个训练有素的检测器就能在图像里框出飞行中的纸箱;难的是看见、站稳、出手这三件事必须在一秒内同时闭环。控制周期是 20 毫秒,每秒要决策 50 次,每次决策都要输出全身 29 个关节的目标位置,它不是先想好一整套动作再执行,而是每隔 20 毫秒重新看一次、重新算一次。相机装在机器人自己身上,机器人一动画面就跟着晃;箱子越靠近,被手臂和躯干遮挡得越厉害,图像里可用的信息反而越少。远距和小箱子恰好压在这条闭环的两端:抛得越远,箱子飞得越快,留给感知和反应的时间越短;箱子越小,在画面里占的像素越少,越贴近遮挡最重的接触瞬间。

能接住这一切的,是一台 29 自由度的 Unitree G1,全程只用装在躯干上的一台 192×144 的 RGB-D 相机。没有外部动捕,没有贴在箱子上的标记物,也没有任何关于箱子位置和速度的真值输入。机载、低分辨率、还会随着身体一起晃,这三条既定义了它能拿到的全部信息,也提前规定了远距和小箱子这两个方向上的难度上限。

至于「失灵」具体指什么,论文先给了一把读它的尺子:结果分成三档,第一档拦截只看箱子在躯干附近减速到每秒 1 米以下,第二档接住要求箱子被托在胸口区域、两只手腕分列箱子两侧、不靠头部或肩膀借力,并且低速保持 0.6 秒,第三档再记录躯干是否晃到 38 度。分三档是为了把「碰到了但没抱住」和「抱住了但整个人快站不稳」这两种失败分开,而这正好解释了开头那组数字:小箱子的拦截率有 58.1%,接住率却只有 25.5%,落差全落在第一档到第二档之间。

缺口究竟出在眼睛还是身体上?论文给出一组很说明问题的对照。在 5 米这一档,箱子飞得比它训练时见过的任何一档都快,此时把真值状态直接给到那套已经练好的身体,成功率明显高于只给它视觉预测出来的信息,先垮掉的是眼睛,不是身体。小箱子那一边是同一个故事的另一种讲法:机器人常常摸到了箱子却没抱住,而且换成真值输入也救不回来,失灵因此发生在更早的环节。

两边的失灵最终都指向同一件事:这套系统学会的东西,取决于训练时它见过什么。模拟环境里的释放距离、箱子尺寸、颜色和落点都在随机变化,颜色增广还会在训练视觉模型时开启,但包络的边界很清楚,真机上的 5 米和 7 米抛掷速度比训练里任何一档都快,已经落在有效训练分布之外,尺寸则从来没有作为输入进入状态老师。这条随机化包络定义了后面所有评测的运行条件,也就此划出了开头那两个缺口的准确位置。

图注:论文给出的训练变化包络拼图。多个面板分别展示仿真中不同释放距离、不同箱子尺寸、不同颜色和不同落点的抛掷,底部一行是实测真实箱子的尺寸。它说明训练覆盖的是一整片参数区间,而不是某一种固定抛法;这是仿真与训练图,不是真机试验记录。Reflex

端到端为什么走不通,Reflex 把赌注押在哪里?

最直接的做法听起来也最自然:不拆解,直接训一个网络,输入像素、输出 29 个关节的角度,让它自己学会一切。论文把这扇门干脆地关上了,理由有两条,而且第一条就能用数字说死。

第一条是渲染成本。强化学习的每一步都要让策略在环境里试一次动作,如果观测是 RGB-D 图像,那么每一步都得现场渲染一帧图像加一张深度图。论文给出的对照非常直观:纯状态输入的 Stage 2 策略训练跑到每秒约 2.8 万个环境步,一旦把 192×144 的 RGB-D 渲染塞进训练循环,速度掉到每秒约 1500 步,差了将近二十倍。而 Stage 2 的 PPO 总共需要约 5900 万个环境步。不做解耦,这段训练大概要 11 小时;做了渲染剔除的版本,只要 35 分钟左右。整条管线里只有 Stage 3 需要渲染,它总共渲染约 160 万步。 AMP

第二条是监督信号太少、来得太晚。接住箱子的成功要等到箱子真的被抱住才出现,之前每一步的奖励几乎都是零。让一个网络在「巨大的视觉输入 × 29 维动作」这么大的空间里盲搜,还只有最后一下才有反馈,训练难度和样本效率都无法接受。

这两条合起来,指向一个判断:不该让一个网络同时学「看」和「动」,而应该在中间找一个接口,把两件事切开。Reflex 找的那个接口,就是一个 8 维的「物体动力学潜变量」。它要求视觉只负责回答一个问题,也就是从图像里能推断出哪些关于箱子的信息;至于这些信息该如何驱动身体,交给另一套已经练好的系统去决定。

这条路并不是凭空出现的。把视觉和全身交互放在一起做,早在 2020 年的 Catch & Carry 里就有完整示范,只不过它在 MuJoCo 仿真里用「低层运动基元加大模型高层策略」的层级结构完成,而且始终没有上真机。Catch & Carry

把既有工作按「覆盖了三个难点中的哪几个」摆开,缺口就一目了然。

既有路线全身平衡真实视觉接地真机迁移
固定基座机械臂接物弱,基座固定有,相机与基座不动有
动捕或标记物辅助的回击有弱,目标被外部感知有
早期视觉全身交互范式有有,但只在仿真无
端到端从像素训到关节有有计算上不可行

Reflex 要做的,是把这三件事在同一台真机上同时做对。它的聪明之处因此不在某个具体的网络结构,而在它选了一个足够小的接口,把「看」和「动」的耦合点收敛到 8 个数字上。

三级管线:一个 8 维向量怎么把「看」和「动」彻底拆开?

Reflex 的整条管线看起来有三个阶段,实际上可以理解成「两级冻结加一级学习」。前两级负责把身体练好,练好之后就锁死不再改动,最后一级才负责学那个唯一需要从数据里学出来的东西。

阶段一是状态老师。它用 PPO 在无渲染的仿真里学全身控制,可以看到箱子的状态真值。它的目标不是最终部署,而是成为一个「完美的老师」,供后面的阶段采样动作标签。阶段二学的是那 8 维潜变量:一个特权编码器把 26 维的箱子观测压成 8 维,同时训练一个解码器把这 8 维变回关节动作。这一步的关键是解码器必须学会「看到这 8 个数字该怎么动」。阶段三是视觉接地:一个视觉模型从 RGB-D 历史里预测出同一组 8 维数字。训练完成之后,阶段二的编码器和解码器都冻结,部署时真正在跑的只有阶段三的视觉预测器。

图注:论文的三级训练管线与策略架构总图。从左到右依次是阶段一用 PPO 训练的状态策略老师、阶段二把 26 维特权箱子观测编码成 8 维潜变量的特权编码器与解码器,以及阶段三从 RGB-D 历史加相机自运动预测同一潜变量的 CNN 加 GRU 视觉模块。图中标出的冻结标记说明阶段二与阶段三的复用关系,也说明解码器附带接收机器人与参考观测、输出 29 自由度动作。Reflex

为什么把耦合点选在 8 个数字上,而不是让视觉直接输出箱子的三维坐标、速度、姿态这么一长串量?这里有一个很关键的直觉。

不妨把这个 8 维潜变量想成一份只写给一位操作员的读数表。这位操作员早就训练有素,只认表上那几个指示灯的含义,然后据此做出动作。你不需要把整个三维场景复刻给他看,只需要把那几个他真正用得上、而且他看得懂的读数报准。Reflex 里的解码器就是这位操作员,8 维潜变量就是那排读数,而视觉模型的任务仅仅是把读数报准。对应关系是严格成立的:26 维的特权观测包含位置、速度、半轴长度、姿态、角速度等一大堆物理量,编码器压到 8 维时会丢掉控制器用不上的部分,只保留它能据此行动的信息。

论文用探针实验验证了这一点。从这 8 维潜变量里线性读出延迟之后的箱子位置和速度,判定系数能到 0.94 到 0.99;但读出箱子的尺寸、姿态和角速度,判定系数不超过 0.13。控制器不靠尺寸做动作,潜变量就干脆不编码尺寸。这个「接口的大小由控制器的敏感度决定」的配方有明确的方法学来源,论文直接沿用了 RMA 的思路:冻结动作解码器,只训练一个从历史回归潜变量的模型。RMA

另一个绕不开的问题是分布漂移。如果只用老师自己跑出来的轨迹训练学生,学生一旦开始自己探索,就会飘到老师从未到过的状态上去,潜变量的含义随之崩坏。处理这个问题的标准工具叫 DAgger,负责在学生的分布上重新打标签。DAgger

每一级具体怎么训:从状态老师到只看 RGB-D 历史的视觉策略

阶段一的目标是练出一个协调的全身,观测是 170 维的状态向量,网络是 512-256-128 的三层 MLP,配一个能看到未加噪完整姿态和箱子真值的非对称 critic。奖励分三段递进:先用接近奖励把手臂引向箱子,再用托举奖励把箱子带到胸口附近,最后用持续保持奖励巩固留住的动作。光靠任务奖励容易学到「能接但姿态诡异」的解,所以论文还叠了一项基于人体动作先验的风格奖励,让协调的运动会「顺便」出现,而不必手工写关节级的模仿奖励。AMP

阶段二把 26 维特权观测压成 8 维潜变量,训练手法相当克制。先用行为克隆做初始化,保留老师解码器的身体,只替换潜变量输入那部分的权重,并对「箱子可见」的样本加权五倍。这一步比简单地按位置速度映射权重高出 5.2 个百分点。接着做五轮 DAgger 式的数据聚合,最后用 PPO 联合微调编码器和解码器。这里还显式注入了 20 到 60 毫秒的观测延迟采样,让控制器学会在「看到的其实是过去」的条件下做判断。

图注:两轮 DAgger 式数据聚合的循环。学生先在自己分布下 rollout,再由冻结的老师对访问到的状态重新打标签,聚合后回训。阶段二用状态老师打标,阶段三改用冻结的特权编码器打标,同一机制被复用了两次。

阶段三是整条管线里唯一难训的部分,也是论文着墨最多的地方。它的输入是长度为 25 帧的 RGB-D 历史,输出还是那 8 维潜变量,解码器和关节指令接口原封不动。这里有三处设计值得单独说清楚。

第一,CNN 不直接回归箱子的三维坐标,而是输出一张箱子定位热力图,再由一个固定几何层把热力图转成 8 维几何特征。之所以绕这一道,是因为箱子靠近时会被手臂挡得厉害,直接回归坐标在遮挡下很容易跳变,而热力图能让模型「锁住」目标的大致位置。论文验证,去掉热力图监督会掉 7.4 到 10.9 个点。

第二,负责时序的两层 128 维 GRU 必须额外吃进 9 维的相机自运动信息。原因说起来朴素但极易被忽略:图像里的运动等于物体运动叠加相机自身运动,相机装在机器人身上,机器人一动,画面里的一切都在动。去掉相机自运动信息,成功率会掉 10.4 到 22.6 个点。

第三,也是最容易被轻视的一条,时序历史本身。把 25 帧历史砍成单帧,居中抛掷掉 35.6 个点,横向偏移抛掷掉 39.8 个点,是所有消融里最惨烈的。原因和前面注入延迟的逻辑一致:真机上从相机曝光到控制节拍的中位延迟是 69.1 毫秒,这意味着「此刻看到的」永远是 69 毫秒前的事。只看一帧,模型连物体往哪个方向飞都判断不出来;有了一段历史,它才能反推出运动趋势。这三处加起来,说明阶段三真正的难点不在网络有多深,而在两件事:相机自己也在动,以及真实延迟让感知天生滞后。

真机 65/40/15% 背后:哪些数字不能只看表面?

先看这套系统在硬件上确实跑通了。论文放出的真机拼图覆盖了距离、箱子尺寸、载重和横向偏移四类变化,每一格都包含释放、接近、接住三个时刻,并附带机载相机的小窗。

图注:论文的真机接箱拼图,展示同一套视觉潜变量控制器在 2.5、5、7 米距离以及小、常规、大三种尺寸箱子上的成功试验,右侧一列是 0.5、1、2 千克载重的成功实例,底部一行是向右 0.9 米、向左 0.7 米横向偏移的成功实例。每格含释放、接近、接住三帧,并叠加机载相机小窗,白色轮廓标出箱子位置,虚线表示飞行方向。图中只收集成功试验,成功率数字在正文表格里而不在图上。Reflex

在模拟里,视觉潜变量输入能拿到 85.7% 的接住成功率,直接把特权潜变量喂给同一个解码器是 87.9%。到真机,2.5、5、7 米三档分别是 65%、40%、15%。作为参照,三位人类接箱者在同样三个距离上的成绩是 85.0%、68.3% 和 28.3%,也就是说机器人在 2.5 米和 5 米达到了人类同距离水平的 76% 和 59%,到 7 米则明显掉队。

问题是这些数字不能只看表面,论文自己给出了三层限定。

第一层是样本量。真机每个条件只做了 20 次试验,这样算出来的比例的 95% 置信区间可以宽到正负 20 个百分点。65% 和 40% 之间的差距,很可能就落在这个区间之内。所以这些数字更适合看作「在什么量级的成功率」,而不是精确的排行榜分数。

第二层是训练覆盖范围。阶段三的训练数据集中在 3.0 到 3.5 米,而 5 米和 7 米抛掷的速度比训练里见过的任何一档都快,已经落在有效训练分布之外。这个缺口有多大,论文给了一组很直白的对照:5 米抛掷上视觉输入只有 43.0%,把特权潜变量给到同一个解码器则能到 79.7%。也就是说减速的不是身体,而是眼睛。论文做了补课实验,往阶段三里加入远距离抛掷后,模拟中的 5 米成功率能从 43.0% 提到 75.8%,但这一版还没有上硬件验证。

第三层是延迟。真机的相机曝光到控制节拍中位延迟是 69.1 毫秒,而训练时的延迟随机化范围是 20 到 60 毫秒。论文做了一个非常说明问题的消融:如果训练时不做延迟随机化,那么每一个测试延迟档位的成功率都会低 5 到 11 个百分点,而 60 和 80 毫秒这两档恰好把真机的中位延迟夹在中间。硬件就压在这条快速下滑的曲线上,训练分布一旦不覆盖它,真机就吃亏。

除了这三层限定,还有两个反直觉的结果值得留意。

一个是横向偏移。当箱子落在机器人侧方 0.6 米和 0.9 米处时,视觉策略反而比使用真值状态的状态策略高出约 12 个百分点。这不是视觉本身更准,而是「抗偏移」这件事在阶段二的 PPO 联合优化里被做进了潜变量控制器,而阶段一的状态老师并没有被专门优化到这个方向。换句话说,阶段一并不构成能力上界。

另一个是尺寸盲。面对小箱子,视觉策略的成功率只有 25.5%,拦截率却高达 58.1%,说明它常常摸到了却没抱住。更关键的是,改成特权输入也救不回来,成功率也只有 19.5% 到 21.6%。原因在阶段一:老师从来没在「尺寸会变」的前提下训练过,潜变量也就没有编码尺寸。最终结论是论文自己写下的:这个控制器基本上是尺寸盲的。

放进 2026 年的 G1 生态:Reflex 独特在哪,边界又在哪里?

Reflex 不是同期唯一在 Unitree G1 上折腾箱子的人。把 2026 年这几项工作摆在一起,分野立刻显现。

最直接的对照是同周提交的 Workhorse。它用同一台 G1,也演示了接抛来的箱子,但走的是完全不同的路线:从人类示范里学,接口是躯干、双腕、双脚这五个连杆在任务空间里的位姿,视觉规划器只跑 5 赫兹,全身跟踪器跑 50 赫兹。值得注意的是,Workhorse 只报告了仿真中的箱体搬运成功率,真机接箱并没有给出数字。Workhorse

Workhorse 在一个 Reflex 完全没有的维度上做到了事情:扰动恢复。它演示了在搬运箱子时被推、被踢、箱子被抽走又扔出去等六类干扰,机器人都能稳住并继续任务。

图注:Workhorse 在真机 G1 箱体搬运过程中的扰动恢复网格,六行分别对应六类干扰,每行是同一连续运行中八个等间隔时刻。从上到下依次是箱体被推出手臂、躯干被踢、伸手时箱子被抽走并再踢、行走中被硬推、箱子被夺走并抛出、下蹲时背部被按压。图片为空箱搬运任务,不是接箱任务,也不含任何成功率数字。Workhorse

这条对照很诚实:Workhorse 有扰动恢复实验,Reflex 没有任何一项。这本身就是 Reflex 边界的一部分,它证明的是「在约一秒反应窗口内接住飞来的箱子」,而不是「被推了还能稳住」。

另一个参照是 Pro-HOI,它用根轨迹当规划接口,物体始终抓在手里、状态变化缓慢,靠数字孪生预测落点来处理滑落,还演示了连续十五个以上的搬运周期。它的压力设定和 Reflex 完全不同:物体在手中,而不是在飞行中。Pro-HOI

还有一层分工同样重要。Reflex 其实只负责「接住并稳定保持 0.6 秒」这一小段,之后控制权交给一个叫 SONIC 的通用运动基座,由它带着箱子走过去、交还给人。SONIC 这样拆的好处是 Reflex 不必去学长程行走,代价是任务串起来之后成功率会一路衰减:接住之后 65%,搬起来 35%,交还 30%,返回起点 25%。每一步单看都不差,串成一条链就只剩四分之一。

论文自己列出的边界还有几条:它只做单一任务,真机每个条件 20 次试验;硬件延迟只在基于检测器的那条管线上测过;控制器基本看不见箱子尺寸;渲染时没有建模运动模糊、自动曝光动态和结构光深度伪影。代码与权重的公开情况、完整的训练算力开销,论文也没有披露。

那么落到最后,Reflex 真正的贡献是什么?与其说它证明了「人形机器人能接纸箱」,不如说它证明了「先把身体练好并冻结,再只学一个从视觉到小向量的映射」这条路在真机上走得通。这是一套可以复用的反应式技能配方:拦截、避让、交接、物理协助,凡是要在一秒内看准并出手的技能,都可以套用同一个结构。它接得住什么和接不住什么,是同一枚硬币的两面,而它诚实地把两面都摆了出来。

想深入可以读原文:Reflex: Visually Grounded Reactive Humanoid Control — arXiv:2610.12772

参考文献

Reflex:人形机器人用自带相机接住抛来的箱子,却接不住更远、更小的