Task Descriptors#
A task descriptor is a YAML file that declares everything AutoData needs to know about a task: its subtasks per end-effector, the signals that mark subtask boundaries, cross-arm constraints, and the data generation policy for the task. It is the single source of truth shared by the annotation tool and the data generator. Both load it, so annotations and generation can never disagree about what the subtasks are.
Example descriptors live in franka_cube_stack.yaml (MimicGen), gr1_pick_place.yaml (DexMimicGen, two arms), and franka_cube_stack_skillgen.yaml (SkillGen).
YAML Schema#
name: <str> # task name
description: <str> # human-readable description of the task
algo: <str> # mimicgen | dexmimicgen | skillgen
subtasks:
<eef_name>:
- object_ref: <str>
description: <str>
subtask_start_signal: <str>
subtask_term_signal: <str>
# data generation parameters for the subtask:
selection_strategy: <str>
selection_strategy_kwargs: {<kwarg>: <value>}
first_subtask_start_offset_range: [<int>, <int>]
subtask_term_offset_range: [<int>, <int>]
action_noise: <float>
num_interpolation_steps: <int>
num_fixed_steps: <int>
apply_noise_during_interpolation: <bool>
algo_params: {<kwarg>: <value>} # optional, additional per-algorithm params
- ...
# optional, cross-subtask constraints for multi-arm tasks
constraints:
- constraint_type: <str>
eef_subtask_constraint_tuple: [[<eef>, <int>], [<eef>, <int>]]
sequential_min_time_diff: <int>
coordination_scheme: <str>
coordination_scheme_pos_noise_scale: <float>
coordination_scheme_rot_noise_scale: <float>
coordination_synchronize_start: <bool>
# data generation parameters for the task:
generation_policy:
name: <str>
seed: <int>
num_trials: <int>
guarantee_success: <bool>
keep_failed: <bool>
use_skillgen: <bool>
select_src_per_subtask: <bool>
select_src_per_arm: <bool>
transform_first_robot_pose: <bool>
interpolate_from_last_target_pose: <bool>
Descriptors are validated on load and a violation raises an error naming the offending field.
Subtasks#
A subtask is a contiguous segment of a demonstration in which an end-effector’s motion is dictated by a single object, such as reaching for a cube or placing it on another cube. A subtask ends and the next one begins when the object dictating the motion changes. During generation, AutoData selects a recorded subtask segment, transforms it into the current scene, connects the robot’s current trajectory to the segment, and replays it.
The subtasks section of the YAML schema groups subtasks by <eef_name>. The eef name key must exactly match
an end-effector name exposed by the embodiment descriptor, such as franka or left / right.
Declaration order is execution order and determines the integer subtask indices used by constraints.
Field |
Default |
Meaning |
|---|---|---|
|
Required |
End-effector whose ordered subtask list follows. It must match the embodiment descriptor. MimicGen and SkillGen expect one EEF; DexMimicGen expects at least two. |
|
|
Name of the object whose pose defines the subtask’s reference frame. The name must match a Datastream object-pose key. |
|
|
Human-readable summary exposed to tools and agents. It does not affect generation. |
|
|
Subtask start-signal name. SkillGen only. |
|
|
Subtask end-signal name. Required for every non-final subtask. |
|
|
Inclusive start-index offset range |
|
|
Inclusive termination-boundary offset range |
|
|
Strategy used to choose the source demonstration for this segment. See the table below. |
|
|
Keyword arguments passed directly to |
|
|
Scale of independent Gaussian noise applied to pose-action values during data generation. |
|
|
Number of bridge steps from the current starting pose to the transformed segment’s first pose. |
|
|
Extra bridge steps that hold the subtasks’s first target pose before replay begins. |
|
|
Whether |
|
|
Algorithm-specific fields. MimicGen and DexMimicGen accept no additional fields; SkillGen’s supported field is listed below. Unknown keys are rejected when the descriptor loads. |
Selection strategies
|
Selection behavior |
Supported |
|---|---|---|
|
Selects uniformly from all source demonstrations. This is the only strategy allowed when
|
None. |
|
Compares each source segment’s object pose at its first step with the object’s current pose,
then randomly chooses one of the |
|
|
Transforms each source segment’s first end-effector pose into the current object frame,
compares it with the robot’s current end-effector pose, then randomly chooses one of the
|
|
Both nearest-neighbor strategies rank sources using
pos_weight * position_distance + rot_weight * rotation_angle. Position distance is Euclidean
distance (m), and rotation distance is the angular difference (rad). nn_k must be at least 1 and
is capped at the number of available source demonstrations. Use nn_k: 1 to always choose the nearest source.
SkillGen ``algo_params``
Field |
Default |
Meaning |
|---|---|---|
|
|
Inclusive start-boundary offset range |
Constraints (multi-EEF)#
The optional constraints list relates two subtasks in a multi-end-effector task. Each subtask is
identified by its end-effector name and zero-based index in that end-effector’s subtasks list. Constraints
are used to ensure that subtasks are executed in a specific order or in coordination.
Constraints are currently supported only by DexMimicGen.
Field |
Default |
Meaning |
|---|---|---|
|
|
List of cross-subtask constraint mappings. Omit it when the task has no constraints. |
|
Required |
|
|
Required |
Exactly two |
|
|
Sequential only. |
|
|
Coordination only. Controls the shared pose transform applied to both source segments. See the coordination scheme table below. |
|
|
Coordination only. Half-width of uniform xyz translation noise (m) added to the shared
transform. Each component is sampled from |
|
|
Coordination only. Half-width of uniform per-axis rotation noise (rad) added to the shared
transform. Each component is sampled from |
|
|
Coordination only. If |
Constraint types
Type |
Behavior |
|---|---|
|
The first pair in |
|
The pairs are peers. Both use the same selected source demonstration and shared pose
transform. Their final |
Coordination schemes
Scheme |
Shared transform |
|---|---|
|
Identity transform: replay both source segments without adapting them to a moved reference
object. An |
|
Full rigid transform from the source reference-object pose to its current pose, including
translation and rotation. The coordinated subtask establishing the transform requires an
|
|
Translation from the source reference-object position to its current position; recorded
orientations are unchanged. The coordinated subtask establishing the transform requires an
|
Generation Policy#
The generation_policy section of the YAML schema defines data generation parameters for the task.
It controls source selection, trajectory stitching, recording,
and when generation stops. All fields use their defaults if omitted from the task descriptor.
Field |
Default |
Meaning |
|---|---|---|
|
|
Identifier for the generation run. |
|
|
Seeds Python’s |
|
|
Generation target. It counts successful demonstrations when |
|
|
If |
|
|
Whether failed attempts are exported to a separate HDF5 file. Successful demonstrations are exported to the main output file regardless of this flag. |
|
|
Whether annotation must collect SkillGen subtask start signals. During generation this
value is overwritten to match the algorithm selected by |
|
|
Whether each subtask may select a new source demonstration. If |
|
|
Whether each EEF selects its source demonstration independently. If |
|
|
Whether to prepend the source EEF pose to every subtask’s target-pose sequence. If
|
|
|
Whether non-first subtasks seed their interpolation bridge from the last executed waypoint.
If |