Skip to content

Release v0.4.0#22

Merged
BotRunner64 merged 125 commits into
masterfrom
merge_train_dexhand
Jun 25, 2026
Merged

Release v0.4.0#22
BotRunner64 merged 125 commits into
masterfrom
merge_train_dexhand

Conversation

@BotRunner64

Copy link
Copy Markdown
Owner

Summary

  • Release Teleopit v0.4.0 metadata and changelog
  • Merge the dexterous hand, sim2real recording, Pico ARMS, and dataset pipeline updates
  • Publish v0.4.0 ModelScope assets, including 40k policy as checkpoints/track.onnx and checkpoints/track.pt

Asset verification

  • checkpoints/track.onnx etag: 15fa731d6b17e318f409b0778da70272024a8e3975dd784c1593e7a267452687
  • checkpoints/track.pt etag: 4b56393d05700cf6fbb3e6294259b18e8cbea102934c7eacb73ed2feba6e7dfc
  • archives/robot_assets.tar.gz returns 200 OK
  • data/shard_000.h5 returns 200 OK
  • ModelScope model tag created: v0.4.0

Checks

  • python scripts/dev/check_large_tracked_files.py

Remove unused self-collision plumbing, update domain-randomization terms to match the active General-Tracking setup, and keep play-mode evaluation deterministic. The rigid-body perturbation now uses physics-consistent pseudo-inertia randomization instead of mass-only scaling.

Constraint: Playback and benchmark paths use play mode and must stay deterministic
Constraint: Domain randomization must stay within current mjlab APIs and repo conventions
Rejected: Keep dr.body_mass randomization | leaves inertia inconsistent with mass changes
Rejected: Preserve startup DR in play mode | makes playback and benchmark nondeterministic
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If training-only events change again, update _TRAIN_ONLY_EVENTS and the task registry/domain-randomization tests together
Tested: pytest tests/test_task_registry.py tests/test_domain_randomization.py -q
Tested: git diff --check
Not-tested: pytest tests/ -q | collection currently fails in tests/test_math_utils.py because train_mimic.pose is missing in this tree
General-Tracking-G1 now uses adaptive Z-only anchor and end-effector
termination thresholds, while separating foot XYZ checks into an
explicit termination term. Benchmark video mode also disables the new
foot termination so long clip capture keeps the previous behavior.

Constraint: Low-height reference poses need looser failure thresholds without weakening normal upright tracking
Rejected: Raise all tracking thresholds globally | too permissive for upright motions and hides real failures
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: Keep benchmark/video termination overrides in sync whenever new tracking failure terms are added
Tested: pytest tests/test_termination_config.py tests/test_task_registry.py -q
Not-tested: Full training run and benchmark rollout on real motion clips
The training env no longer keeps a separate foot XYZ termination term.

This commit removes that term from the assembled General-Tracking-G1 config and updates the regression test to assert the reduced termination surface directly.

Constraint: Training resets should match the currently intended termination policy without reintroducing premature foot-specific failures
Rejected: Keep foot_pos_xyz configured but unused in tests | leaves the env behavior and regression contract out of sync
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: If foot-specific reset logic is reintroduced, update both the env assembly and termination regression test together
Tested: pytest tests/test_termination_config.py tests/test_task_registry.py -q
Not-tested: Full training run or benchmark rollout with real motion clips
Standardize the public dataset spec names to twist2/seed/lafan1, update default motion-file references, and add a seed_filter_preset path that records filtering diagnostics in build reports.

This keeps docs, scripts, and tests aligned with the renamed configs while making SEED curation reproducible and observable.

Constraint: Keep dataset builder behavior fail-fast and avoid adding new dependencies
Rejected: Preserve versioned spec filenames as the primary defaults | keeps user-facing commands and docs inconsistent
Confidence: high
Scope-risk: moderate
Reversibility: clean
Directive: If external automation still depends on the old YAML filenames, add explicit compatibility aliases before changing defaults again
Tested: pytest tests/test_dataset_v2.py tests/test_review_pipeline.py tests/test_train_script.py -q
Not-tested: End-to-end dataset build against real SEED/twist2 assets
Keep the canonical `seed.yaml` spec pointed at the full SEED source while
moving the strict Groot-filtered variant into a dedicated `seed_clean.yaml`
spec. This makes the public config names match their actual coverage and
keeps the curated path explicit for reproducible review or training flows.

Constraint: Keep existing dataset-builder semantics and avoid hidden filtering in the default SEED spec
Rejected: Leave `groot_strict` inside `seed.yaml` | makes the canonical SEED entry point silently exclude source data
Confidence: high
Scope-risk: narrow
Reversibility: clean
Directive: Use `seed_clean.yaml` for strict curated SEED runs; keep `seed.yaml` as the unfiltered baseline unless downstream defaults are updated intentionally
Tested: `pytest tests/test_dataset_v2.py -q`
Not-tested: End-to-end dataset build against real SEED assets
@BotRunner64 BotRunner64 merged commit 5dc57af into master Jun 25, 2026
2 checks passed
@BotRunner64 BotRunner64 deleted the merge_train_dexhand branch June 25, 2026 13:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant