GPT-6 Astra(Codex CLI)通过接口控制 BEHAVIOR 仿真中的 R1Pro 机器人;只给真实世界能拿到的输入(三路 RGB、头部深度、内参、手眼标定、本体感知、任务文本),不给任何物体位置、世界外参或场景资产。
第二部分 · 抓取小任务(09-27)
要回答的问题:agent 为了执行自己写出的程序,需要建立、检验、维护哪些关于世界的知识;要求它显式记录 focus,能不能帮它把任务做好。
做法:机器人开局站在地上一个罐子前 1 m、正对罐子,任务是把罐子抓起来、抬离地面 10 cm,最多 20 轮,成功由服务器判定、不回给 agent。三组只在提示词中段有区别:
- 无 focus 要求:不提 focus。
- 3D focus:每步动作前,用 3D 形式记录当前决策依赖的东西,形式不限,持续更新。
- 接触部件 focus:focus 必须是"下一次接触所依赖的物体部件"的 3D 模型(局部 mesh 或拟合基元),每次接触后重新测量。
每组对两只罐子各跑一次,共 6 次;逐步追踪 agent 测了什么、存在哪里、什么时候重测。
结果:6 次全部成功
| 条件 | 罐 | 用轮 | 首次持住 | 抬高 | token | 回放 |
|---|
| 无 focus 要求 | 第一只罐 | 7 | 第 5 轮 | 22.5 cm | 1.9M | ▶ 回放 |
| 无 focus 要求 | 第二只罐 | 19 | 第 17 轮 | 20.7 cm | 4.1M | ▶ 回放 |
| 3D focus | 第一只罐 | 12 | 第 10 轮 | 24.0 cm | 3.1M | ▶ 回放 |
| 3D focus | 第二只罐 | 7 | 第 5 轮 | 25.0 cm | 1.7M | ▶ 回放 |
| 接触部件 focus | 第一只罐 | 15 | 第 13 轮 | 18.5 cm | 3.1M | ▶ 回放 |
| 接触部件 focus | 第二只罐 | 12 | 第 10 轮 | 20.0 cm | 2.3M | ▶ 回放 |
逐轮动作(鼠标悬停或点击色块,看这一步的环境返回)
底移动底盘伸伸手到达拒伸手被规划器拒绝躯调躯干张张开夹爪合合爪抓住合合爪没抓住完结束
结论
1. 完成这个抓取不需要 focus。三组都是 2/2,无要求组两次都成功:GPT-6 自己就能从 RGB-D 建出这个抓取所需的空间知识。接触部件 focus 想强制的"接触后重测",无要求组没被要求,两次都自己做了。
2. agent 什么时候更新 focus:看发生了什么。
- 下一步动作变了,就换关注对象。3D focus 组每一步都在记录里新增下一步动作要用的那块几何,依次是接近通道、夹持接触面、下探通道、抓取几何、抬升几何;当轮的关注清单跟着换,存下的旧条目一条不删,记录只增不减。
- 接触改变了物体,就重新测量。两个 focus 组里有 3 次接触碰动了罐子,每一次罐子模型都在下一轮重测改写(从直立改为横躺,或位置偏移 1.4 cm)。罐子没被碰动的那一次,罐心从第 2 轮到第 6 轮一字未改。
- 没碰到罐子,罐子模型的数值就不变。包括底盘和手臂移动、伸手被规划器拒绝(agent 写明"罐壁模型仍然有效")。看得见罐子时会再测一遍核对,只有毫米级变化;看不见时把旧模型按里程计换算过来。接触部件组第二只罐那次把这两种状态分别写成"由当前图像和深度核实"和"非接触运动后按里程计传递";第一只罐那次每轮都重测,测出的位置不变。
提示词只要求接触部件组"每次接触后重测"、要求 3D focus 组"随情况变化更新、不要每轮从头重建";"看不见时按里程计换算旧模型"是 agent 自己的做法。无要求组没有 focus 记录,罐子被碰动后同样重新测量了(见结论 1)。
3. 要求建什么,agent 就建什么,而且建得准;但建了很少直接用。接触部件组拟合的罐壁半径为 3.76 cm 和 3.89 cm(罐子实际半径 3.7 cm),其中一次另建了一块局部 mesh,并在下探、对准、合爪、抬起四个阶段各重测一次。44 个移动指令(伸手或移动底盘)中,43 个的目标数字是 agent 读完测量结果后写进命令的;只有 1 个由存储的 3D 记录直接算出,发生在罐子处于视野之外的那一步。focus 要求改变了 agent 建出的表示,没有改变它怎么做决定,也没有改变结果。
接触部件 focus 组 · 第二只罐:agent 最后一次重测的"接触带"局部 mesh(绿色,130 顶点 / 64 面)与它拟合的圆柱(金色线框,半径 3.76 cm)。拖拽旋转、滚轮缩放。
3D focus 组 · 第二只罐:agent 开局存下的地面与罐子点云(7691 点,原色)。拖拽旋转、滚轮缩放。
4. 有两个时刻必须维护知识。
走近之后:底盘开近后罐子落到头部相机视野下方,手伸到罐子上方之前没有任何相机能看到它。3 次按底盘位移换算出罐子的新位置,伸手时没被拒绝;另 3 次为了重新看见罐子降低躯干,从低姿态伸手被规划器拒绝两次,抬回躯干后才完成,多用 3 到 4 轮。
接触之后:6 次中 5 次第一次抓取就把罐子碰倒或碰偏;每一次 agent 都重新测量罐子的位置和姿态后再动手,全部恢复。
开局(第 1 轮)头部相机:罐子在正前方约 1 m,看得见
底盘前移 0.43 m 后(第 2 轮)头部相机:罐子已在视野下方,看不见
规划器是什么、什么时候拒绝:agent 调用"伸手"时只给出夹爪要到达的位置和朝向;躯干 4 个关节、手臂 7 个关节怎么转,由运动规划器(CuRobo)计算。它只检查机器人自己的身体:够不够得到(有没有关节解),以及从当前姿态能不能过去(全程不超关节限位、不自碰撞)。它不知道罐子、地板和家具,避障由 agent 负责。这批的 6 次拒绝全部是"够得到,但从当前姿态过不去",都发生在躯干降到 0.8 或最低时;抬回躯干后同样的目标一次规划成功。被拒绝反映的是机器人自身姿态的限制,和罐子在哪无关。
对后续实验的含义
这个任务里需要维护"看不到的东西"的时间只有一两步,在上下文里换算一下就够了,focus 没有发挥作用的空间。要检验 focus 的作用,任务需要更长时间、更多次地依赖视野之外的知识,例如垃圾桶在机器人身后、需要拿着罐子走过去再放入。