Run on RoboTwin 2.0
RoboTwin 2.0 (SAPIEN) is the second bench: 50 dual-arm tasks, each served by its own
worker (benches/robotwin/runtime.py) with the same robot API as RoboDojo’s.
- Check out RoboTwin at the revision in
third_party/sources.toml(tothird_party/RoboTwin, or setHARNESS_ROBOTWIN_ROOT) with its assets (the Hugging Face datasetTianxingChen/RoboTwin2.0; sha256 values insources.toml). bash environment/setup.sh --only robotwin: SAPIEN 3.0.1, mplib, toppra in the project environment, RoboTwin’s two source patches, and RoboTwin’s own cuRobo 0.7.8, built in place inthird_party/curobo-0.7.8(environment/robotwin_curobo.sh;HARNESS_ROBOTWIN_CUROBOpoints elsewhere). Workers put it first onPYTHONPATH.
A RoboTwin seed is valid only if RoboTwin’s expert solves it. Episode index n is the
n-th valid seed: evaluation seeds from 100000 × (1 + group) (the official ones),
development seeds from 10,000,000 + 100000 × group. Valid seeds are cached in
seed_cache_dir/<split>-<group>/<task_config>/<task>.json (seed_cache_dir defaults to
<RoboTwin>/harness_seeds). In a run file,
layouts = "procedural" selects the development split and layout_pack_seed the group.
# RoboTwin 2.0 development check on stack_blocks_two: the agent with the RoboTwin prompt# pack (AgileX ALOHA). No learned skill for this embodiment (no policy or world model# trained on RoboTwin is served), and RoboTwin has no task descriptions.description = "the agent on RoboTwin, development seeds"bench = "robotwin"tasks = ["stack_blocks_two"]seeds = [0]layouts = "procedural"endpoint = "http://127.0.0.1:8772"
[budget]max_wall_seconds = 5400max_cost_usd = 4.0
[overrides.agent]prompt = "../../prompts/robotwin"# The tools by object id (skills/eef) are tuned to RoboDojo's ARX X5 (table height,# parking spots, jaw width); RoboTwin's ALOHA uses the manipulation skill's.skills = { layers = { learned = false }, enable = ["manipulation"], disable = ["eef"] }services = { policies = [], world_models = [] }# RoboTwin has no XPolicyLab embodiment profile here: the worker shows programs its own# observations (the default agent's contract is RoboDojo's leaderboard protocol).runtime = { task_descriptions = false, contract = "native" }harness run configs/experiments/robotwin-dev.toml --deploy mine --output runs/robotwin-devharness run configs/experiments/robotwin-dev.toml --deploy mine --tasks all --seeds 0-9 --output runs/robotwin-allor by hand, against one worker:
harness serve --factory benches.robotwin.runtime:create_environment \ --options configs/workers/robotwin_runtime_dev.toml --port 8772harness program configs/experiments/robotwin-dev.tomlHow it differs from RoboDojo
Section titled “How it differs from RoboDojo”| RoboDojo | RoboTwin | |
|---|---|---|
| Control rate | 25 Hz | 10 Hz |
| Fingertip offset | 0.150 m | 0.12 m |
Arms back to the start pose after finish |
yes (the tasks require it) | no |
| Learned skills | Simate (the agent’s), G0.5, other XPolicyLab policies; OpenWAM for experiments | none served |
| Manipulation tools | by object id (locate, pick, release, …) |
the manipulation skill’s pick and place by name |
| Prompt pack | prompts/robodojo |
prompts/robotwin (own core.md, other sections shared) |
| Self-improvement script | yes | no (it starts RoboDojo workers) |
The experiment runs the agent with the RoboTwin prompt pack ([overrides.agent]):
learned layer off (so no strategy step), the manipulation skill in place of the tools by
object id (those are tuned to RoboDojo’s ARX X5), SAM 3, no task descriptions, the
agent’s 30 model calls.