RAX: 具身智能的扩展新轴——从在线试错探索到自主代码编译

核心元信息

维度 内容
研究机构 Harvard, NVIDIA, UC Berkeley, MIT, Stanford
项目与代码 Project Page · GitHub (rax) · skills-lib
测试本体 单臂 Franka FR3、双臂 ARX X5、Allegro 灵巧手、移动双臂 Rainbow RB-Y1、双足人形 Unitree G1
仿真基准 RoboDojo, BEHAVIOR-1K, HumanoidArena, DexJoCo, LIBERO, LIBERO-Pro
主要基线对比 端到端 VLA (π0,π0.5\pi_0, \pi_{0.5}, OpenVLA, GR00T), 世界动作模型 (Fast-WAM, PointWAM, WB-WAM, VPP2), 模仿学习 (ACT, Diffusion Policy)

一句话本质 (TL;DR)

当具身智能全行业陷入“雇人采集数万条低频遥操作示教”的内卷困境时,RAX 践行了 Richard Sutton 的 The Bitter Lesson:彻底废弃示教数据与策略参数更新,利用冻结的通用编程智能体直接调用底层原子 API 试错探索,并将跑通的闭环逻辑“即时编译”(JIT Compile)为独立的 Python 几何与控制程序。在 6 大仿真基准和真实机械臂上,它证明了基于显式三维几何与分层断言的程序化策略,在空间扰动泛化上断层式碾压主流端到端 VLA。


💡 对话攻克与认知记录(Aha Moments & Q&A)

Q1: 相比之前的 Code-as-Policies 和 Agent 驱动机器人,RAX 到底新在哪里?它真的只是“安全做得好了一点”吗?

  • 攻克认知:
    1. 废黜人工动作基元(No Hand-engineered Primitives):以往的 Code-as-Policies(如 SayCan, VoxPoser)所谓的“写代码”,本质是拼积木——人类工程师提前写好了高度封装的 robot.pick(cup) 或 robot.open_drawer(),大模型只写胶水逻辑。一旦遇到没有现成 API 的复杂几何体(如异形空气炸锅把手、0.1mm 公差销钉),传统方法瞬间瘫痪。RAX 的后端只暴露最底层的原子接口(直线运动、关节角、点云反投影),Agent 必须自己手搓最小二乘圆拟合、SVD 轴向分析、力控探针与奇异点避让算法。
    2. 正面对抗端到端 VLA 的吹哨人:过去三年学术界笃信“数据规模 Scaling 能解决一切”。RAX 用严苛的实验数据(尤其是 LIBERO-Pro 扰动测试中 VLA 全军覆没)证明:0 条动作示教数据的通用 Coding Agent 编译出的程序,在未见场景泛化上平均大幅领先 SOTA 策略 +37.4%。
    3. 复杂本体大跨越:此前机器人 Agent 绝大多数局限在简单的单臂二指夹爪;RAX 第一次把完全相同的 Agent 架构推进到了 16-DoF 灵巧手双臂协作(汉诺塔 100% 胜率)与 29-DoF 双足人形机器人(Unitree G1 自主标定步态步频)。

Q2: 代码编译(Compile to Code)机制是如何解决大模型控制机器人的高延迟与高昂成本的?

  • 攻克认知: 传统方案让大模型充当“低频大脑”,每走一步截一张图调一次大模型,不仅每步延迟高达数秒(根本无法应对滑脱与闭环调整),而且一次任务耗费数万 Token。 RAX 将 LLM 的定位重构为控制软件的即时编译器(JIT Compiler):
    • 探索期:Agent 像程序员一样在沙箱里单步调用工具、观察点云并记录有效参数;
    • 编译期:一旦跑通,Agent 将整套“感知-规划-控制”决策逻辑固化为纯 Python 模块(controller.py)。这个程序在运行时直接由物理机解释执行,完全脱离大模型思考延迟。在真实空气炸锅任务中,探索耗时 72 分钟,编译后的 Python 程序运行仅需 18 秒,提速 241 倍,且推理 Token 归零;
    • 异常自愈:代码中内置物理量断言,仅当环境剧烈突变触发 raise StepFailure() 时,才将控制权交还给 Agent 打补丁。

