Skip to content

[Proposal] Unify Atomic Skill benchmarks under configuration-driven suites #669

Description

@yuecideng

Proposal

Build a single configuration-driven benchmark path for Atomic Skills by extending the existing scripts/benchmark/motion_generation suite framework instead of maintaining one standalone benchmark runner per skill.

A suite configuration should select:

  • an embodiment component and optional initial-configuration overrides;
  • one or more planner adapters and their configurations;
  • Atomic Skills, cases, and physical stage evaluators;
  • nominal, robustness, and held-out generalization domains;
  • the measurement and reporting protocol.

The resolved suite should generate a planner-independent, versioned case manifest, execute every compatible planner on the same cases, evaluate success from physical scene evidence, and emit the existing reproducibility artifacts and report.

The intended data flow is:

Suite YAML
  ├─ embodiment component + overrides
  ├─ planner specifications
  ├─ Atomic Skill cases
  └─ versioned generalization domains
              ↓
      resolved case manifest
              ↓
 generic motion-generation runner
              ↓
 physical stage evaluators
              ↓
 trials.jsonl + aggregates.json + report.md

Reuse existing owners

  • Reuse SuiteCfg, planner/scenario/robot registries, the generic runner, and the artifact/report pipeline introduced by [Proposal] Neural Motion Generator benchmark with cuRobo baseline #437.
  • Reuse official embodiment components under embodichain_tasks/configs/components/embodiments/ rather than defining benchmark-only robot constructions.
  • Represent each Atomic Skill through an AtomicSkillCaseProvider plus a physical evaluator. Invocation construction, case generation, stage measurement, and aggregation should remain separate concerns.
  • Reuse the per-skill stage model being developed in Benchmark seven more atomic skills #642 after its physical-success criteria are corrected and covered by counterexample tests.

Configuration model

The suite should make the following concepts first-class:

  1. Embodiment — component path, optional overrides, initial joint configuration, endpoint bindings, and runtime services.
  2. Planner — existing PlannerSpecCfg/adapter selection and planner-owned parameters.
  3. Atomic Skill — skill ID, options, cases, ordered physical stages, tolerances, and required capabilities.
  4. Generalization domain — stable domain ID and version, applicability, required capabilities, case generator or frozen cases, and perturbation/held-out metadata.
  5. Protocol — seeds, repeats, replay timing, recording policy, thresholds, and report schema version.

Generalization domains must distinguish:

  • nominal evaluation;
  • in-domain robustness perturbations;
  • held-out adaptability domains such as a new object, scene layout, end effector, or embodiment.

Case inclusion must be frozen before candidate evaluation. unsupported must come from an independent capability contract or an exhaustive, reproducible validator; it must not be inferred from a truncated probe or from the result of the planner being ranked.

Physical evaluation contract

Stage success must come from simulator observations, contact/effect evidence, or other measured scene state. CompiledTrajectory.projected_context is hypothetical planning state and must not be used as proof that an object was grasped, released, transferred, or retained.

The evaluator interface should support:

  • ordered, skill-specific stages;
  • segment-boundary measurements;
  • shared cross-cutting rules such as premature object drop;
  • stable failure stages and taxonomy;
  • replay/video using the same timing schedule as the scored execution;
  • per-environment outcomes for batched cases.

Migration phases

  1. Correct the shared physical measurement contract and introduce the evaluator interface.
  2. Load official embodiment components and migrate the currently benchmarked Atomic Skills into AtomicSkillCaseProvider implementations.
  3. Add versioned generalization domains and aggregate nominal/robustness/adaptability statistics.
  4. Retain current per-skill commands only as compatibility wrappers, then remove duplicated lifecycle and reporting code when migration is complete.

Acceptance criteria

  • A suite can select an official embodiment component, planner adapter, Atomic Skill, and cases without editing Python runner code.
  • At least two embodiments and two planners can run compatible skills through the same manifest and report schema.
  • All physical stages are measured from replay observations; projected planning effects do not decide physical success.
  • The manifest records resolved embodiment, planner configuration hash, skill options, domain/version, seed, and case parameters.
  • One nominal domain and at least one versioned generalization domain are supported end to end.
  • Reports include coverage, stage rates, overall success, and domain-level mean/worst/variance/retention where applicable.
  • Every run emits resolved_suite.yaml, environment.json, case_manifest.json, trials.jsonl, aggregates.json, and a Markdown report.
  • Unsupported capability, ordinary task failure, invalid case, and runtime error remain distinct.
  • Existing motion-generation and Atomic Skill focused tests continue to pass, with new negative tests for incorrect physical evidence and generalization aggregation.

Motivation

EmbodiChain currently has two complementary benchmark paths:

  • scripts/benchmark/motion_generation already provides suite YAML, planner and scenario registries, frozen manifests, raw artifacts, aggregation, and reporting.
  • The Atomic Skill benchmark work in Benchmark seven more atomic skills #642 expands skill coverage and introduces skill-specific stage chains, but each skill still owns a large standalone Python script with hard-coded robot, planner, scene, cases, replay, and report assembly.

This split makes it difficult to answer the benchmark question users actually care about:

Given an embodiment/configuration, a planner, an Atomic Skill, and a generalization target, how well does the complete physical behavior perform?

Without one configuration and artifact contract, adding a planner, embodiment, skill, or generalization domain requires edits across multiple runners. Results are also difficult to compare because scene construction, replay timing, success evidence, unsupported classification, and output metadata can diverge between scripts.

A unified suite would preserve the strongest parts of both implementations: the reproducibility and extensibility of the motion-generation framework, and the per-skill physical stage semantics of the Atomic Skill benchmarks.

Related work: #437 established the generic motion-generation benchmark architecture; #642 expands Atomic Skill coverage and motivates convergence onto that architecture.

Additional context

A minimal target configuration could look like:

schema_version: 1
name: atomic_skill_generalization
suite_version: atomic_skill_generalization_v1

embodiment:
  component: ../../embodichain_tasks/configs/components/embodiments/franka_panda.yaml
  overrides: {}

planners:
  - id: curobo
    adapter: curobo
    role: primary_baseline
    enabled: true
    config: {}

tracks:
  - id: nominal-pick
    scenario: atomic_task
    skills:
      - id: pick_up
        cases: [cube_top_center]
    domains:
      - id: nominal
        version: v1
      - id: held_out_objects
        version: v1
        objects: [unseen_box, unseen_cylinder]

protocol:
  seeds: [11, 23, 37]
  measured_trials: 3

The exact schema should remain small and reuse existing component/registry contracts rather than introduce a third configuration system.

Checklist

  • I have checked that there is no similar issue in the repo (required)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

atomic actionatomic action related functionalityenhancementNew feature or requestmotion genThings related to motion generation for robot

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions