DO-WAM · RoboDojo · 返回评测总览 · 2026-09-26

官方模拟器 · 非官方评测协议

Atomic skill 探针:Junbo skill cos276k 40k

13 个单技能测试(合上、抓、按、推、放、插、拧、敲、扫、挂、倒),每个测试在布局 0–4 × seed 0–2 上各跑 1 回合,共 195 格。仿真用官方 RoboDojo Docker 镜像(CPU 物理),但测试本身是我们自己的 atomic2 harness:每格只给一句技能指令,按单个技能是否完成打分,不是官方基准协议,数字不能和 6300 回合的官方结果放在一起比。点下方格子可以看每一格的三视角录像。

总成功率

34.9%

68 / 195 格成功

有效格

195 / 195

0 个基础设施失败,0 个无效复位,0 个 PhysX 报错

权重

40k EMA

Junbo skill-only 训练,从 276k EMA 起步,cosine 60k 的第 40000 步

和 09-22 skill 100k 比

2 好 · 2 差

Fisher 检验 p<0.05 的测试数;两边设置不同,只作参考

逐个测试

每个测试 15 格(5 个布局 × 3 个 seed)。每格只有 1 回合,所以单个测试的 95% 置信区间很宽(例如 9/15 对应 36–80%)。

本次 40k 成功率95% 置信区间(Wilson)09-22 skill 100k(参考,设置不同)
合上笔记本(短指令)显著更好
close_short · CLOSE · 场景 store_laptop_and_headphones
13/1586.7% · 09-22 4/13
合上笔记本(长指令)显著更好
close_full · CLOSE · 场景 store_laptop_and_headphones
14/1593.3% · 09-22 5/15
拿起耳机
pick_headphones · PICK · 场景 store_laptop_and_headphones
9/1560.0% · 09-22 5/10
按蓝色按钮
press_blue · PRESS · 场景 press_by_number
15/15100.0% · 09-22 12/12
右手推 T 形块
push_right · PUSH · 场景 push_T
0/150.0% · 09-22 0/15
左手推 T 形块
push_left · PUSH · 场景 push_T
0/150.0% · 09-22 0/10
把碗叠到另一个碗上
place_bowl · PLACE · 场景 stack_bowls
4/1526.7% · 09-22 9/15
把试管插进架子显著更差
insert_tube · INSERT · 场景 insert_tubes
2/1513.3% · 09-22 9/15
把螺母拧到螺栓上
screw_nut · SCREW · 场景 fasten_screws
0/150.0% · 09-22 1/4
用木槌敲木琴
strike_xylophone · STRIKE · 场景 play_Xylophone
0/150.0% · 09-22 0/9
把方块扫进簸箕
sweep_cubes · SWEEP · 场景 sweep_blocks
0/150.0% · 09-22 0/9
把杯子挂到杯架上显著更差
hang_mug · HANG · 场景 hang_mugs
4/1526.7% · 09-22 3/3
把杯里的球倒进花瓶
pour_balls · POUR · 场景 pour_balls_into_vase
7/1546.7% · 09-22 2/10

每一格

实心 ✓ = 成功,空心 · = 失败。每组 3 格是同一个布局的 seed 0、1、2。点格子播放这一格的三视角录像(头部相机 + 左右腕部相机)。

点左边任意一格开始播放。

和 09-22 skill 100k 的对比

09-22 的数字来自 Ziming 的 skill 100k(以 60k EMA 为初始化),在原生(非 Docker)栈上跑,而且测试设置不同:提示词前缀重复了一次、rest shim 打开、Kit 同步加载参数打开,非放置类测试用的是加 RELEASE_REQUIRED 之前的打分器;每个测试的格数也不一样。所以这里的差异同时混着模型和设置两方面的变化,只能作参考。p 值为 Fisher 精确检验(双侧)。

测试40k95% CI09-22 100kp
合上笔记本(短指令)
close_short
13/1562–96%4/130.006
合上笔记本(长指令)
close_full
14/1570–99%5/150.002
拿起耳机
pick_headphones
9/1536–80%5/100.697
按蓝色按钮
press_blue
15/1580–100%12/121.000
右手推 T 形块
push_right
0/150–20%0/151.000
左手推 T 形块
push_left
0/150–20%0/101.000
把碗叠到另一个碗上
place_bowl
4/1511–52%9/150.139
把试管插进架子
insert_tube
2/154–38%9/150.021
把螺母拧到螺栓上
screw_nut
0/150–20%1/40.211
用木槌敲木琴
strike_xylophone
0/150–20%0/91.000
把方块扫进簸箕
sweep_cubes
0/150–20%0/91.000
把杯子挂到杯架上
hang_mug
4/1511–52%3/30.043
把杯里的球倒进花瓶
pour_balls
7/1525–70%2/100.229

测试设置

