arXiv 2026
2026-10-23
Robot Learning & Agentic Control
Scaling Online Exploration for Robot Agents
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 (, 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 到底新在哪里?它真的只是“安全做得好了一点”吗?
- 攻克认知:
- 废黜人工动作基元(No Hand-engineered Primitives):以往的 Code-as-Policies(如 SayCan, VoxPoser)所谓的“写代码”,本质是拼积木——人类工程师提前写好了高度封装的
robot.pick(cup)或robot.open_drawer(),大模型只写胶水逻辑。一旦遇到没有现成 API 的复杂几何体(如异形空气炸锅把手、0.1mm 公差销钉),传统方法瞬间瘫痪。RAX 的后端只暴露最底层的原子接口(直线运动、关节角、点云反投影),Agent 必须自己手搓最小二乘圆拟合、SVD 轴向分析、力控探针与奇异点避让算法。 - 正面对抗端到端 VLA 的吹哨人:过去三年学术界笃信“数据规模 Scaling 能解决一切”。RAX 用严苛的实验数据(尤其是 LIBERO-Pro 扰动测试中 VLA 全军覆没)证明:0 条动作示教数据的通用 Coding Agent 编译出的程序,在未见场景泛化上平均大幅领先 SOTA 策略 +37.4%。
- 复杂本体大跨越:此前机器人 Agent 绝大多数局限在简单的单臂二指夹爪;RAX 第一次把完全相同的 Agent 架构推进到了 16-DoF 灵巧手双臂协作(汉诺塔 100% 胜率)与 29-DoF 双足人形机器人(Unitree G1 自主标定步态步频)。
- 废黜人工动作基元(No Hand-engineered Primitives):以往的 Code-as-Policies(如 SayCan, VoxPoser)所谓的“写代码”,本质是拼积木——人类工程师提前写好了高度封装的
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 分离与五层物理防御:
- 物理层:外部急停开关(E-Stop)与操作员使能锁(Arming Lock);
- 几何工作空间包围盒(TCP Workspace Box):硬编码机械臂活动立方体,任何规划目标只要越界直接拦截;
- 连杆防砸桌约束:严格限制关节 4~7 及法兰盘最低高度(如 );
- 全轨迹正向运动学(FK)预插值检查:指令在下发前,后端自动插值 40 个离散状态,做全连杆自碰撞与环境碰撞推演;
- 硬件看门狗(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),而是手搓了工业级点云处理算法:
- 机体圆心拟合:从手腕俯视相机截取盖子高度处的深色点云,将圆方程写为: 利用最小二乘法转化为线性方程组求解圆心 与半径 ,并通过 6 轮迭代剔除外点。
- 抽屉拉动方向向量 :沿机体轴心向外截取把手横梁的点云,去除方差超过 0.25 rad 的噪点后取中位数方向作为开门轴线向量。
- 香蕉避障姿态解算:利用奇异值分解(SVD)提取香蕉点云主轴,拟合二次中线,自动计算手爪绕香蕉轴倾斜 的抓取姿态,成功规避了 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% | 84.4% | +42.1% (端到端策略在扰动下集体崩溃) |
2. 真实硬件任务验证 (Zero Demonstrations)
- Franka FR3 五大桌面极限任务:
- Find the Cube:追踪 4 个杯子随机打乱换位后的方块;
- Air Fryer:毫米级抽屉拉出、香蕉倾斜放入、推回抽屉;
- Wiping a Stain:湿纸巾铺展擦除污渍,根据残留面积闭环二次复擦;
- Peg Insertion:0.1mm 极小公差轴孔装配(主动触控探针测高);
- Bandu Tower:7 块不规则异形积木精密搭高塔。
- Rainbow RB-Y1 六步长程家庭整理:
拉出椅子 堆叠杯子 抓取香蕉 装入篮子 运送到储物柜 推回椅子。Agent 直接从
skills-lib中检索并组合了此前独立探索验证的子技能,无缝串联成长程复合任务。
3. 规模扩展中涌现出的 Agent 行为
- 碰撞后自发构建安全护栏:在一次长程测试中机械臂肘部刮蹭到了外置相机立柱,Agent 没有放弃任务,而在后续代码迭代中自动加入几何避障约束——“每次基座旋转前,强制校验臂展与周围障碍物净距不得低于 5cm”,并自主调用外参接口重新标定了被撞偏的相机。
- 主动发起人机协作与泛化压力测试:当装配板在受力后发生轻微位移,Agent 在终端主动输出指令请求:“请操作员用胶带将测试板加固在桌面上”;在连续成功几次后,Agent 甚至主动提出:“请操作员随机挪动空气炸锅的位置和朝向,我要检验控制程序在未见分布下的鲁棒性”。
总结与思考 (Takeaways & Critique)
🌟 最大启发
- 大模型的正确用法是“写控制软件”,而非“当低频策略”: 在感知端用大模型做语义理解和目标粗定位,在执行端编译为解析几何与经典运动学算法。这兼顾了高级认知推理的泛化性与底层数值控制的高频精确性。
- 具身智能的本质是可验证的物理闭环:
通过分层异常捕获(
try...except StepFailure回抛大模型),RAX 将不可控的物理世界交互映射为了软件工程式的“红-绿-重构”单元测试。
⚠️ 局限与冷思考(皇帝的新衣在哪里?)
- 环境复位依赖(Reset Dependency): 所谓“全自主探索”,真机背后站着一个非常辛苦的人类操作员——每试错一次,操作员需要帮机械臂把掉落的积木、翻倒的杯子重新摆回台面。在缺乏全自动复位机制前,真机探索的时间和人力成本依旧极其高昂。
- 厚重的 Prompt 先验注入(Prompt Engineering Bias):
虽然声称“0 动作示教”,但作者在
agent_skills提示词模板中注入了极其厚重的现代机器人学常识(点云反投影使用规范、肘部姿态约束范式、力控探针方法)。这本质上是将“动作轨迹的示教”转移为了“工程先验与提示词设计”。 - 高动态物理交互的极限: 基于“点云识别 轨迹规划 分段执行”的程序化模式,只适用于静态或准静态的结构化操作。面对打乒乓球、高速抛接物、揉捏软泥面团等需要百赫兹(100Hz+)实时连续视觉伺服的高动态接触任务,程序编译架构在响应带宽上依然无法与纯神经流动策略相匹敌。