Top-level Fields1
| Field | Type | Required | Default | Description / Constraints |
|---|
extension_cfg_dict | dict[str, ExtensionBaseConfig] | optional | {} | Extension config dict; key is instance name (also the unique runtime lookup key), value is the extension config object ⚠Enabled in declaration order; data_collect must be declared before record and benchmark |
ExtensionBaseConfig: Common Fields (all extensions)
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | Extension type (data_collect / record / replay / server / benchmark) |
enable | bool | optional | true | Whether to auto-call enable(sim) on simulation startup; set false to defer manual activation |
DataCollectorConfig: Observation Collection (stereotype: data_collect)
Registers multiple observers, each collecting a specific data type from the scene. Observations are consumed by the record / benchmark extensions.
| Field | Type | Required | Default | Description / Constraints |
|---|
observer_cfgs | list[ObserverConfig] | optional | [] | List of observers to register; each typed by stereotype |
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | "robot_observer" |
name | string | required | — | Robot instance name (matches key in scene.robot_cfg_dict) |
observe_joint_positions | bool | optional | false | Collect joint positions |
observe_ee_pose | bool | optional | false | Collect end-effector pose |
observe_gripper_state | bool | optional | false | Collect gripper state (opening degree) |
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | "sensor_observer" |
name | string | required | — | Sensor instance name (matches key in scene.sensor_cfg_dict) |
observe_rgb | bool | optional | false | Collect RGB image |
observe_depth | bool | optional | false | Collect depth map |
observe_intrinsic_matrix | bool | optional | false | Collect camera intrinsic matrix |
observe_extrinsic_matrix | bool | optional | false | Collect camera extrinsic matrix |
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | "object_observer" |
name | string | required | — | Object instance name (matches key in scene.object_cfg_dict) |
observe_position | bool | optional | false | Collect object position |
observe_rotation | bool | optional | false | Collect object rotation |
observe_scale | bool | optional | false | Collect object scale |
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | "task_observer" |
name | string | required | — | Task instance name |
RecorderConfig: Recording & Export (stereotype: record)
Depends on a data_collect extension; asynchronously writes per-frame observations to disk, then post-processes on termination (HDF5, video, etc.).
| Field | Type | Required | Default | Description / Constraints |
|---|
backend_root_path | string | required | — | Root directory for recording output (supports root_key:// paths) |
record_backend | string | optional | lfs | Storage backend type |
record_fps | int | optional | 30 | Recording frame rate (used for frame throttling) |
postprocess_list | list[str] | optional | [] | Post-processing types to run on termination ⚠hdf5 / video / png_depth / preview_video |
use_recorder_step | bool | optional | false | Use the recorder's own step counter instead of the global simulation step |
data_collector_name | string | optional | data_collect | DataCollector extension instance name (must match the key in extension_cfg_dict) |
record_observer_names | list[str] | optional | [] | Observer names to record; empty = record all |
record_task_summary | bool | optional | false | Export task_summary.json on termination |
ReplayConfig: Trajectory Replay (stereotype: replay)
Reads a trajectory from record.h5 and drives entities in simulation to replay it. Additional cameras (ReplayCameraConfig) can be added for multi-angle recording.
| Field | Type | Required | Default | Description / Constraints |
|---|
hdf5_path | string | required | — | Path to record.h5 (supports root_key:// paths) |
scene_cfg_path | string | optional | — | Scene config file path to use during replay |
spawnable_names | list[str] | optional | [] | Entity names to load; empty = load all |
replay_camera_cfgs | list[ReplayCameraConfig] | optional | [] | Additional cameras for replay; see ReplayCameraConfig |
| Field | Type | Required | Default | Description / Constraints |
|---|
width | int | required | — | Image width in pixels |
height | int | required | — | Image height in pixels |
position | list[3] | required | — | Camera position [x, y, z] in meters |
rotation | list[4] | required | — | Camera rotation as quaternion [w, x, y, z] |
data_types | list[str] | optional | ["rgb"] | Data types to collect (same as CameraConfig) |
ServerConfig: REST API Server (stereotype: server)
Starts a Flask HTTP server, auto-registering all @apiclass-decorated controller methods as POST /{class}/{method} routes.
| Field | Type | Required | Default | Description / Constraints |
|---|
host | string | optional | 0.0.0.0 | Listen address |
port | int | optional | 8080 | Listen port ⚠1024–65535 |
debug | bool | optional | false | Flask debug mode (disable in production) |
BenchmarkConfig: Episode Evaluation (stereotype: benchmark)
Runs user-defined policy evaluation in a separate thread per episode, assessing goal conditions and reporting success rate. Policy class must extend Policy and implement the required interface.
| Field | Type | Required | Default | Description / Constraints |
|---|
episode_num | int | required | — | Total number of episodes |
action_frequency | float | optional | 10.0 | Policy control frequency in Hz |
timeout_per_episode | float | null | optional | null | Per-episode timeout in seconds; null = no timeout |
goals | list[GoalConfig] | optional | [] | Goal conditions evaluated at the end of each episode |
policy | PolicyConfig | required | — | Policy config; stereotype specifies the user-defined policy type |
data_collector_name | string | optional | data_collect | DataCollector extension instance name |
required_observer_names | list[str] | optional | [] | Observer names required for the benchmark to run |
terminate_sim_when_finished | bool | optional | false | Whether to terminate the simulation when all episodes complete |
| Field | Type | Required | Default | Description / Constraints |
|---|
stereotype | string | required | — | Policy type; must match the key registered with @stereotype.register_config |
... | any | optional | — | Any additional fields defined in the user's PolicyConfig subclass, parsed by @configclass |
Example
extension:
extension_cfg_dict:
my_data_collect:
stereotype: data_collect
enable: true
observer_cfgs:
- stereotype: robot_observer
name: arm
observe_joint_positions: true
observe_ee_pose: true
- stereotype: sensor_observer
name: wrist_cam
observe_rgb: true
observe_depth: true
record:
stereotype: record
enable: true
backend_root_path: datasets://runs/run001
record_fps: 30
postprocess_list: [hdf5, video]
data_collector_name: my_data_collect
server:
stereotype: server
enable: false
host: 0.0.0.0
port: 8080
debug: false