十毫秒级全身反射

——极速触觉反射

目录

01    为什么这件事在人形机器人上格外难

20 ms 的延迟,代价是两倍冲量

感知上也有一道时间关

02    10 ms 的反射通路

一身“电子皮肤”

反射位姿:一次 4 ms 的全身约束优化

03    让反射和策略同时握方向盘

反射进训练循环:先让它“见过”

反射透明:让策略“以为什么都没发生”

反射知情:局部退完之后,还得“走出去”

04    实验

三类接触,一套反射

消融表读出的三件事

05    写在最后


人形机器人的“反应慢”,很多时候问题并不在算法,而在于时间。

碰撞发生之后,第一个力峰往往在几十毫秒内出现,而一个跑在 50 Hz 的全身策略,光是等下一次推理就要 20 ms。

而且现在主流的全身控制是运动跟踪范式——策略被训练成“把实际状态拉回参考轨迹”。你给它一个保护性撤回,它会把这件事当成自己的跟踪误差,然后主动把这个动作抵消掉。域随机化训练得越狠,这种“拒绝扰动”的本能越强。

清华、北大与 Galbot 的这篇 ReflexArc (ARC)同时在这两点上做了调整:一条 10 ms 内直达电机的反射通路,加上三套让反射与策略“同时握方向盘”的机制。

对人形机器人来说,冲击抑制的瓶颈是反射到达电机的时刻,动作本身反倒不是关键。

▲图 | 基于 ARC 的全身触觉反射。(a) 触觉反射(橙色)在首个冲击峰值前抵达电机;若把同一反射经由策略(白色)下发,会多出一次推理步延迟。(b) 策略在维持反射的同时继续跟踪任务。© 策略完成后续行为——此处为依靠足部触觉、在无视觉条件下跨过障碍

01    为什么这件事在人形机器人上格外难

20 ms 的延迟,代价是两倍冲量

机械臂上做碰撞反射相对简单:检测到碰撞,底层控制器接管几百毫秒,任务先停一下,退开再说。

人形机器人做不到:撤回过程中它必须靠全身策略维持平衡,躯干和膝关节的动作直接改变支撑与质心,甚至一个手部的撤回也要全身配合。

结果是两套控制器不能按关节分工,只能同时作用于同一组自由度。这也是 ARC 要处理的核心矛盾:反射要够快、要够硬,但平衡和任务不能交给它。

▲图 | 延迟对接触冲击的影响。蓝/红:额外 0/20 ms 延迟。实线为接触力(左轴),虚线为手部位移(右轴)。阴影为 F>2 N 区间的冲量积分。去掉 20 ms 延迟后,首个力峰值从 21.64 N 降至 14.25 N,接触冲量从 0.2632 N·s 降至 0.1225 N·s(2.15 倍)

在这个冲击实验中,他们没有用机器人自己身上的皮肤测力,因为快速运动会带来振动噪声;力传感器装在被撞的那个固定盒子上,再用一台 240 Hz 的动作相机跟踪接触点附近的光标做第二路时间校验。

两路数据对延迟差异的判断是一致的。

感知上也有一道时间关

常规触觉感知关心的是“长期接触模式”,而这里只有起始帧可用。危险接触通常要到第 2–3 帧才能明确区分,那时已经晚了。

研究把这种“第一时间认出威胁”的能力叫 tactile startle(触觉惊吓),并用两个特征把“刚发生的碰撞”和“皮肤自身振动”分开:

碰撞会激发一小片空间上连通的 taxel 群,邻居读数同步上升;而基底振动是弥散的。再叠加“平时安静的 taxel 突然有响应”这一条,检测在起始后 5 ms 内完成。

02    10 ms 的反射通路

一身“电子皮肤”

触觉贴片贴在腕、肘、膝、胸、背和双足上表面——都是运动中最容易撞到的凸起部位。每片是柔性压阻织物,16 cm × 8 cm 内布 128 个 taxel,300 Hz 采样。

上机后逐点标定,并注册进一个数字孪生:每个 taxel 记录其父连杆、相对位置和表面法向。

这一步是后面求解器能“知道撞的是哪儿、往哪个方向退”的前提。