Q3: 真实机械臂上的零示范自由探索,为何没有发生灾难性的“物理炸机”?

  • 攻克认知: 在虚拟世界试错成本是 0,但在真实机械臂上失控一次就会损毁数千美元的减速器或打爆相机。RAX 并非给大模型发绝对控制权,而是构建了严格的 Frontend-Backend 分离与五层物理防御:
    1. 物理层:外部急停开关(E-Stop)与操作员使能锁(Arming Lock);
    2. 几何工作空间包围盒(TCP Workspace Box):硬编码机械臂活动立方体,任何规划目标只要越界直接拦截;
    3. 连杆防砸桌约束:严格限制关节 4~7 及法兰盘最低高度(如 z≥0.12mz \ge 0.12\text{m});
    4. 全轨迹正向运动学(FK)预插值检查:指令在下发前,后端自动插值 40 个离散状态,做全连杆自碰撞与环境碰撞推演;
    5. 硬件看门狗(Polymetis Bridge):底层强制 50mm/s 软限速与 0.5s 心跳中断保护。 这使得现实物理环境被封装成了一个**“具备单元测试安全网的软件执行环境”**。

核心架构与方法拆解

┌─────────────────────────────────────────────────────────────┐
│ 🖥️ 前端 (Agent 隔离沙箱 / Docker Workspace)                   │
│   • 冻结的通用 Coding Agent (Claude Code / Codex / DeepSeek) │
│   • 任务上下文、反思日志 (TASK.md, scratchpad)               │
│   • 技能库 (skills-lib: 前置条件 + 验证断言 + 执行代码)         │
│   • 生成的控制器 (code/controller.py)                         │
└──────────────────────────────┬──────────────────────────────┘
                               │ 统一 MCP 工具协议 (JSON-RPC)
┌──────────────────────────────▼──────────────────────────────┐
│ 🦾 后端 (物理机 / 仿真物理引擎,Agent 绝对不可侵入)             │
│   • 硬件驱动与实时低级控制器 (Franka 阻抗控制 / G1 全身平衡跟踪)   │
│   • 物理安全护栏 (工作空间限制、关节限位、自碰撞检测、负载监控)     │
│   • 硬件 E-Stop 仲裁 (Operator Arm/Disarm 控制)              │
│   • 几何与运动学解算器 (URDF, FK/IK, 运动规划, 无场景预览)      │
│   • 传感器管线 (RGB-D 深度反投影、标定外参、连续状态黑匣子录制)    │
└─────────────────────────────────────────────────────────────┘

1. 前后端彻底分离与多本体统一抽象

RAX 规定前端(智能体及其编写的代码)与后端(物理驱动)之间仅存在唯一的通信纽带:MCP (Model Context Protocol)。 无论面对何种硬件,后端提供统一角色能力的工具:

  • 状态观测:status(读取当前末端位姿、关节角、使能状态);
  • 空间感知:observe(抓取 RGB-D 数据)、pixel_to_position(输入像素坐标与邻域半径,基于深度反投影输出基座坐标系下的真实三维点);
  • 动作执行:move_pose(直线笛卡尔位姿跟踪)、move_joints(关节空间平滑插值)、gripper(带握力约束的力控闭合);
  • 状态倒流:stream(滑动窗口回溯查询录像与关节历史)。

2. 闭环探索与即时代码编译

在探索阶段,Agent 调用工具进行试探。一旦任务目标达成,Agent 立即将其转化为符合以下软件工程规范的模块化程序:

