Benchmark
一个 benchmark 就是一个模拟器 worker:每个进程一个任务,通过 worker 协议提供服务。Isaac、torch、cuRobo 和模拟器只在 worker 进程中导入。
RoboDojo
Section titled “RoboDojo”RoboDojo 的双臂 ARX X5,版本为 third_party/sources.toml 中的 revision。
benches/robodojo/├── adapter.py RoboDojoEnvironment: native reset and take_action, cameras, action packing, reward├── general.py RoboDojoTaskEnvironment: any one task, evaluation or development layouts├── runtime.py RoboDojoRuntimeEnvironment: the robot API, the shield├── kinematics.py cuRobo FK, IK and plans in the env frame (also the kinematics service)├── devlayouts.py development layouts, disjoint from the evaluation packs└── codec.py, tasks.py, video.pyharness serve --factory benches.robodojo.runtime:create_environment \ --options configs/workers/robodojo_runtime_dev.toml --port 8771harness run 自己启动和停止 worker。手动运行时,需要设置 HARNESS_ROBODOJO_RUNTIME=1、绝对路径的 HARNESS_ROBODOJO_ROOT(worker 在导入 RoboDojo 之前会切换到该目录)、CUDA_VISIBLE_DEVICES、可写的 TMPDIR(Isaac Lab 的日志写在 $TMPDIR/isaaclab 下)以及 OMNI_KIT_ACCEPT_EULA=YES(source environment/activate.sh 会设置最后一项)。Isaac 会忽略 SIGTERM:用 SIGINT 停止 worker,再用 SIGKILL。
- 一条命令有 14 个值:分量 0-5 和 7-12 是以弧度表示的
joint1-joint6绝对目标(先左臂,后右臂),6 和 13 是 [0, 1] 内归一化的夹爪开度(1 为张开;任务把至少 0.8 视为张开)。 - 一个 tick 是 25 Hz 下的一个策略步;RoboDojo 会在其控制步上对它插值。
- reward 遵循 RoboDojo 的 episode 分数:成功标志通过时为 1,否则为过程分 / 100。达到步数上限仍未成功属于截断。
- 相机
cam_head、cam_left_wrist、cam_right_wrist,640×480 RGB;没有深度(评测配置不渲染深度)。末端执行器位姿是 link6 的位姿。 - 不稳定的 layout,或者被脚本化辅助机械臂标记为不稳定的 episode,属于环境错误:既不算策略成功,也不算策略失败。
layout
Section titled “layout”- 评测:
layout_source = "eval",layout_pack_seed为 0/1/2,即官方的评测包。 - 开发:
layout_source = "procedural"配合dev_layout_dir(默认<checkout>/harness_dev_layouts/arx_x5),对任意 seed 回放<dir>/<task>_<seed>.json,首次使用时生成该文件(scripts/robodojo_make_dev_layouts.py无需 Isaac Sim 即可预先生成)。公开的 RoboDojo 没有 layout 生成器,因此devlayouts.py用 RoboDojo 自己的ClutteredGenerator,在每个实例配置的限制内重新放置一个模板评测 layout,重新抽取物体选择和杂物,并拒绝任何与评测 layout 重复的 layout。相同的(任务,seed)会得到逐字节相同的文件。在两个传送带任务上,传送带上的物体会被重新放进其槽位并稍微转动;不在传送带上的物体保持原位姿。不支持:cover_blocks、play_tic_tac_toe、swap_blocks,它们的配置在评测包之外没有留下放置的自由度。
场景配置遵循 RoboDojo 的 task/RoboDojo/config/_task.yml(传送带任务使用 conveyor,imitate_sorting_sequence、make_kong、play_tic_tac_toe 有第二个脚本化机器人);策略始终驱动两条 X5 机械臂。与 RoboDojo 的 run_eval 一样,adapter 在 reset 之后、策略第一步之前加载脚本化机械臂的轨迹(对手的第一步棋、示范)。PhysX 崩溃监视器保持关闭:崩溃会结束 worker,driver 记录错误,harness run --rerun-errors 会重新运行该 episode。
prompt 使用的实测数据
Section titled “prompt 使用的实测数据”- 控制频率 25 Hz;一个 tick 大约耗时 0.14 s 墙钟时间(在控制器中以 5 Hz 使用头部相机时为 0.19 s,以 25 Hz 使用时为 0.4 s)。程序思考时模拟器会等待。
- link6 向前只能到达 y ≈ +0.1;竖直向下指(
[0.5, -0.5, 0.5, 0.5])需要 z ≥ 0.9 且 y ≤ 0.0(scripts/robodojo_reach_probe.py)。 - 桌面 z = 0.765。指尖是夹持面的中心,沿 link6 +x 方向 0.150 m(夹爪末端再往外 0.0075 m:向下指时,在 link6 z ≈ 0.923 处碰到桌面);手指沿 link6 y 方向滑动,每侧 0.044 m;空夹爪闭合时开度读数约为 0.185。
- 运动按规划器的关节速度和加速度限制(3.14 rad/s,10 rad/s²)计时;15 cm 的移动按规划器的计时约需 33 个 tick,
speed=0.3时为 22 个。 - 相机标定对每个任务、layout 和机械臂位姿都相同(头部相机固定在世界中,腕部相机固定在 link6 上):
embodiments/arx_x5。
RoboTwin 2.0
Section titled “RoboTwin 2.0”benches/robotwin/runtime.py:相同的机器人 API,10 Hz,50 个任务,seed 由 RoboTwin 的专家检验,使用它自己的 cuRobo 0.7.8。在 RoboTwin 2.0 上运行。
harness serve --factory benches.robotwin.runtime:create_environment \ --options configs/workers/robotwin_runtime_dev.toml --port 8772