Task Configuration Guide
January 7, 2026 · View on GitHub
This document describes how to create task configuration files (JSON format) for defining robot simulation tasks. Configuration files are parsed by client/layout/task_generate.py to generate specific task instances.
Table of Contents
- Basic Structure
- Scene Origin (origin)
- Object Configuration (objects)
- Scene Configuration (scene)
- Robot Configuration (robot)
- Task Stages (stages)
- Other Configurations
- Complete Examples
- Quick Start
Basic Structure
A task configuration file is a JSON file containing the following main sections:
{
"task": "任务名称",
"origin": { ... }, // Scene origin (optional)
"objects": { ... }, // Object configuration (required)
"scene": { ... }, // Scene configuration (required)
"robot": { ... }, // Robot configuration (optional)
"stages": [ ... ], // Task stages (required)
"recording_setting": { ... }, // Recording settings (optional)
"task_description": { ... }, // Task description (optional)
"task_metric": { ... } // Task evaluation metrics (optional)
}
Scene Origin (origin)
The origin field defines the global origin position of the scene. All object and robot positions will be transformed relative to this origin.
Structure
{
"origin": {
"position": [2.91, 0.76, 0.0],
"quaternion": [1, 0, 0, 0]
}
}
Field Description
- position (required): Origin position in world coordinates [x, y, z] (unit: meters)
- quaternion (required): Origin rotation (quaternion format w, x, y, z)
Important Notes
- If
originis configured, all workspace, object, and robot positions will be transformed relative tooriginfirst, then converted to world coordinates - If
originis not configured, it defaults toposition: [0, 0, 0]andquaternion: [1, 0, 0, 0] - Recommendation for choosing origin position: Usually choose the midpoint of the robot's operating space in front of it, such as the center of a table. This simplifies the configuration of subsequent workspaces and object positions
Object Configuration (objects)
The objects field defines the configuration of all objects in the scene, containing the following sub-fields:
Structure
{
"objects": {
"task_related_objects": [ ... ], // Task-related objects (required)
"scene_objects": [ ... ], // Scene objects (optional)
"attach_objects": [ ... ], // Attached objects (optional)
"fix_objects": [ ... ], // Fixed position objects (optional)
"constraints": null // Constraints (optional)
}
}
1. task_related_objects (Task-Related Objects)
Main objects involved in task execution. These objects will be placed with priority.
Basic Format
{
"object_id": "unique_object_id",
"data_info_dir": "objects/path/to/object",
"workspace_id": "work_table",
"mass": 0.05
}
Candidate Objects (candidate_objects)
If the same object_id needs to be randomly selected from multiple candidates, use candidate_objects:
{
"object_id": "geniesim_2025_storage_box_2",
"candidate_objects": [
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_006/",
"object_id": "geniesim_2025_storage_box_006_green"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_007/",
"object_id": "geniesim_2025_storage_box_007_blue"
}
],
"mass": 1000,
"workspace_id": "box_poses"
}
Notes:
- The system will randomly select one from
candidate_objects - External fields (such as
mass,workspace_id) will override corresponding fields in candidate objects - The
object_idused is the one defined externally, not the one in candidate objects
Workspace Relative Position
If an object needs to be placed relative to a workspace:
{
"object_id": "geniesim_2025_storage_box_2",
"workspace_id": "box_poses",
"workspace_relative_position": [0.0, 0.0, 0.0],
"workspace_relative_orientation": [0.5, 0.5, 0.5, 0.5]
}
2. scene_objects (Scene Objects)
Background objects used to increase scene complexity, supporting sampling configuration.
Sampling Configuration
{
"sample": {
"min_num": 2, // Minimum sampling count
"max_num": 7, // Maximum sampling count
"max_repeat": 1 // Maximum repeat count
},
"workspace_id": "work_table",
"available_objects": [
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_000/",
"object_id": "geniesim_2025_apple_000",
"mass": 0.05
},
{
"data_info_dir": "objects/benchmark/orange/benchmark_orange_001/",
"object_id": "geniesim_2025_orange_001",
"mass": 0.05
}
]
}
Notes:
sampledefines sampling rulesavailable_objectsis the candidate object list- The system will randomly sample
min_numtomax_numobjects fromavailable_objects - Nested sampling is supported (
available_objectscan also contain object groups withsample)
3. attach_objects (Attached Objects)
Objects attached to other objects, such as items placed in boxes.
{
"sample": {
"min_num": 1,
"max_num": 2,
"max_repeat": 2
},
"anchor_info": {
"anchor_object": "geniesim_2025_target_storage_box", // Anchor object ID
"position": [0, 0.07, 0.04], // Relative position
"quaternion": [1, 0, 0, 0], // Relative rotation (optional)
"random_range": [0.04, 0.0, 0.04] // Random range (optional)
},
"workspace_id": "work_table",
"available_objects": [ ... ]
}
Notes:
anchor_objectspecifies the object ID to attach topositionandquaterniondefine the pose relative to the anchor objectrandom_rangeallows random offset within the specified range
4. fix_objects (Fixed Position Objects)
Fixed position objects. Format is the same as task_related_objects, but position is directly specified by configuration.
Field Description
All object types support the following fields:
- object_id (required): Unique identifier for the object
- data_info_dir (required): Object data directory path, relative to the
$SIM_ASSETSenvironment variable - workspace_id (optional): Workspace ID, specifying the workspace where the object is placed
- mass (optional): Object mass (kg)
- workspace_relative_position (optional): Position relative to workspace [x, y, z]
- workspace_relative_orientation (optional): Rotation relative to workspace (quaternion w, x, y, z)
- chinese_semantic_name (optional): Chinese semantic name, can be a list (random selection)
- english_semantic_name (optional): English semantic name, can be a list (random selection)
- allow_duplicate (optional): Whether to allow duplicates (default
false)
Scene Configuration (scene)
The scene field defines the basic information and workspaces of the scene.
Structure
{
"scene": {
"scene_id": "background/home_b/",
"scene_info_dir": "background/home_b/",
"scene_usd": "background/home_b/home_b_00.usda", // or list
"function_space_objects": { ... }
}
}
Field Description
- scene_id (required): Scene ID, used to match robot initial pose
- scene_info_dir (required): Scene information directory path
- scene_usd (required): USD scene file path, can be a string or list (random selection when list)
- function_space_objects (optional): Workspace definitions
function_space_objects (Workspaces)
Defines workspace areas for object placement. Depending on the configuration method, the system uses two different layout generators (refer to GeneratorType.SPACE and GeneratorType.SAMPLE):
1. Workspace Area Mode (SPACE)
When the workspace does not contain the poses field, the system uses GeneratorType.SPACE mode:
{
"work_table": {
"position": [0.0, 0.01, 0.9],
"quaternion": [1, 0, 0, 0],
"size": [0.5, 0.8, 0.2]
}
}
Characteristics:
- Multiple objects will be simultaneously arranged in this area
- The system uses a 2D layout solver (
LayoutSolver2D) to automatically calculate positions - Positions are selected within the area with collision avoidance as the principle
- Suitable for scenarios where multiple objects need to be randomly distributed in the same area (e.g., fruits to be grasped placed on a table, can be randomly arranged within the area)
Field Description:
position: Workspace area center position [x, y, z]quaternion: Workspace area rotation (quaternion w, x, y, z)size: Workspace area dimensions [x, y, z] (unit: meters)blocked_zone(optional): Prohibited placement areas
2. Candidate Position Mode (SAMPLE)
When the workspace contains the poses field, the system uses GeneratorType.SAMPLE mode:
{
"box_poses": {
"poses": [
{
"position": [0.11, 0.09, 0.9],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.03, 0.0, 0]
}
},
{
"position": [0.11, -0.1, 0.9],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.03, 0.0, 0]
}
}
]
}
}
Characteristics:
- Multiple objects will sample positions from candidate positions in the
poseslist - Different objects will not be placed at the same position (each pose is assigned to at most one object)
- If the number of objects exceeds the number of poses, the system will report an error
- Each object randomly selects one from candidate positions, and can only perform small random offsets near the point through
random.delta_position - Suitable for scenarios where objects need to be placed at specific position points (e.g., multiple boxes need to be placed left and right on a table, need to sample placement points from two positions)
Field Description:
poses: Candidate position list, each element contains:position: Position [x, y, z]quaternion: Rotation (quaternion w, x, y, z)random(optional): Random offset configurationdelta_position: Position random range [x, y, z]delta_angle: Angle random range (radians)
chinese_position_semantic(optional): Chinese position semantic nameenglish_position_semantic(optional): English position semantic name
Comparison of Two Modes:
| Feature | SPACE (Workspace Area) | SAMPLE (Candidate Positions) |
|---|---|---|
| Configuration | Contains size, does not contain poses | Contains poses array |
| Object Placement | Simultaneously arranged in area, can be random within area | Sampled from candidate positions, can only be random near points |
| Position Calculation | 2D layout solver automatically calculates | Selected from predefined positions |
| Collision Detection | Automatically avoids collisions | Does not reuse the same position |
| Use Case | Fruits to be grasped placed on table, can be randomly arranged in area | Multiple boxes need to be placed left and right on table, need to sample placement points from two positions |
Robot Configuration (robot)
The robot field defines the robot configuration and initial state.
Structure
{
"robot": {
"arm": "dual", // "left", "right", "dual"
"robot_id": "G2", // "G1", "G2"
"robot_cfg": "G2_omnipicker_fixed_dual.json",
"robot_init_pose": { ... },
"init_arm_pose": { ... },
"init_arm_pose_noise": { ... }
}
}
robot_init_pose (Robot Initial Pose)
{
"robot_init_pose": {
"position": [-0.66, 0.0, 0.0],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.06, 0.06, 0]
}
}
}
Notes:
positionandquaterniondefine the initial pose of the robot baserandom.delta_positionallows random position offset within the specified range
init_arm_pose (Arm Initial Joint Angles)
Define the initial angles (radians) of each robot joint:
{
"init_arm_pose": {
"idx21_arm_l_joint1": 0.739033,
"idx22_arm_l_joint2": -0.717023,
"idx61_arm_r_joint1": -0.739033,
"idx62_arm_r_joint2": -0.717023,
// ... other joints
"idx41_gripper_l_outer_joint1": 0.85,
"idx81_gripper_r_outer_joint1": 0.85
}
}
init_arm_pose_noise (Joint Angle Noise)
Add random noise to joint angles:
{
"init_arm_pose_noise": {
".*_arm_.*": {
"noise_type": "uniform",
"low": -0.05,
"high": 0.05
}
}
}
Notes:
- Keys are regular expressions matching joint names
noise_typecan be"uniform"(uniform distribution)lowandhighdefine the noise range
Task Stages (stages)
stages is an array that defines the various stages of task execution.
Basic Structure
{
"stages": [
{
"action": "pick", // Action type
"action_description": { ... },
"active": { ... }, // Active object
"passive": { ... }, // Passive object
"extra_params": { ... }, // Extra parameters
"checker": [ ... ] // Checker (optional)
}
]
}
Action Types
- pick: Grasp object
- place: Place object
- rotate: Rotate object
- insert: Insert object
- reset: Reset arm
active and passive
{
"active": {
"object_id": "gripper", // or specific object ID
"primitive": null // Grasp primitive (optional)
},
"passive": {
"object_id": "geniesim_2025_target_grasp_object",
"primitive": null
}
}
Notes:
activeis the object performing the action (usually"gripper")passiveis the object being operated onobject_idcan be a string, list, or dictionary (when dictionary, selected based onarm)
extra_params (Extra Parameters)
Different action types have different parameters. For detailed parameter descriptions, please refer to Action Extra Parameters Detailed Description.
pick Action
{
"extra_params": {
"arm": "auto", // "left", "right", "auto"
"disable_upside_down": true, // Disable upside-down grasping
"flip_grasp": true, // Flip grasp
"grasp_offset": 0.01, // Grasp offset
"pick_up_distance": 0.1, // Lift distance
"grasp_upper_percentile": 75 // Grasp upper percentile
}
}
place Action
{
"extra_params": {
"arm": "auto",
"place_with_origin_orientation": true
}
}
insert Action
{
"extra_params": {
"arm": "auto",
"pre_insert_offset": 0.1,
"gripper_state": "open"
}
}
rotate Action
{
"extra_params": {
"arm": "auto",
"place_up_axis": "y",
"pick_up_distance": 0.05
}
}
reset Action
{
"extra_params": {
"arm": "auto",
"plan_type": "AvoidObs" // "Simple", "AvoidObs"
}
}
Note: For complete parameter lists and descriptions of each action, please refer to Action Extra Parameters Detailed Description.
action_description (Action Description)
Used to generate task description text:
{
"action_description": {
"action_text": "{左/右}臂拿起桌面上的苹果",
"english_action_text": "{Left/Right} arm picks up the apple on the table"
}
}
Placeholders:
{左/右}or{Left/Right}or{left/right}: Automatically replaced based on the arm used{object:object_id}: Replaced with the object's Chinese/English semantic name{position:object_id}: Replaced with the object's position semantic name
checker (Checker)
Used to verify whether a stage has been successfully completed. For detailed checker parameter descriptions, please refer to Runtime Checker Description.
Basic Structure:
{
"checker": [
{
"checker_name": "distance_to_target",
"params": {
"object_id": "geniesim_2025_target_grasp_object",
"target_id": "gripper",
"rule": "lessThan",
"value": 0.08
}
}
]
}
Available Checkers:
distance_to_target: Check distance between object and targetlocal_axis_angle: Check angle between object's local axis and target vector
For detailed parameter descriptions and examples, please refer to Runtime Checker Description.
Other Configurations
recording_setting (Recording Settings)
{
"recording_setting": {
"camera_list": [
"/G2/head_link3/head_front_Camera",
"/G2/gripper_r_base_link/Right_Camera"
],
"fps": 30,
"num_of_episode": 8,
"noised_probability": 0.1
}
}
task_description (Task Description)
{
"task_description": {
"task_name": "将苹果放入对应的收纳盒中",
"english_task_name": "sort the apple into the corresponding storage box",
"init_scene_text": "机器人在桌面前,桌面上放着一个水果和两个盛有不同水果的收纳盒"
}
}
Supports placeholders (same as action_description).
task_metric (Task Evaluation Metrics)
Defines data filtering rules used to verify whether collected data meets quality requirements after data collection. For detailed filtering rule descriptions, please refer to Data Filter Rules Description.
Basic Structure:
{
"task_metric": {
"filter_rules": [
{
"rule_name": "is_gripper_in_view",
"params": {
"camera": "head",
"gripper": "right",
"out_view_allow_time": 0.2
},
"result_code": 4
},
{
"rule_name": "is_object_relative_position_in_target",
"params": {
"objects": ["geniesim_2025_target_grasp_object"],
"target": "geniesim_2025_target_storage_box",
"relative_position_range": [[-0.06, 0.06], [-0.05, 0.05], [-0.12, 0.12]]
},
"result_code": 1
}
]
}
}
Available Filter Rules:
is_object_reach_target: Check if object reaches target areais_object_pose_similar2start: Check if object pose is similar to initialis_object_in_view: Check if object is within image boundsis_gripper_in_view: Check if gripper is in camera viewis_object_end_pose_up: Check if object's final pose is vertically upwardis_object_end_higher_than_start: Check if object's final position is higher than initial positionis_objects_distance_greater_than: Check distance between objectsis_object_end_in_region: Check if object's final position is in specified regionis_object_grasped_by_gripper: Check if object is grasped by gripperis_object_relative_position_in_target: Check object's relative position to target object
For detailed parameter descriptions and examples, please refer to Data Filter Rules Description.
Complete Examples
For complete task configuration examples, please refer to configuration files in the tasks/geniesim_2025/ directory, for example:
tasks/geniesim_2025/sort_fruit/g2/sort_the_fruit_into_the_box_apple_g2.json- Fruit sorting task- Other task configuration files
Quick Start
Creating Task Configuration from Scratch
This section uses tasks/geniesim_2025/sort_fruit/g2/sort_the_fruit_into_the_box_apple_g2.json as an example to describe in detail how to create a task configuration from scratch.
1. Configure Scene and Origin (origin)
Design Rationale: First, you need to select a scene file and determine the scene origin. The origin is usually chosen as the midpoint of the operating space in front of the robot (such as the center of a table), which simplifies the configuration of subsequent workspaces and object positions.
{
"origin": {
"position": [2.91, 0.76, 0.0],
"quaternion": [1, 0, 0, 0]
},
"scene": {
"scene_id": "background/home_b/",
"scene_info_dir": "background/home_b/",
"scene_usd": ["background/home_b/home_b_00.usda"],
"function_space_objects": {
"work_table": {
"position": [-0.15, 0.01, 0.9],
"quaternion": [1, 0, 0, 0],
"size": [0.24, 0.8, 0.2]
},
"box_poses": {
"poses": [
{
"position": [0.11, 0.09, 0.9],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.03, 0.0, 0]
}
},
{
"position": [0.11, -0.1, 0.9],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.03, 0.0, 0]
}
}
]
}
}
}
}
Notes:
work_tableuses SPACE mode (containssize), used for placing fruits to be grasped, can be randomly arranged within the areabox_posesuses SAMPLE mode (containsposes), used for placing two storage boxes, sampling from two candidate positions
2. Configure Robot
{
"robot": {
"arm": "dual",
"robot_id": "G2",
"robot_cfg": "G2_omnipicker_fixed_dual.json",
"robot_init_pose": {
"position": [-0.66, 0.0, 0.0],
"quaternion": [1, 0, 0, 0],
"random": {
"delta_position": [0.06, 0.06, 0]
}
},
"init_arm_pose": {
"idx21_arm_l_joint1": 0.739033,
"idx22_arm_l_joint2": -0.717023,
// ... other joints
},
"init_arm_pose_noise": {
".*_arm_.*": {
"noise_type": "uniform",
"low": -0.05,
"high": 0.05
}
}
}
}
3. Configure Task-Related Objects (task_related_objects)
Design Rationale: The task needs to grasp an apple and place it into the corresponding storage box. Therefore, we need to configure:
- Target grasp object: Randomly select one from multiple apple assets
- Two storage boxes: Randomly select from multiple storage box assets, use SAMPLE mode to sample placement from two candidate positions
{
"objects": {
"task_related_objects": [
{
"object_id": "geniesim_2025_target_grasp_object",
"candidate_objects": [
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_000/",
"object_id": "geniesim_2025_apple_000"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_001/",
"object_id": "geniesim_2025_apple_001"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_002/",
"object_id": "geniesim_2025_apple_002"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_003/",
"object_id": "geniesim_2025_apple_003"
}
],
"mass": 0.05,
"workspace_id": "work_table"
},
{
"object_id": "geniesim_2025_target_storage_box",
"candidate_objects": [
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_006/",
"object_id": "geniesim_2025_storage_box_006_green"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_007/",
"object_id": "geniesim_2025_storage_box_007_blue"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_008/",
"object_id": "geniesim_2025_storage_box_008_white"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_009/",
"object_id": "geniesim_2025_storage_box_009_red"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_010/",
"object_id": "geniesim_2025_storage_box_010_grey"
},
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_011/",
"object_id": "geniesim_2025_storage_box_011_black"
}
],
"mass": 1000,
"workspace_id": "box_poses",
"workspace_relative_position": [0.0, 0.0, 0.0],
"workspace_relative_orientation": [0.5, 0.5, 0.5, 0.5]
},
{
"object_id": "geniesim_2025_storage_box_2",
"candidate_objects": [
{
"data_info_dir": "objects/benchmark/storage_box/benchmark_storage_box_006/",
"object_id": "geniesim_2025_storage_box_006_green"
},
// ... other storage box options
],
"mass": 1000,
"workspace_id": "box_poses",
"workspace_relative_position": [0.0, 0.0, 0.0],
"workspace_relative_orientation": [0.5, 0.5, 0.5, 0.5]
}
]
}
}
4. Configure Attached Objects (attach_objects)
Design Rationale: To increase scene realism and complexity, we need to place 1-2 apples in the target storage box, and 1-2 other types of fruits (peaches, oranges, lemons, pomegranates, etc.) in another storage box. This demonstrates nested sampling: outer layer samples from multiple fruit groups, inner layer samples from multiple assets in each fruit group.
{
"objects": {
"attach_objects": [
{
"sample": {
"min_num": 1,
"max_num": 2,
"max_repeat": 2
},
"anchor_info": {
"anchor_object": "geniesim_2025_target_storage_box",
"position": [0, 0.07, 0.04],
"quaternion": [1, 0, 0, 0],
"random_range": [0.04, 0.0, 0.04]
},
"workspace_id": "work_table",
"available_objects": [
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_000/",
"object_id": "geniesim_2025_apple_000"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_001/",
"object_id": "geniesim_2025_apple_001"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_002/",
"object_id": "geniesim_2025_apple_002"
},
{
"data_info_dir": "objects/benchmark/apple/benchmark_apple_003/",
"object_id": "geniesim_2025_apple_003"
}
]
},
{
"sample": {
"min_num": 1,
"max_num": 1,
"max_repeat": 1
},
"workspace_id": "work_table",
"anchor_info": {
"anchor_object": "geniesim_2025_storage_box_2",
"position": [0, 0.12, 0],
"quaternion": [1, 0, 0, 0],
"random_range": [0.04, 0.0, 0.04]
},
"available_objects": [
{
"sample": {
"min_num": 1,
"max_num": 2,
"max_repeat": 2
},
"workspace_id": "work_table",
"available_objects": [
{
"data_info_dir": "objects/benchmark/peach/benchmark_peach_000/",
"object_id": "geniesim_2025_peach_000"
},
{
"data_info_dir": "objects/benchmark/peach/benchmark_peach_019/",
"object_id": "geniesim_2025_peach_019"
},
{
"data_info_dir": "objects/benchmark/peach/benchmark_peach_020/",
"object_id": "geniesim_2025_peach_020"
},
{
"data_info_dir": "objects/benchmark/peach/benchmark_peach_021/",
"object_id": "geniesim_2025_peach_021"
}
]
},
{
"sample": {
"min_num": 1,
"max_num": 2,
"max_repeat": 2
},
"workspace_id": "work_table",
"available_objects": [
{
"data_info_dir": "objects/benchmark/orange/benchmark_orange_001/",
"object_id": "geniesim_2025_orange_001"
},
{
"data_info_dir": "objects/benchmark/orange/benchmark_orange_002/",
"object_id": "geniesim_2025_orange_002"
},
{
"data_info_dir": "objects/benchmark/orange/benchmark_orange_004/",
"object_id": "geniesim_2025_orange_004"
}
]
},
{
"sample": {
"min_num": 1,
"max_num": 2,
"max_repeat": 2
},
"workspace_id": "work_table",
"available_objects": [
{
"data_info_dir": "objects/benchmark/lemon/benchmark_lemon_027/",
"object_id": "geniesim_2025_lemon_027"
},
{
"data_info_dir": "objects/benchmark/lemon/benchmark_lemon_028/",
"object_id": "geniesim_2025_lemon_028"
},
{
"data_info_dir": "objects/benchmark/lemon/benchmark_lemon_029/",
"object_id": "geniesim_2025_lemon_029"
},
{
"data_info_dir": "objects/benchmark/lemon/benchmark_lemon_030/",
"object_id": "geniesim_2025_lemon_030"
}
]
}
]
}
]
}
}
5. Configure Task Stages (stages)
Design Rationale: The task consists of three stages: grasp apple, place into target storage box, reset arm. Each stage needs to configure action type, action description, checker, etc.
{
"stages": [
{
"action": "pick",
"action_description": {
"action_text": "{左/右}臂拿起桌面上的苹果",
"english_action_text": "{Left/Right} arm picks up the apple on the table"
},
"active": {
"object_id": "gripper",
"primitive": null
},
"passive": {
"object_id": "geniesim_2025_target_grasp_object",
"primitive": null
},
"extra_params": {
"arm": "auto",
"disable_upside_down": true,
"flip_grasp": true,
"grasp_offset": 0.01,
"pick_up_distance": 0.1,
"grasp_upper_percentile": 75
},
"checker": [
{
"checker_name": "distance_to_target",
"params": {
"object_id": "geniesim_2025_target_grasp_object",
"target_id": "gripper",
"rule": "lessThan",
"value": 0.08
}
}
]
},
{
"action": "place",
"action_description": {
"action_text": "将拿着的苹果归类到桌面上对应的收纳筐中",
"english_action_text": "Place the apple into the corresponding storage bin"
},
"active": {
"object_id": "geniesim_2025_target_grasp_object",
"primitive": null
},
"passive": {
"object_id": "geniesim_2025_target_storage_box",
"primitive": null
},
"extra_params": {
"arm": "auto",
"place_with_origin_orientation": true
},
"checker": [
{
"checker_name": "distance_to_target",
"params": {
"object_id": "geniesim_2025_target_grasp_object",
"target_id": "geniesim_2025_target_storage_box",
"target_offset": {
"frame": "world",
"position": [0, 0, 0.02]
},
"rule": "lessThan",
"value": 0.12
}
}
]
},
{
"action": "reset",
"action_description": {
"action_text": "{左/右}臂复位",
"english_action_text": "{Left/Right} arm resets"
},
"active": {
"object_id": "gripper",
"primitive": null
},
"passive": {
"object_id": "gripper",
"primitive": null
},
"extra_params": {
"arm": "auto"
}
}
]
}
6. Configure Task Evaluation Metrics (task_metric)
Design Rationale: After data collection, we need to verify the quality of collected data, such as checking if the gripper is in view, if objects are successfully placed at target positions, etc.
{
"task_metric": {
"filter_rules": [
{
"rule_name": "is_gripper_in_view",
"params": {
"camera": "head",
"gripper": "right",
"out_view_allow_time": 0.2
},
"result_code": 4
},
{
"rule_name": "is_gripper_in_view",
"params": {
"camera": "head",
"gripper": "left",
"out_view_allow_time": 0.1
},
"result_code": 4
},
{
"rule_name": "is_object_relative_position_in_target",
"params": {
"objects": ["geniesim_2025_target_grasp_object"],
"target": "geniesim_2025_target_storage_box",
"relative_position_range": [[-0.06, 0.06], [-0.05, 0.05], [-0.12, 0.12]]
},
"result_code": 1
}
]
}
}
7. Configure Other Settings
{
"task": "sort_the_fruit_into_the_box_apple_g2",
"task_description": {
"task_name": "将苹果放入对应的收纳盒中",
"english_task_name": "sort the apple into the corresponding storage box",
"init_scene_text": "机器人在桌面前,桌面上放着一个水果和两个盛有不同水果的收纳盒"
},
"recording_setting": {
"camera_list": [
"/G2/head_link3/head_front_Camera",
"/G2/gripper_r_base_link/Right_Camera",
"/G2/gripper_l_base_link/Left_Camera",
"/G2/head_link3/head_right_Camera",
"/G2/head_link3/head_left_Camera"
],
"fps": 30,
"num_of_episode": 8,
"noised_probability": 0.1
}
}
Modifying Existing Configuration
If you already have a similar task configuration, you can find a similar task in the tasks/geniesim_2025/ directory as a template, then modify the corresponding configuration items according to your needs.
Frequently Asked Questions
Q: How to implement random object selection?
A: Use the candidate_objects field, and the system will randomly select one from the candidates.
Q: How to attach objects to other objects?
A: Use attach_objects, and specify the anchor object and relative position through anchor_info.
Q: How to define multiple optional positions?
A: Use the poses array in workspace configuration. Note: Workspaces containing poses use SAMPLE mode, where multiple objects sample positions from candidate positions, and different objects will not be placed at the same position. If you need multiple objects arranged in the same area, use the workspace area mode (SPACE) containing size.
Q: How to implement sampling multiple objects?
A: Use sample configuration in scene_objects or attach_objects, specifying min_num and max_num.
Q: How to specify object paths?
A: data_info_dir is a path relative to the $SIM_ASSETS environment variable, for example "objects/benchmark/apple/benchmark_apple_000/".
Action Extra Parameters Detailed Description
Action extra parameters are defined in the extra_params field of stages to control the specific behavior of actions.
pick Action
Parameters:
arm(str, optional): Arm to use,"left","right"or"auto", default"right"grasp_offset(float, optional): Grasp offset (unit: meters), default0.03pre_grasp_offset(float, optional): Pre-grasp offset (unit: meters), default0.0grasp_lower_percentile(float, optional): Grasp lower percentile (0-100), default0grasp_upper_percentile(float, optional): Grasp upper percentile (0-100), default100disable_upside_down(bool, optional): Disable upside-down grasping, defaultfalseflip_grasp(bool, optional): Flip grasp (180 degrees around z-axis), defaultfalsepick_up_distance(float, optional): Lift distance (unit: meters), default0.12pick_up_type(str, optional): Lift type,"Simple"or"AvoidObs", default"Simple"use_near_point(bool, optional): Whether to use nearby point, defaultfalseerror_data(dict, optional): Error data configurationtype(str): Error type, such as"RandomPerturbations","MissGrasp","WrongTarget","KeepClose"params(dict): Error parameters
Example:
{
"extra_params": {
"arm": "auto",
"disable_upside_down": true,
"flip_grasp": true,
"grasp_offset": 0.01,
"pick_up_distance": 0.1,
"grasp_upper_percentile": 75
}
}
place Action
Parameters:
arm(str, optional): Arm to use,"left","right"or"auto", default"right"place_with_origin_orientation(bool, optional): Whether to use original orientation for placement, defaulttruedisable_upside_down(bool, optional): Disable upside-down placement, defaultfalseuse_pre_place(bool, optional): Whether to use pre-placement, defaultfalsepre_place_offset(float, optional): Pre-placement offset (unit: meters), default0.12pre_place_direction(str, optional): Pre-placement direction, default"z"pre_pose_noise(dict, optional): Pre-pose noise configurationposition_noise(float): Position noiserotation_noise(float): Rotation noise
gripper_state(str | None, optional): Gripper state,"open","close"orNone, default"open"post_place_action(list[dict], optional): Post-placement action listgripper_cmd(str, optional): Gripper commanddistance(float, optional): Movement distance (unit: meters), default0.02direction(list[float], optional): Movement direction (in passive object's local coordinate system), default[0, 0, 1]
use_near_point(bool, optional): Whether to use nearby point, defaultfalseerror_data(dict, optional): Error data configuration (same format as pick)
Example:
{
"extra_params": {
"arm": "auto",
"place_with_origin_orientation": true,
"use_pre_place": true,
"pre_place_offset": 0.12
}
}
insert Action
Inherits from place action, all parameters are the same as place action.
Example:
{
"extra_params": {
"arm": "auto",
"use_pre_place": true,
"pre_place_offset": 0.1,
"gripper_state": "open"
}
}
rotate Action
Parameters:
arm(str, optional): Arm to use,"left","right"or"auto", default"right"place_up_axis(str, optional): Placement upward axis,"x","y"or"z", default"y"pick_up_distance(float, optional): Lift distance (unit: meters), default0.0pick_up_direction(str, optional): Lift direction,"x","y"or"z", default"z"place_origin_position(bool, optional): Whether to place at original position, defaulttrue
Example:
{
"extra_params": {
"arm": "auto",
"place_up_axis": "y",
"pick_up_distance": 0.05
}
}
reset Action
Parameters:
arm(str, optional): Arm to use,"left","right"or"auto", default"right"plan_type(str, optional): Planning type,"Simple"or"AvoidObs", default"AvoidObs"
Example:
{
"extra_params": {
"arm": "auto",
"plan_type": "AvoidObs"
}
}