Generation Algorithms#
AutoData ships three generation algorithms, selected with --alg on the CLI (the
task descriptor’s algo field independently selects which per-subtask algo_params
schema the descriptor is parsed with — keep the two consistent). All three plug into the
data generator and share the same skeleton — split
source demonstrations into subtask segments, select a segment per subtask, transform it to the
current scene, execute, and keep successful demonstrations — and differ in how segments are bridged and how
multiple arms are handled.
Algorithm |
Arms |
Bridging |
Notes |
|---|---|---|---|
|
1 |
Interpolation |
Vanilla single-arm MimicGen. |
|
2 |
Interpolation |
Adds per-arm subtasks and cross-arm coordination constraints. |
|
1 |
Motion planning |
cuRobo-planned, collision-free transit; requires start signals. |
MimicGen#
MimicGen (Mandlekar et al., 2023) is the foundation:
every subtask segment is stored relative to its reference object, so replaying it under a new
object pose is a rigid-body transform of the recorded end-effector trajectory. Between
segments, the end-effector linearly interpolates from its current pose to the transformed
segment start (num_interpolation_steps, optionally holding num_fixed_steps), and
per-step action_noise adds diversity across attempts. An attempt succeeds if the task’s
success condition holds at any step; only then is the demonstration exported (subject to the
generation policy).
The transformation requires task-space actions: the embodiment’s actions must encode end-effector pose targets (relative or absolute), which is what the embodiment adapters guarantee.
DexMimicGen#
DexMimicGen (Jiang et al., 2024) extends the recipe to two arms. Each end-effector declares its own subtask sequence in the descriptor, and segments are selected, transformed, and executed per arm. Two mechanisms keep the arms consistent:
Source selection scope — by default all arms replay segments from the same source demonstration (
select_src_per_arm: false), preserving whatever implicit coordination the human demonstration had.Constraints — explicit
sequential/coordinationentries in the descriptor synchronize specific subtask pairs across arms at runtime (see Task Descriptors).
SkillGen#
SkillGen (Garrett et al., 2024) replaces interpolation with motion-planned transit: each subtask executes as a collision-free cuRobo plan to the skill segment’s start, followed by the transformed skill replay. Grasped objects are attached to the kinematic chain during planning, so held objects are collision-checked too. This requires knowing exactly where skills start — hence subtask start signals and a termination signal on every subtask, including the final one. Constraints apply only during skill segments; transit is constraint-free. If planning fails for an attempt, the attempt is abandoned and counted as a failure.
See the SkillGen workflow and Motion Planners.
Source Demonstration Selection Strategies#
Which source segment is replayed for a subtask is decided by a selection strategy,
configured per subtask in the task descriptor (selection_strategy /
selection_strategy_kwargs):
Strategy |
Behavior |
|---|---|
|
Uniform random choice over source demonstrations. |
|
Ranks demonstrations by how close their reference-object pose is to the current one, then
picks randomly among the |
|
Ranks demonstrations by how close their (object-frame-transformed) source end-effector pose
lands to the current end-effector pose, then picks among the |
The nearest-neighbor strategies trade diversity for reliability: segments recorded under
similar geometry transform with less distortion, raising the success rate, while nn_k
keeps some randomness so the output does not collapse onto a single source demonstration. The shipped
examples use nearest_neighbor_object with nn_k: 3. How often selection re-runs — per
subtask, per arm, or once per episode — is set by the generation policy’s
select_src_per_subtask / select_src_per_arm flags.