# controller.py 结构规范
def step_perceive(robot):
    # 1. 刷新观测与外参
    fid, F = robot.observe()
    # 2. 3D 几何估计 (点云拟合物体姿态)
    scene = Scene.from_pointcloud(F)
    # 3. 前置条件断言 (如抽屉是否处于关闭状态)
    if scene.protrusion > 0.065:
        raise StepFailure("初始状态异常:抽屉未闭合")
    return scene

def step_act(robot, scene):
    # 4. 逆运动学求解与肘部奇异点优化
    q_target = plan_ik(scene.grasp_pose)
    robot.move_joints(q_target)
    # 5. 执行操作并做结果物理断言
    res = robot.grasp(width=0.025, force=50)
    if not res['is_grasped']:
        raise StepFailure("抓取滑脱,退出当前流程")

3. 显式 3D 几何建模与主动力觉感知

大模型在没有专门微调的情况下,能展现出令人惊叹的经典几何与控制学编写能力:

(1) 空气炸锅抽屉任务中的解析几何拟合

Agent 在编写代码时,并没有使用粗糙的边界框(Bounding Box),而是手搓了工业级点云处理算法:

  • 机体圆心拟合:从手腕俯视相机截取盖子高度处的深色点云,将圆方程写为: x2+y2=2ax+2by+kx^2 + y^2 = 2ax + 2by + k 利用最小二乘法转化为线性方程组求解圆心 (a,b)(a, b) 与半径 r=k+a2+b2r = \sqrt{k + a^2 + b^2},并通过 6 轮迭代剔除外点。
  • 抽屉拉动方向向量 dd:沿机体轴心向外截取把手横梁的点云,去除方差超过 0.25 rad 的噪点后取中位数方向作为开门轴线向量。
  • 香蕉避障姿态解算:利用奇异值分解(SVD)提取香蕉点云主轴,拟合二次中线,自动计算手爪绕香蕉轴倾斜 60∘60^\circ 的抓取姿态,成功规避了 18cm 香蕉放入 19cm 狭窄炸锅内胆时的边缘干涉。

(2) ManipulationNet 轴孔装配(0.1mm 极小公差)中的主动触觉探针

由于测试板是亚克力透明板,深度相机在近距离完全失效(产生空洞与噪点)。Agent 在探索日志中识别出这一警告后,主动编写了一套力敏探针测量流程:

  • 机械臂闭合双指,以 1.5mm 步长微调下探;
  • 实时监听垂直方向接触反力,当法向阻抗受力突变达 3~4N 时,记录当前探针尖端高度;
  • 采集桌面上三点坐标建立平面方程,精确解算出透明亚克力板的绝对倾角与平面高度,随后采用“尖角先入、微幅轻摇”的顺应策略将六边形销钉完全压入。

4. 多时间尺度记忆系统与 Skills-Lib

  • 会话内记忆(Intra-task Memory):在 scratchpad 中记录每轮试错中失败的动作参数与崩溃日志。
  • 跨会话跨任务技能库(skills-lib): 每个技能必须满足**“连续 2 次无人工干预完整执行成功”**的硬指标才能沉淀为 Verified 状态。每个技能包含三合一组件:
    • SKILL.md(明确标注前置条件、适用硬件、适用几何尺寸区间、失效模式);
    • code/controller.py(自包含的感知与控制程序);
    • evidence/(两轮成功运行的关键帧图像与连续力矩日志)。

实验结果与跨形态突破

1. 仿真基准全面碾压学习型策略

仿真基准 硬件形态 任务类型 基线最优表现 RAX 表现 优势幅度
RoboDojo 双臂 ARX X5 包含倒水、排插、换块等 7 项任务 VPP2: 24.9% 78.3% +53.4% (语言倒水任务斩获 100%)
BEHAVIOR-1K 轮式双臂 Galaxea 6 项长程复杂家庭整理 挑战赛冠军: 8.2% 46.5% +38.3% (装车任务达成 100%)
HumanoidArena 29-DoF 双足 Unitree G1 7 项全身运控与操作 (踢球、双桌、搬箱) WB-WAM (100条示教): 81.9% 89.8% +7.9% (RAX 仅用 3 条无动作参考)
DexJoCo 双臂 + 16-DoF 灵巧手 11 项灵巧手接触交互 ME-Dex: 65.3% 96.7% +31.4% (双臂汉诺塔 SOTA 仅 42%,RAX 100%)
LIBERO-Pro 单臂 Franka 物体位置空间扰动分布 VPP2: 42.3%, π0\pi_0: 0% 84.4% +42.1% (端到端策略在扰动下集体崩溃)