每个 taxel 还有一个随自身噪声基线变化的自适应阈值,平时安静的 taxel 会自动变得更敏感。阈值化后的读数在网格上做连通域标记,取质心与法向跨度,就得到接触位置和撤回方向。

反射位姿:一次 4 ms 的全身约束优化

拿到受击点和撤回方向后,问题变成:在 29 个自由度上,找一个“既能退开、又不至于把自己弄倒”的位姿。研究进行了带约束的优化:

目标里五项:撤离量(相对质心算,防止“整机平移冒充局部后退”)、方向锥(限制世界位移落在撤回方向的锥内,避免变成横着扫)、全身与水平质心的惯性代价、关节位移正则。

约束三项:关节限位、起始时刻选定的支撑帧保持不动(平衡交给策略)、自碰撞对的最小距离。

其中惯性代价这一项用了全身惯性矩阵(而不是简单按关节角加权),所以“转腰”和“转腕”不再等价;同时对竖直方向的质心平移做了释放,膝盖被撞,伸腿是自然反应,不该被“禁止抬升”这条罚掉。

求解用一串局部二次规划(LQP),每轮在当前点重新线性化,但所有运动代价都统一对着同一个初始位姿 q0 计算:每一轮都在精修同一个终点,而不是把上一轮的迭代当成免费的起点。

整次求解机载 4 ms 内完成,加上检测,从碰撞到电机拿到指令在 10 ms 以内。

如果第一次反射还没做完又来一次撞,新的求解会以被打断那次反射的终点位姿为锚点,而不是实测位姿——因为实测位姿无法表达“身体正在往哪去”。

这个小细节决定了连续碰撞下会不会越退越乱。

▲图 | 针对不同接触求解出的反射位姿。从相同初始构型出发,求解器根据被撞的身体部位与来向(球体)给出不同的全身反射位姿

03    让反射和策略同时握方向盘

只有通路快是不够的。

你把一个策略没见过的状态硬塞给它,它要么崩,要么把这个动作抵消掉。

ARC 用三套设计分别解决三个不同阶段的问题。

▲图 | ARC 总览。危险接触在毫秒内被定位,全身反射位姿被求解,电机在碰撞后 10 ms 内完成撤回;反射随后自下而上传递给策略,由策略维持反射、继续任务,并借助人类先验自然地退离接触区域,避免二次碰撞

反射进训练循环:先让它“见过”

策略的观测空间在常规的目标与本体感知之外,增加了一路反射观测:每块贴片是否有触发、受击点的位置与方向、当前正在施加的反射动作。

跟踪目标在反射期间改成“参考动作 + 反射偏移”。

但在工程上有个问题是:反射在场景里是低频事件,而且各并行环境触发时刻不同,一次 LQP 求解会让其余环境干等。

因此做了 ARC-Gym:跟踪训练与反射训练交替进行;跟踪迭代中发生碰撞不立刻触发反射,而是把碰撞状态存进缓冲区、重置该子环境,等这一轮跟踪跑完,把缓冲的碰撞一次性批量求解,再让各子环境从缓存状态开始反射训练。

反射透明:让策略“以为什么都没发生”

既然反射是外部危险触发的、本质上不可预测,那就不该要求策略为每个反射方向都学一套应对。

ARC 干脆把反射从策略的视野里抹掉:

  • 感知端:喂给策略的关节位置 = 真实位置 - 反射偏移;
  • 执行端:发给电机的 PD 目标 = 策略输出 + 反射偏移。

于是策略只面对一个分布,而不是“每个反射方向一个分布”。

但只做坐标平移还不够,反射确实改变了动力学,后续状态就是不一样了,补偿会以更隐蔽的形式冒出来。

所以他们加了一项反事实监督:用 DAgger 约束策略输出,使其贴近“如果没有这次反射,策略本来会输出什么”。

这一项不是让它模仿,而是防止它在执行层面把反射慢慢磨掉。

▲图 | 单一映射。我们从观测到的关节位置中减去反射偏移,并把它加回策略输出的关节目标,使策略只面对一个分布、而非每个反射方向各一个分布;同时用 DAgger 以“若无反射”的反事实输出做监督

反射知情:局部退完之后,还得“走出去”

反射只能在毫秒尺度上做局部撤离。受支撑帧和关节限位约束,单次姿态变化没法把机器人带出接触区,剩下那段路必须由策略在秒级完成。

这里有个现实困境:当前参考轨迹可能压根不允许这种位移,甚至要求机器人原地不动、或者继续朝接触方向走。而一旦策略离开参考,跟踪奖励就不再约束它怎么动,它就会用最省事的方式完成位移——原地扭、横着蹭,既不自然也不稳。

ARC 的做法是采一套人类在不同方向重新站位的动作数据,作为 AMP 奖励,只在反射期间激活。它约束的是“离开参考之后的行为”,而不是全程的动作风格。

这套机制还带来一个副产品:它能反转任务的长期方向。

人快被门槛绊倒时,第一反应是收脚,但接下来往往是迈过去而不是退回来。

把长期任务奖励的方向反转、再补少量对应的人类演示,ARC 就能在足底触觉触发后,无视觉完成跨门槛和上台阶。

04    实验

三类接触,一套反射

在 G1 上覆盖三类危险接触:运动中撞静态障碍、原地被动态物体撞、与运动中的人或另一台机器人相撞;十余个跟踪任务(走路、武术、舞蹈)。此外还演示了受保护的遥操作(ScaleBFM)和无视觉的足底引导通过。

遥操作中把解出的 Δq 直接叠加到参考上,不需要额外训练就能适配通用跟踪器;但经由跟踪器下发的“自上而下反射”延迟明显更高。

不只是多一次推理,还因为通用跟踪器本身偏向平滑连续的运动,一个突变的 Δq 恰好是它被训练来回避的东西,所以会被“慢慢地”实现出来。

▲图 | 真实世界任务。ARC 在运动跟踪、遥操作与通过性三类场景中评估,涵盖与静态障碍、动态物体以及运动中的人的接触

消融表读出的三件事

表格里头把指标按阶段分成局部撤回、接触、全局恢复三组。挑三条最能说明问题的:

拿掉反射进训练循环:存活率掉到 82.0%,接触冲量从 3.42 升到 4.34 N·s,90.9% 的试验在分离后再次撞上同一个障碍。策略没见过反射后的状态分布,撤回完就接不住。

拿掉透明化:撤回距离从 11.06 cm 掉到 6.74 cm,补偿分数 C 从 -9.1% 变成 +29.7%(正值意味着策略在对抗反射),冲量升到 4.22 N·s。注意它的“再次碰撞率”反而略低(58.3% vs 59.4%)——这恰好说明“没再撞”不等于“处理好了”:反射在半路被策略抵消,机器人根本没退到位。

拿掉自适应:局部撤回还在,但根位移停在 -0.01 m,88.0% 的试验再次撞上。反射本身工作正常,但后面没有任何东西接手。这是另一种失败:撤回是真的,恢复是假的。

还有一个对照值得看:把 AMP 换成“直接跟踪一段撤退动作”,撤回距离反而更大(10.89 cm),但冲量升到 4.91 N·s,3 s 内达到 1.5 m 的只有 14.1%(ARC 是 63.0%);去掉 AMP 后,上台阶和跨门槛成功率直接归零。

说明“退得远”和“退得对”是两件事,固定的撤退轨迹不会随实际接触调整,也接不上后面的通过行为。

▲表 | 消融实验。

05    写在最后

决定冲击大小的不是“退不退”,而是“什么时候退到”。20 ms 的差别换来 2.15 倍冲量,说明全身策略这条自上而下的路径,在物理接触这件事上存在结构性延迟,不是调参能解决的。

ARC 给出的解法是把控制权在时间上切开:毫秒级交给反射,秒级还给策略:

中间的冲突靠“训练时见过、感知上抹掉、执行上加回、反事实约束”这四步化解。

这套思路放在机械臂、四足、外骨骼其实都能复用。

至于它是否算“人形机器人安全”的通用答案,还早。触觉皮肤的成本与布线、覆盖面的取舍、以及缺少跨方案对比,都让它目前更像一个把问题定义清楚的原型,而不是可直接量产的安全层。

Ref

论文标题:ReflexArc: Bottom-Up Integration of Instantaneous Tactile Reflexes into Whole-Body Humanoid Control

论文标题:https://arxiv.org/pdf/2611.04424

项目链接:https://minusmodulo.github.io/reflexarc-website/

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