模拟器官方镜像 robodojo:cuda12.8(上游 726e9aa,Isaac Sim 5.1),代码不改;CPU 物理,单环境;Kit 启动时加官方的 zero-delay 渲染参数
测试脚本Fang 的 atomic2 harness(RPent d2874d0 + more_cases_20260921),冻结快照并做 MD5 校验;每格一个独立进程,从复位开始跑 1 回合
规模13 个测试 × 布局 0–4 × seed 0–2 = 195 格
预算与打分最多 256 个控制步(25 Hz),每 32 步重新规划一次,成功状态要保持 5 步;放置类(叠碗、插、拧、挂)要求松开夹爪才算成功
策略服务DO-WAM-skill_wam 的 dowam_openwam_server_robodojo.py,10 步去噪;没点名的手臂保持不动(hold_uncontrolled_arms,只在推理时做,训练时 mask_inactive_arms=false);rest shim 关
指令文本发给模型的是“训练用的原生前缀 + 测试句子”,文本编码只从缓存读(Gemma-3-12B + LTX-2.3 connector),和训练时的编码核对过一致
权重/mnt/efs/monitor/ckpts/junbo_skill_cos276k_s040000_ema_20260926(bf16,sha256 a8d9ba64…)。训练:276k EMA 起步,cosine 60000 步,学习率 action 1e-4 / video 1e-5;只用 skill 片段数据(robodojo_skills_native25_v1),train_config 里 14 个任务采样权重 ×2;8 × H200,全局 batch 256。原本想测 32k,但那一步已被清理,改测 40k
资源每条 lane 1 张 L40S(policy server 约 31 GB + 一个 Isaac 容器约 9 GB)。Slurm array 3424(16 条 lane)跑了 70 格后取消:我们 lane 脚本的节点锁 bug 让同一台机器一次只能跑一格;修好后用 array 3440(32 条 lane)跑完剩下 125 格。bug 只影响调度,不影响结果。04:06–05:18 UTC
运行目录/mnt/efs/monitor/rpent/runs/atomic13_skillcos276k_s040000_docker_20260926

13 个测试

指令和成功判据都是 harness 里的原文。

测试指令成功判据
合上笔记本(短指令)
close_short · CLOSE
Close the laptop lid with the right gripper. The object has a hinged mechanism.native laptop_hinge ratio > 0.85, held 5 control steps
合上笔记本(长指令)
close_full · CLOSE
Close the laptop lid with the right gripper. Shape: flat sheet. Material: metal. Size: larger than gripper. The object has a hinged mechanism.native laptop_hinge ratio > 0.85, held 5 control steps
拿起耳机
pick_headphones · PICK
Pick up the headphones with the right gripper.native headset lift > 0.10 m, held 5 control steps
按蓝色按钮
press_blue · PRESS
Press the blue button with the right gripper.blue button2 press ratio < 0.5 followed by release > 0.9
右手推 T 形块
push_right · PUSH
Push the T-shaped block with the right gripper. Target: gray T-shaped pad.native T/pad xy distance < 0.007 m and orientation < 7 degrees; no >0.01 m lift
左手推 T 形块
push_left · PUSH
Push the T-shaped block with the left gripper. Target: gray T-shaped pad.native T/pad xy distance < 0.007 m and orientation < 7 degrees; no >0.01 m lift
把碗叠到另一个碗上
place_bowl · PLACE
Place the bowl with the right gripper. Target: bowl. Shape: round. Size: larger than gripper. The object has opposing parallel faces.native is_stacked(bowl0, bowl1) with the top bowl upright (axis_up 45 deg), grippers open
把试管插进架子
insert_tube · INSERT
Insert the tube with the right gripper. Target: slot. Size: gripper-sized. The object has an elongated body with an axis.native is_A_in_B + is_A_depth_in_B(0.045 m) + axis_up(30 deg) for any one tube, grippers open
把螺母拧到螺栓上
screw_nut · SCREW
Screw the nut with the right gripper. Target: bolt. Size: smaller than gripper. The object has a threaded mechanism.native axis_up(10 deg) + xy distance < 0.001 m + depth 0.009 m for any one nut, grippers open
用木槌敲木琴
strike_xylophone · STRIKE
Strike the mallet with the right gripper. Target: xylophone. The object has a shaft or handle.native mallet beat point inside a xylophone key bbox, 0.01-0.036 m above the hit point
把方块扫进簸箕
sweep_cubes · SWEEP
Sweep the blocks with the right gripper. Target: dustpan. The object has an irregular solid body.native is_all_A_in_B_support_circle(cubes, dustpan) with the dustpan flat on the table
把杯子挂到杯架上
hang_mug · HANG
Hang the mug with the right gripper. Target: cup holder. The object has a shaft or handle.native lift 0.045 m + handle above z=0.9 + handle axis aligned with the holder (60 deg) for any one mug, grippers open
把杯里的球倒进花瓶
pour_balls · POUR
Pour the cup with the right gripper. Target: vase. The object has opposing parallel faces.native is_A_in_B(sphere, vase) for at least one ball, with the cup not dropped