2. 真实硬件任务验证 (Zero Demonstrations)

  • Franka FR3 五大桌面极限任务:
    1. Find the Cube:追踪 4 个杯子随机打乱换位后的方块;
    2. Air Fryer:毫米级抽屉拉出、香蕉倾斜放入、推回抽屉;
    3. Wiping a Stain:湿纸巾铺展擦除污渍,根据残留面积闭环二次复擦;
    4. Peg Insertion:0.1mm 极小公差轴孔装配(主动触控探针测高);
    5. Bandu Tower:7 块不规则异形积木精密搭高塔。
  • Rainbow RB-Y1 六步长程家庭整理: 拉出椅子 →\to 堆叠杯子 →\to 抓取香蕉 →\to 装入篮子 →\to 运送到储物柜 →\to 推回椅子。Agent 直接从 skills-lib 中检索并组合了此前独立探索验证的子技能,无缝串联成长程复合任务。

3. 规模扩展中涌现出的 Agent 行为

  • 碰撞后自发构建安全护栏:在一次长程测试中机械臂肘部刮蹭到了外置相机立柱,Agent 没有放弃任务,而在后续代码迭代中自动加入几何避障约束——“每次基座旋转前,强制校验臂展与周围障碍物净距不得低于 5cm”,并自主调用外参接口重新标定了被撞偏的相机。
  • 主动发起人机协作与泛化压力测试:当装配板在受力后发生轻微位移,Agent 在终端主动输出指令请求:“请操作员用胶带将测试板加固在桌面上”;在连续成功几次后,Agent 甚至主动提出:“请操作员随机挪动空气炸锅的位置和朝向,我要检验控制程序在未见分布下的鲁棒性”。

总结与思考 (Takeaways & Critique)

🌟 最大启发

  1. 大模型的正确用法是“写控制软件”,而非“当低频策略”: 在感知端用大模型做语义理解和目标粗定位,在执行端编译为解析几何与经典运动学算法。这兼顾了高级认知推理的泛化性与底层数值控制的高频精确性。
  2. 具身智能的本质是可验证的物理闭环: 通过分层异常捕获(try...except StepFailure →\to 回抛大模型),RAX 将不可控的物理世界交互映射为了软件工程式的“红-绿-重构”单元测试。

⚠️ 局限与冷思考(皇帝的新衣在哪里?)

  1. 环境复位依赖(Reset Dependency): 所谓“全自主探索”,真机背后站着一个非常辛苦的人类操作员——每试错一次,操作员需要帮机械臂把掉落的积木、翻倒的杯子重新摆回台面。在缺乏全自动复位机制前,真机探索的时间和人力成本依旧极其高昂。
  2. 厚重的 Prompt 先验注入(Prompt Engineering Bias): 虽然声称“0 动作示教”,但作者在 agent_skills 提示词模板中注入了极其厚重的现代机器人学常识(点云反投影使用规范、肘部姿态约束范式、力控探针方法)。这本质上是将“动作轨迹的示教”转移为了“工程先验与提示词设计”。
  3. 高动态物理交互的极限: 基于“点云识别 →\to 轨迹规划 →\to 分段执行”的程序化模式,只适用于静态或准静态的结构化操作。面对打乒乓球、高速抛接物、揉捏软泥面团等需要百赫兹(100Hz+)实时连续视觉伺服的高动态接触任务,程序编译架构在响应带宽上依然无法与纯神经流动策略相匹敌。