diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000000000000000000000000000000000..d799ab20e6b097ca706b31d9fbd371810bd3de8a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,17 @@ +# Adding a policy + +1. Use a unique lowercase, hyphenated model ID under `policies/`. +2. Include one selected checkpoint, a supported RunManifest, portable relative + configuration snapshots. State any applicable weight license explicitly. +3. Record the training source, checkpoint selection basis, tested software + versions, limitations and checkpoint metadata in evaluation.json. Keep MP4 files, robot + assets, local paths, credentials and training logs outside this repository. +4. Check checkpoint/configuration consistency and evaluate with the declared + runtime and an empty asset cache before publication. +5. Update index.json and the model files in the same reviewed repository + revision. Keep the revision history referenced by released EmbodiChain + versions. New environment implementations or model formats need matching + EmbodiChain/task-package support before they can be evaluated. + +Keep shared usage instructions in EmbodiChain documentation and link them from +the repository README. Individual model README files are not required. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2c918cd2a327f11a4e677bb4e7ce6e4e67b679fb --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +--- +tags: +- embodichain +- reinforcement-learning +- locomotion +--- + +# EmbodiChain models + +Pretrained model bundles for [EmbodiChain](https://github.com/DexForce/EmbodiChain). +This repository contains 12 PPO policies: ANYmal-C, G1 flat locomotion, Go1, Go2, +H1_2 and MicroDuck, each with `default` and `newton` physics configurations. + +- [Model index](index.json): model IDs, tasks and tested runtime information. +- `policies//`: weights, RunManifest, configuration snapshots and evaluation evidence. +- [Policy evaluation documentation](https://github.com/DexForce/EmbodiChain/blob/main/docs/source/guides/cli.md#policy-evaluation): installation prerequisites, commands and options are maintained in EmbodiChain. +- Robot assets are distributed separately in `DexForceAI/embodichain_data`. + +HF revisions version the index and bundles together. No videos are included. + +## Evaluation and licensing + +No weight license is currently declared. EmbodiChain's code license does not +establish the redistribution terms of these weights. + +Evaluation summaries record prior 1,000-step checks using a development DexSim +build and cached robot assets. Public-runtime and clean-cache validation remain +pending. Checkpoint training counters are recorded in each evaluation.json. diff --git a/index.json b/index.json new file mode 100644 index 0000000000000000000000000000000000000000..9453a71fcc5f5af7d8a5e6a5e9f93e27dcb4c70b --- /dev/null +++ b/index.json @@ -0,0 +1,209 @@ +{ + "schema_version": 1, + "models": { + "anymal-c-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/anymal_c_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "anymal-c", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "anymal-c-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/anymal_c_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "anymal-c", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "g1-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/g1_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "g1", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "g1-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/g1_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "g1", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "go1-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/go1_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "go1", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "go1-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/go1_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "go1", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "go2-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/go2_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "go2", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "go2-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/go2_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "go2", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "h1-2-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/h1_2_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "h1-2", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "h1-2-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/h1_2_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "h1-2", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "microduck-flat-ppo-default": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/microduck_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "microduck", + "ppo", + "default" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + }, + "microduck-flat-ppo-newton": { + "format": "embodichain-rl-run-v1", + "task": "locomotion/velocity/microduck_flat", + "task_package": "embodichain_tasks", + "tags": [ + "locomotion", + "velocity", + "microduck", + "ppo", + "newton" + ], + "tested_with": { + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "dexsim": "development build", + "public_wheel_validated": false + } + } + } +} diff --git a/policies/anymal-c-flat-ppo-default/checkpoint.pt b/policies/anymal-c-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..16f00fed90b4341441a1a987eeb048ab7923c02c --- /dev/null +++ b/policies/anymal-c-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ff61e36c84d00361e84c0207ffe548038a7ae721180e382cb739ecadfdb08ec +size 986435 diff --git a/policies/anymal-c-flat-ppo-default/configs/env.yaml b/policies/anymal-c-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c1601718193e9e073292aa6eac14578b3a6c3b5a --- /dev/null +++ b/policies/anymal-c-flat-ppo-default/configs/env.yaml @@ -0,0 +1,152 @@ +id: ANYmalCFlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +headless: true +device: cuda:0 +arena_space: 4.0 +render_cfg: + renderer: fast-rt +physics_config: + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: {} + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: false + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: ANYmalCLocomotion/usd/anymal_c.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.6 + init_qpos: + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.4 + - -0.4 + - 0.4 + - -0.4 + - -0.8 + - 0.8 + - -0.8 + - 0.8 + qpos_limits: + LF_HAA: + - -0.72 + - 0.49 + LF_HFE: + - -6.283185307179586 + - 6.283185307179586 + LF_KFE: + - -6.283185307179586 + - 6.283185307179586 + LH_HAA: + - -0.72 + - 0.49 + LH_HFE: + - -6.283185307179586 + - 6.283185307179586 + LH_KFE: + - -6.283185307179586 + - 6.283185307179586 + RF_HAA: + - -0.49 + - 0.72 + RF_HFE: + - -6.283185307179586 + - 6.283185307179586 + RF_KFE: + - -6.283185307179586 + - 6.283185307179586 + RH_HAA: + - -0.49 + - 0.72 + RH_HFE: + - -6.283185307179586 + - 6.283185307179586 + RH_KFE: + - -6.283185307179586 + - 6.283185307179586 + control_parts: + locomotion: + - LF_HAA + - LF_HFE + - LF_KFE + - LH_HAA + - LH_HFE + - LH_KFE + - RF_HAA + - RF_HFE + - RF_KFE + - RH_HAA + - RH_HFE + - RH_KFE + root_props: + fixed_base: false + min_position_iters: 4 + min_velocity_iters: 0 + self_collision_enabled: true + joint_drive_props: + drive_type: force + stiffness: 40.0 + damping: 5.0 + max_effort: 80.0 + max_velocity: 7.5 + asset_physics_mode: overlay +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: + - LF_FOOT + - LH_FOOT + - RF_FOOT + - RH_FOOT + - base + - LF_THIGH + - LH_THIGH + - RF_THIGH + - RH_THIGH + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] +physics: default diff --git a/policies/anymal-c-flat-ppo-default/configs/train.yaml b/policies/anymal-c-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d8b425c1bc53e507d791182ddf5ad77e090b15d7 --- /dev/null +++ b/policies/anymal-c-flat-ppo-default/configs/train.yaml @@ -0,0 +1,58 @@ +trainer: + exp_name: anymal_c_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 500 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 50 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 128 + - 128 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 128 + - 128 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.005 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/anymal-c-flat-ppo-default/evaluation.json b/policies/anymal-c-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..9eaa0be0bd078ebb679ecc94d369ef2acc700dde --- /dev/null +++ b/policies/anymal-c-flat-ppo-default/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "anymal-c-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:19:47.929880+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "ANYmalCFlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 26.797237139660865, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 26.797237139660865, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.06984560936689377, + "reward": 0.02671574056148529, + "root_height": 0.2942751348018646, + "yaw_rate_error": 0.04916974529623985 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 93818880, + "num_updates": 954, + "best_eval_value": null + } +} diff --git a/policies/anymal-c-flat-ppo-default/run-manifest.json b/policies/anymal-c-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/anymal-c-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/anymal-c-flat-ppo-newton/checkpoint.pt b/policies/anymal-c-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..f6dd4ba86eaaebe066012198320fccef836aa98d --- /dev/null +++ b/policies/anymal-c-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6bfb791d8c9b01c9d326af0fb672fc4079bae579712269c9977d60a2a51977b7 +size 986509 diff --git a/policies/anymal-c-flat-ppo-newton/configs/env.yaml b/policies/anymal-c-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8606d7936b3a5310cf1ad6caf96f7d83c7e34629 --- /dev/null +++ b/policies/anymal-c-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,163 @@ +id: ANYmalCFlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +headless: true +device: cuda:0 +arena_space: 4.0 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: {} + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: false + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: ANYmalCLocomotion/usd/anymal_c.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.6 + init_qpos: + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.4 + - -0.4 + - 0.4 + - -0.4 + - -0.8 + - 0.8 + - -0.8 + - 0.8 + qpos_limits: + LF_HAA: + - -0.72 + - 0.49 + LF_HFE: + - -6.283185307179586 + - 6.283185307179586 + LF_KFE: + - -6.283185307179586 + - 6.283185307179586 + LH_HAA: + - -0.72 + - 0.49 + LH_HFE: + - -6.283185307179586 + - 6.283185307179586 + LH_KFE: + - -6.283185307179586 + - 6.283185307179586 + RF_HAA: + - -0.49 + - 0.72 + RF_HFE: + - -6.283185307179586 + - 6.283185307179586 + RF_KFE: + - -6.283185307179586 + - 6.283185307179586 + RH_HAA: + - -0.49 + - 0.72 + RH_HFE: + - -6.283185307179586 + - 6.283185307179586 + RH_KFE: + - -6.283185307179586 + - 6.283185307179586 + control_parts: + locomotion: + - LF_HAA + - LF_HFE + - LF_KFE + - LH_HAA + - LH_HFE + - LH_KFE + - RF_HAA + - RF_HFE + - RF_KFE + - RH_HAA + - RH_HFE + - RH_KFE + root_props: + fixed_base: false + min_position_iters: 4 + min_velocity_iters: 0 + self_collision_enabled: true + joint_drive_props: + drive_type: force + stiffness: 40.0 + damping: 5.0 + max_effort: 80.0 + max_velocity: 7.5 + asset_physics_mode: overlay +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: + - LF_FOOT + - LH_FOOT + - RF_FOOT + - RH_FOOT + - base + - LF_THIGH + - LH_THIGH + - RF_THIGH + - RH_THIGH + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] +physics: newton diff --git a/policies/anymal-c-flat-ppo-newton/configs/train.yaml b/policies/anymal-c-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7b29ebbff381b76aef9b9bf4cbd2a1dea2d73389 --- /dev/null +++ b/policies/anymal-c-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,58 @@ +trainer: + exp_name: anymal_c_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 500 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 50 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 128 + - 128 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 128 + - 128 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.005 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/anymal-c-flat-ppo-newton/evaluation.json b/policies/anymal-c-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..3413d163dee70c1ac13695459023f07f09f0bfd3 --- /dev/null +++ b/policies/anymal-c-flat-ppo-newton/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "anymal-c-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:15:08.583317+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "ANYmalCFlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 27.580372218042612, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 27.580372218042612, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.026869812980294228, + "reward": 0.02956734225153923, + "root_height": 0.5411861538887024, + "yaw_rate_error": 0.045531656593084335 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 49152000, + "num_updates": 500, + "best_eval_value": null + } +} diff --git a/policies/anymal-c-flat-ppo-newton/run-manifest.json b/policies/anymal-c-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/anymal-c-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/g1-flat-ppo-default/checkpoint.pt b/policies/g1-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..3e24f351f3c631986cdbacac6e87c9c13b6aa962 --- /dev/null +++ b/policies/g1-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f720c775e9d026b007a854b4231af077a608f0ca5f392d523795257edd1165a3 +size 5325649 diff --git a/policies/g1-flat-ppo-default/configs/env.yaml b/policies/g1-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..c72fd745a75d7ac39b30c7a4fa8d330b6e438041 --- /dev/null +++ b/policies/g1-flat-ppo-default/configs/env.yaml @@ -0,0 +1,166 @@ +physics: default +id: UnitreeG1FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + cache_material: true + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeG1Locomotion/g1.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.8 + init_qpos: + - -0.1 + - -0.1 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.3 + - 0.3 + - 0.35 + - 0.35 + - -0.2 + - -0.2 + - 0.18 + - -0.18 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.87 + - 0.87 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + control_parts: + locomotion: + - left_hip_pitch_joint + - left_hip_roll_joint + - left_hip_yaw_joint + - left_knee_joint + - left_ankle_pitch_joint + - left_ankle_roll_joint + - right_hip_pitch_joint + - right_hip_roll_joint + - right_hip_yaw_joint + - right_knee_joint + - right_ankle_pitch_joint + - right_ankle_roll_joint + - waist_yaw_joint + - waist_roll_joint + - waist_pitch_joint + - left_shoulder_pitch_joint + - left_shoulder_roll_joint + - left_shoulder_yaw_joint + - left_elbow_joint + - left_wrist_roll_joint + - left_wrist_pitch_joint + - left_wrist_yaw_joint + - right_shoulder_pitch_joint + - right_shoulder_roll_joint + - right_shoulder_yaw_joint + - right_elbow_joint + - right_wrist_roll_joint + - right_wrist_pitch_joint + - right_wrist_yaw_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: true + min_position_iters: 8 + min_velocity_iters: 4 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 192 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/g1-flat-ppo-default/configs/train.yaml b/policies/g1-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7ebe8ff887259a6ea5255b028ce2c22e1c34a008 --- /dev/null +++ b/policies/g1-flat-ppo-default/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_g1_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/g1-flat-ppo-default/evaluation.json b/policies/g1-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..3f445225998d3846c13ad95348407c0a7ec3a2e0 --- /dev/null +++ b/policies/g1-flat-ppo-default/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "g1-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:20:38.667324+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeG1FlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 62.56870224373415, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 62.56870224373415, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.03544675558805466, + "reward": 0.06573096662759781, + "root_height": 0.786207914352417, + "yaw_rate_error": 0.07288753241300583 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 196608000, + "num_updates": 2000, + "best_eval_value": null + } +} diff --git a/policies/g1-flat-ppo-default/run-manifest.json b/policies/g1-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/g1-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/g1-flat-ppo-newton/checkpoint.pt b/policies/g1-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..733e58d7fb8f443b98fcfbf554bd44954c900390 --- /dev/null +++ b/policies/g1-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d1ec15e9905939f40eaa84763874c05b070d70afaeb7c84b09bd3b712d48f05 +size 5325731 diff --git a/policies/g1-flat-ppo-newton/configs/env.yaml b/policies/g1-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..ab0de06d0f013549dda1b77defa75febc149648a --- /dev/null +++ b/policies/g1-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,176 @@ +physics: newton +id: UnitreeG1FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeG1Locomotion/g1.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.8 + init_qpos: + - -0.1 + - -0.1 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.3 + - 0.3 + - 0.35 + - 0.35 + - -0.2 + - -0.2 + - 0.18 + - -0.18 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.87 + - 0.87 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + control_parts: + locomotion: + - left_hip_pitch_joint + - left_hip_roll_joint + - left_hip_yaw_joint + - left_knee_joint + - left_ankle_pitch_joint + - left_ankle_roll_joint + - right_hip_pitch_joint + - right_hip_roll_joint + - right_hip_yaw_joint + - right_knee_joint + - right_ankle_pitch_joint + - right_ankle_roll_joint + - waist_yaw_joint + - waist_roll_joint + - waist_pitch_joint + - left_shoulder_pitch_joint + - left_shoulder_roll_joint + - left_shoulder_yaw_joint + - left_elbow_joint + - left_wrist_roll_joint + - left_wrist_pitch_joint + - left_wrist_yaw_joint + - right_shoulder_pitch_joint + - right_shoulder_roll_joint + - right_shoulder_yaw_joint + - right_elbow_joint + - right_wrist_roll_joint + - right_wrist_pitch_joint + - right_wrist_yaw_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: true + min_position_iters: 8 + min_velocity_iters: 4 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 192 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/g1-flat-ppo-newton/configs/train.yaml b/policies/g1-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..18c78dca219d95835328b2fb06487002981b0d13 --- /dev/null +++ b/policies/g1-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_g1_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/g1-flat-ppo-newton/evaluation.json b/policies/g1-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..7d82d87448fb8e5004cfd9f482c6cc6dd9ad982b --- /dev/null +++ b/policies/g1-flat-ppo-newton/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "g1-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:16:07.647394+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeG1FlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 61.99140815157443, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 61.99140815157443, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.06406232714653015, + "reward": 0.06581515818834305, + "root_height": 0.7908007502555847, + "yaw_rate_error": 0.03285869583487511 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 206438400, + "num_updates": 2100, + "best_eval_value": null + } +} diff --git a/policies/g1-flat-ppo-newton/run-manifest.json b/policies/g1-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/g1-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/go1-flat-ppo-default/checkpoint.pt b/policies/go1-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..5f098411743a9f0382ce5919d1917e70f85440bc --- /dev/null +++ b/policies/go1-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d934d0e2de75eb6dba23e86a5cb0dcc58f8cfde69fc02af732638d5bfd3cd95c +size 4739089 diff --git a/policies/go1-flat-ppo-default/configs/env.yaml b/policies/go1-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..fbcd3a0f1a15bfde72462464ff0f9f857e6938be --- /dev/null +++ b/policies/go1-flat-ppo-default/configs/env.yaml @@ -0,0 +1,132 @@ +physics: default +id: UnitreeGo1FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.0 +render_cfg: + renderer: fast-rt +physics_config: + cache_material: true + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 1.0 + - 3.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeGo1Locomotion/go1.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.278 + init_qpos: + - -0.1 + - 0.1 + - -0.1 + - 0.1 + - 0.9 + - 0.9 + - 0.9 + - 0.9 + - -1.8 + - -1.8 + - -1.8 + - -1.8 + control_parts: + locomotion: + - FR_hip_joint + - FR_thigh_joint + - FR_calf_joint + - FL_hip_joint + - FL_thigh_joint + - FL_calf_joint + - RR_hip_joint + - RR_thigh_joint + - RR_calf_joint + - RL_hip_joint + - RL_thigh_joint + - RL_calf_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: false + min_position_iters: 4 + min_velocity_iters: 0 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/go1-flat-ppo-default/configs/train.yaml b/policies/go1-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0b0c12eed906efebffa4b50c849ce27bf8618bd9 --- /dev/null +++ b/policies/go1-flat-ppo-default/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_go1_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10000 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 50 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/go1-flat-ppo-default/evaluation.json b/policies/go1-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..945c24464ed528b7a0fbb81019465d046d4adae9 --- /dev/null +++ b/policies/go1-flat-ppo-default/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "go1-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:21:27.110398+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeGo1FlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 110.90168414264917, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 110.90168414264917, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.14509788155555725, + "maximum_illegal_contact_force": 0.0, + "reward": 0.09589947015047073, + "root_height": 0.29751354455947876, + "yaw_rate_error": 0.20959775149822235 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 68812800, + "num_updates": 700, + "best_eval_value": null + } +} diff --git a/policies/go1-flat-ppo-default/run-manifest.json b/policies/go1-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/go1-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/go1-flat-ppo-newton/checkpoint.pt b/policies/go1-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..fc83797700cb97c659eea3476720136bf74c1223 --- /dev/null +++ b/policies/go1-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb2d62d05b56892cbfa8d2e69f4e45a9f2eb5ce23b3f50495f49cdcebc9e618c +size 4739171 diff --git a/policies/go1-flat-ppo-newton/configs/env.yaml b/policies/go1-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..cd6cafa1d979ef6c64e143a439fc7f28df422dda --- /dev/null +++ b/policies/go1-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,142 @@ +physics: newton +id: UnitreeGo1FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.0 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 1.0 + - 3.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeGo1Locomotion/go1.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.278 + init_qpos: + - -0.1 + - 0.1 + - -0.1 + - 0.1 + - 0.9 + - 0.9 + - 0.9 + - 0.9 + - -1.8 + - -1.8 + - -1.8 + - -1.8 + control_parts: + locomotion: + - FR_hip_joint + - FR_thigh_joint + - FR_calf_joint + - FL_hip_joint + - FL_thigh_joint + - FL_calf_joint + - RR_hip_joint + - RR_thigh_joint + - RR_calf_joint + - RL_hip_joint + - RL_thigh_joint + - RL_calf_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: false + min_position_iters: 4 + min_velocity_iters: 0 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/go1-flat-ppo-newton/configs/train.yaml b/policies/go1-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..75506776654df81a4399cf7f15db1c02294da934 --- /dev/null +++ b/policies/go1-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_go1_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10000 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 50 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/go1-flat-ppo-newton/evaluation.json b/policies/go1-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..5f978a741011198fa99ba00c735d5dd76c53f1d4 --- /dev/null +++ b/policies/go1-flat-ppo-newton/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "go1-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:17:09.194399+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeGo1FlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 109.75560356676579, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 109.75560356676579, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.1238803118467331, + "maximum_illegal_contact_force": 0.0, + "reward": 0.11315512657165527, + "root_height": 0.295845627784729, + "yaw_rate_error": 0.029608920216560364 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 39321600, + "num_updates": 400, + "best_eval_value": null + } +} diff --git a/policies/go1-flat-ppo-newton/run-manifest.json b/policies/go1-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/go1-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/go2-flat-ppo-default/checkpoint.pt b/policies/go2-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..9e8813f0497a14e16ec3dd7ffdc73c2a99dd34b8 --- /dev/null +++ b/policies/go2-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce2a67c411ff63c0464e5ea98e1f5281f661d5e3817d0bcb6dd24b225749d6b1 +size 4745233 diff --git a/policies/go2-flat-ppo-default/configs/env.yaml b/policies/go2-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..72d83cb0f03964bdf7ea2b47e783aa059fb9a45c --- /dev/null +++ b/policies/go2-flat-ppo-default/configs/env.yaml @@ -0,0 +1,132 @@ +physics: default +id: UnitreeGo2FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.0 +render_cfg: + renderer: fast-rt +physics_config: + cache_material: true + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeGo2Locomotion/go2.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.32 + init_qpos: + - -0.1 + - 0.1 + - -0.1 + - 0.1 + - 0.9 + - 0.9 + - 0.9 + - 0.9 + - -1.8 + - -1.8 + - -1.8 + - -1.8 + control_parts: + locomotion: + - FL_hip_joint + - FL_thigh_joint + - FL_calf_joint + - FR_hip_joint + - FR_thigh_joint + - FR_calf_joint + - RL_hip_joint + - RL_thigh_joint + - RL_calf_joint + - RR_hip_joint + - RR_thigh_joint + - RR_calf_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: false + min_position_iters: 4 + min_velocity_iters: 0 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/go2-flat-ppo-default/configs/train.yaml b/policies/go2-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..4fe993f6a0d7aa4c615756d5a5e87ed6e5c3db37 --- /dev/null +++ b/policies/go2-flat-ppo-default/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_go2_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/go2-flat-ppo-default/evaluation.json b/policies/go2-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..b812608f31ee8f87dc957af255ea7449a20ca96f --- /dev/null +++ b/policies/go2-flat-ppo-default/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "go2-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:22:07.574341+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeGo2FlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 65.62835970893502, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 65.62835970893502, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.06811629980802536, + "maximum_illegal_contact_force": 0.0, + "reward": 0.06804674863815308, + "root_height": 0.30811384320259094, + "yaw_rate_error": 0.03535405173897743 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 88473600, + "num_updates": 900, + "best_eval_value": null + } +} diff --git a/policies/go2-flat-ppo-default/run-manifest.json b/policies/go2-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/go2-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/go2-flat-ppo-newton/checkpoint.pt b/policies/go2-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..4cbb5af18f3103756199ebac7ebb898ea0e09647 --- /dev/null +++ b/policies/go2-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:242c5900d9ac4e74b050ec291552386094e85454fcc786d2f0173df187817a26 +size 4745315 diff --git a/policies/go2-flat-ppo-newton/configs/env.yaml b/policies/go2-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..69ac9fdb05d131f79bb17fa5641066734e03ce43 --- /dev/null +++ b/policies/go2-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,142 @@ +physics: newton +id: UnitreeGo2FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.0 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeGo2Locomotion/go2.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.32 + init_qpos: + - -0.1 + - 0.1 + - -0.1 + - 0.1 + - 0.9 + - 0.9 + - 0.9 + - 0.9 + - -1.8 + - -1.8 + - -1.8 + - -1.8 + control_parts: + locomotion: + - FL_hip_joint + - FL_thigh_joint + - FL_calf_joint + - FR_hip_joint + - FR_thigh_joint + - FR_calf_joint + - RL_hip_joint + - RL_thigh_joint + - RL_calf_joint + - RR_hip_joint + - RR_thigh_joint + - RR_calf_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: false + min_position_iters: 4 + min_velocity_iters: 0 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 96 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/go2-flat-ppo-newton/configs/train.yaml b/policies/go2-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..99b50c95a53d99dbfe0d5da840c02bbf3fcd0b23 --- /dev/null +++ b/policies/go2-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_go2_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/go2-flat-ppo-newton/evaluation.json b/policies/go2-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..4270d9f0fbe44b9aa5b3cd9cae3f17aee5b76aec --- /dev/null +++ b/policies/go2-flat-ppo-newton/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "go2-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:17:55.903488+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeGo2FlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 65.37921412661672, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 65.37921412661672, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.061211440712213516, + "maximum_illegal_contact_force": 0.0, + "reward": 0.06784547120332718, + "root_height": 0.30683282017707825, + "yaw_rate_error": 0.006454401649534702 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 68812800, + "num_updates": 700, + "best_eval_value": null + } +} diff --git a/policies/go2-flat-ppo-newton/run-manifest.json b/policies/go2-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/go2-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/h1-2-flat-ppo-default/checkpoint.pt b/policies/h1-2-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..eafdec4d83bf177e2278270e104f860bc2e18674 --- /dev/null +++ b/policies/h1-2-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c109105da54e9159f97cae16282c29c9b0689a534395b5d1a1d2908b176d271 +size 5249013 diff --git a/policies/h1-2-flat-ppo-default/configs/env.yaml b/policies/h1-2-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..b27e66e14ffc486fa558ca76929ef0ff71f1e37b --- /dev/null +++ b/policies/h1-2-flat-ppo-default/configs/env.yaml @@ -0,0 +1,162 @@ +physics: default +id: UnitreeH1_2FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + cache_material: true + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeH1_2Locomotion/h1_2.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 1.02 + init_qpos: + - 0.0 + - 0.0 + - 0.0 + - -0.2 + - -0.2 + - 0.28 + - 0.28 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.5 + - 0.5 + - 0.0 + - 0.0 + - -0.3 + - -0.3 + - 0.52 + - 0.52 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + control_parts: + locomotion: + - left_hip_yaw_joint + - left_hip_pitch_joint + - left_hip_roll_joint + - left_knee_joint + - left_ankle_pitch_joint + - left_ankle_roll_joint + - right_hip_yaw_joint + - right_hip_pitch_joint + - right_hip_roll_joint + - right_knee_joint + - right_ankle_pitch_joint + - right_ankle_roll_joint + - torso_joint + - left_shoulder_pitch_joint + - left_shoulder_roll_joint + - left_shoulder_yaw_joint + - left_elbow_joint + - left_wrist_roll_joint + - left_wrist_pitch_joint + - left_wrist_yaw_joint + - right_shoulder_pitch_joint + - right_shoulder_roll_joint + - right_shoulder_yaw_joint + - right_elbow_joint + - right_wrist_roll_joint + - right_wrist_pitch_joint + - right_wrist_yaw_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: true + min_position_iters: 4 + min_velocity_iters: 4 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 192 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/h1-2-flat-ppo-default/configs/train.yaml b/policies/h1-2-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..7e9ff85fd5d6acfb41eaac6bc6ecba3e421aa3b9 --- /dev/null +++ b/policies/h1-2-flat-ppo-default/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_h1_2_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/h1-2-flat-ppo-default/evaluation.json b/policies/h1-2-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..83b6a3685720792aa394d41a082982902e2a5b62 --- /dev/null +++ b/policies/h1-2-flat-ppo-default/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "h1-2-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:22:49.776090+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeH1_2FlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 58.88337729498744, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 58.88337729498744, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.11185938119888306, + "reward": 0.0634588673710823, + "root_height": 0.9720747470855713, + "yaw_rate_error": 0.04812958464026451 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 108134400, + "num_updates": 1100, + "best_eval_value": null + } +} diff --git a/policies/h1-2-flat-ppo-default/run-manifest.json b/policies/h1-2-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/h1-2-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/h1-2-flat-ppo-newton/checkpoint.pt b/policies/h1-2-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..c02ed12680e3794ab0f04bf78b2b164c10a580ea --- /dev/null +++ b/policies/h1-2-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1222cc14b2a75699ba9b93f0513cba631b00865998cbfa34c4e52f0c002232a +size 5249095 diff --git a/policies/h1-2-flat-ppo-newton/configs/env.yaml b/policies/h1-2-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3c7ba375080567c171e64fcb968bbbae9e783c6f --- /dev/null +++ b/policies/h1-2-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,172 @@ +physics: newton +id: UnitreeH1_2FlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +scene_node_capacity: 262144 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.005 +env: + sim_steps_per_control: 4 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 5.0 + - 6.0 + velocity_range: + x: + - -0.5 + - 0.5 + y: + - -0.5 + - 0.5 + z: + - -0.4 + - 0.4 + roll: + - -0.52 + - 0.52 + pitch: + - -0.52 + - 0.52 + yaw: + - -0.78 + - 0.78 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: UnitreeH1_2Locomotion/h1_2.usda + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 1.02 + init_qpos: + - 0.0 + - 0.0 + - 0.0 + - -0.2 + - -0.2 + - 0.28 + - 0.28 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.5 + - 0.5 + - 0.0 + - 0.0 + - -0.3 + - -0.3 + - 0.52 + - 0.52 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + - 0.0 + control_parts: + locomotion: + - left_hip_yaw_joint + - left_hip_pitch_joint + - left_hip_roll_joint + - left_knee_joint + - left_ankle_pitch_joint + - left_ankle_roll_joint + - right_hip_yaw_joint + - right_hip_pitch_joint + - right_hip_roll_joint + - right_knee_joint + - right_ankle_pitch_joint + - right_ankle_roll_joint + - torso_joint + - left_shoulder_pitch_joint + - left_shoulder_roll_joint + - left_shoulder_yaw_joint + - left_elbow_joint + - left_wrist_roll_joint + - left_wrist_pitch_joint + - left_wrist_yaw_joint + - right_shoulder_pitch_joint + - right_shoulder_roll_joint + - right_shoulder_yaw_joint + - right_elbow_joint + - right_wrist_roll_joint + - right_wrist_pitch_joint + - right_wrist_yaw_joint + asset_physics_mode: overlay + root_props: + fixed_base: false + self_collision_enabled: true + min_position_iters: 4 + min_velocity_iters: 4 +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: [] + filter_need_both_actor: false + max_contacts_per_env: 192 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] diff --git a/policies/h1-2-flat-ppo-newton/configs/train.yaml b/policies/h1-2-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0fd4e034c71701ab6c023f450b97b05f9fb34975 --- /dev/null +++ b/policies/h1-2-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: unitree_h1_2_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/h1-2-flat-ppo-newton/evaluation.json b/policies/h1-2-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..af3295a06a7cc3645a026a430a6345b128c5d1bb --- /dev/null +++ b/policies/h1-2-flat-ppo-newton/evaluation.json @@ -0,0 +1,63 @@ +{ + "schema_version": 1, + "model_id": "h1-2-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:18:51.272551+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "UnitreeH1_2FlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 58.22635426186025, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 58.22635426186025, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.1043778657913208, + "reward": 0.06531600654125214, + "root_height": 0.9991451501846313, + "yaw_rate_error": 0.03954728692770004 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 4000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 245760000, + "num_updates": 2500, + "best_eval_value": null + } +} diff --git a/policies/h1-2-flat-ppo-newton/run-manifest.json b/policies/h1-2-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/h1-2-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/microduck-flat-ppo-default/checkpoint.pt b/policies/microduck-flat-ppo-default/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..72f919d38e9bbd20d0170eb8d969625d5258360d --- /dev/null +++ b/policies/microduck-flat-ppo-default/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:56e41d3ec0170524e60e3ff444b9d59b6f4f137da84126f1e06ba04187469ec0 +size 4748031 diff --git a/policies/microduck-flat-ppo-default/configs/env.yaml b/policies/microduck-flat-ppo-default/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..584d215da2e544b4a9553977754aee77ad13bd81 --- /dev/null +++ b/policies/microduck-flat-ppo-default/configs/env.yaml @@ -0,0 +1,158 @@ +id: MicroDuckFlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + gravity: + - 0.0 + - 0.0 + - -9.81 + physics_dt: 0.002 + cache_material: true +env: + sim_steps_per_control: 10 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 3.0 + - 6.0 + velocity_range: + x: + - -0.3 + - 0.3 + y: + - -0.3 + - 0.3 + z: + - 0.0 + - 0.0 + roll: + - 0.0 + - 0.0 + pitch: + - 0.0 + - 0.0 + yaw: + - 0.0 + - 0.0 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: MicroDuckLocomotion/microduck.urdf + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.12 + init_qpos: + - 0.0 + - 0.3491 + - 0.0 + - -0.0873 + - 0.3491 + - 0.0873 + - -0.4579 + - 0.0 + - 0.4579 + - -0.0049 + - 0.0 + - 0.0049 + - 0.453 + - -0.453 + control_parts: + locomotion: + - left_hip_yaw + - left_hip_roll + - left_hip_pitch + - left_knee + - left_ankle + - neck_pitch + - head_pitch + - head_yaw + - head_roll + - right_hip_yaw + - right_hip_roll + - right_hip_pitch + - right_knee + - right_ankle + root_props: + fixed_base: false + min_position_iters: 4 + min_velocity_iters: 1 + self_collision_enabled: false + joint_drive_props: + drive_type: force + stiffness: + .*: 0.55 + damping: + .*: 0.053 + max_effort: + .*: 0.96 + asset_physics_mode: overlay +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: + - trunk_base + - yaw2roll + - hip_l + - upper_leg_left + - leg + - ankle_left + - neck + - neck_pitch + - yaw_roll_motion + - jaw_soft + - bearing_roll + - hip_l_2 + - upper_leg_right + - leg_2 + - ankle_right + filter_need_both_actor: false + max_contacts_per_env: 64 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] +physics: default diff --git a/policies/microduck-flat-ppo-default/configs/train.yaml b/policies/microduck-flat-ppo-default/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..29958bb1330d9f34667bf30cd6c169fbc090bac3 --- /dev/null +++ b/policies/microduck-flat-ppo-default/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: microduck_flat_ppo + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/microduck-flat-ppo-default/evaluation.json b/policies/microduck-flat-ppo-default/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..17cb3b1e21a8748fdf3ed02b8f93a2b1f85b0ee0 --- /dev/null +++ b/policies/microduck-flat-ppo-default/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "microduck-flat-ppo-default", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:25:00.703705+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": null + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "MicroDuckFlatRL-v1", + "physics": "default", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 99.06819496676326, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 99.06819496676326, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.037559010088443756, + "maximum_illegal_contact_force": 0.0, + "reward": 0.09885315597057343, + "root_height": 0.11976771801710129, + "yaw_rate_error": 0.14809997379779816 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 10000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 983138304, + "num_updates": 10001, + "best_eval_value": null + } +} diff --git a/policies/microduck-flat-ppo-default/run-manifest.json b/policies/microduck-flat-ppo-default/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/microduck-flat-ppo-default/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +} diff --git a/policies/microduck-flat-ppo-newton/checkpoint.pt b/policies/microduck-flat-ppo-newton/checkpoint.pt new file mode 100644 index 0000000000000000000000000000000000000000..d4d8cf0e0a733fae5660e44e2d29e8ed17e96cfa --- /dev/null +++ b/policies/microduck-flat-ppo-newton/checkpoint.pt @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87e5ba09a5236fa79b6d6da783a4290e2dc7f12c2d9564565c9721e8e54f629a +size 4748113 diff --git a/policies/microduck-flat-ppo-newton/configs/env.yaml b/policies/microduck-flat-ppo-newton/configs/env.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8aabf2f827a3aa54026666061d32fedd6a7915d5 --- /dev/null +++ b/policies/microduck-flat-ppo-newton/configs/env.yaml @@ -0,0 +1,168 @@ +id: MicroDuckFlatRL-v1 +max_episode_steps: 1000 +num_envs: 8 +headless: true +device: cuda:0 +arena_space: 2.5 +render_cfg: + renderer: fast-rt +physics_config: + sync_to_renderer: false + gravity: + - 0.0 + - 0.0 + - -9.81 + num_substeps: 1 + solver_cfg: + solver_type: mujoco_warp + njmax: 1024 + nconmax: 256 + iterations: 10 + ls_iterations: 50 + integrator: implicitfast + separate_worlds: true + tolerance: 1.0e-08 + physics_dt: 0.002 +env: + sim_steps_per_control: 10 + control_parts: + - locomotion + events: + push_robot: + func: push_articulation_by_setting_velocity + mode: interval + interval_step: 1 + is_global: false + params: + entity_cfg: + uid: robot + interval_range_s: + - 3.0 + - 6.0 + velocity_range: + x: + - -0.3 + - 0.3 + y: + - -0.3 + - 0.3 + z: + - 0.0 + - 0.0 + roll: + - 0.0 + - 0.0 + pitch: + - 0.0 + - 0.0 + yaw: + - 0.0 + - 0.0 + observations: + policy: + func: velocity_locomotion_observation + mode: add + name: policy + params: + privileged: false + enable_corruption: true + critic: + func: velocity_locomotion_observation + mode: add + name: critic + params: + privileged: true + enable_corruption: false + rewards: + total: + func: velocity_locomotion_total_reward + mode: add + weight: 1.0 + params: {} + actions: + joint_position: + func: DefaultJointPositionTerm + params: {} + extensions: {} +robot: + uid: robot + fpath: MicroDuckLocomotion/microduck.urdf + build_pk_chain: false + init_pos: + - 0.0 + - 0.0 + - 0.12 + init_qpos: + - 0.0 + - 0.3491 + - 0.0 + - -0.0873 + - 0.3491 + - 0.0873 + - -0.4579 + - 0.0 + - 0.4579 + - -0.0049 + - 0.0 + - 0.0049 + - 0.453 + - -0.453 + control_parts: + locomotion: + - left_hip_yaw + - left_hip_roll + - left_hip_pitch + - left_knee + - left_ankle + - neck_pitch + - head_pitch + - head_yaw + - head_roll + - right_hip_yaw + - right_hip_roll + - right_hip_pitch + - right_knee + - right_ankle + root_props: + fixed_base: false + min_position_iters: 4 + min_velocity_iters: 1 + self_collision_enabled: false + joint_drive_props: + drive_type: force + stiffness: + .*: 0.55 + damping: + .*: 0.053 + max_effort: + .*: 0.96 + asset_physics_mode: overlay +sensor: +- uid: locomotion_contacts + sensor_type: ContactSensor + articulation_cfg_list: + - articulation_uid: robot + link_name_list: + - trunk_base + - yaw2roll + - hip_l + - upper_leg_left + - leg + - ankle_left + - neck + - neck_pitch + - yaw_roll_motion + - jaw_soft + - bearing_roll + - hip_l_2 + - upper_leg_right + - leg_2 + - ankle_right + filter_need_both_actor: false + max_contacts_per_env: 64 +light: {} +background: [] +rigid_object: [] +rigid_object_group: [] +articulation: [] +physics: newton diff --git a/policies/microduck-flat-ppo-newton/configs/train.yaml b/policies/microduck-flat-ppo-newton/configs/train.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8d330ea685837cbcd7468db5156b62ed1885cc0a --- /dev/null +++ b/policies/microduck-flat-ppo-newton/configs/train.yaml @@ -0,0 +1,60 @@ +trainer: + exp_name: microduck_flat_ppo_newton + gym_config: env.yaml + seed: 42 + device: cuda:0 + headless: true + renderer: fast-rt + num_envs: 4 + iterations: 10001 + buffer_size: 24 + enable_eval: false + save_frequency_updates: 100 + use_wandb: false + wandb_project_name: embodichain-locomotion +policy: + name: actor_critic + actor_obs_normalization: true + critic_obs_normalization: true + obs_groups: + actor: + - policy + critic: + - critic + actor: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + critic: + type: mlp + network_cfg: + hidden_sizes: + - 512 + - 256 + - 128 + activation: elu + initial_action_std: 1.0 +algorithm: + name: ppo + cfg: + optimizer: + name: adam + learning_rate: 0.001 + schedule: adaptive + desired_kl: 0.01 + minimum_learning_rate: 1.0e-05 + maximum_learning_rate: 0.01 + n_epochs: 5 + num_mini_batches: 4 + batch_size: 24576 + gamma: 0.99 + gae_lambda: 0.95 + clip_coef: 0.2 + ent_coef: 0.01 + vf_coef: 1.0 + use_clipped_value_loss: true + max_grad_norm: 1.0 diff --git a/policies/microduck-flat-ppo-newton/evaluation.json b/policies/microduck-flat-ppo-newton/evaluation.json new file mode 100644 index 0000000000000000000000000000000000000000..5668203f2203cc94bae1410d15d277ad86e3fc58 --- /dev/null +++ b/policies/microduck-flat-ppo-newton/evaluation.json @@ -0,0 +1,64 @@ +{ + "schema_version": 1, + "model_id": "microduck-flat-ppo-newton", + "evidence_kind": "prior_source_policy_evaluation", + "created_at": "2026-09-23T02:24:10.651139+00:00", + "embodichain_revision": "6f20b0603f784599201a7ee9b0d82a057d7c8bbf", + "runtime": { + "dexsim": "development build", + "public_wheel_validated": false, + "torch": "2.10.0+cu128", + "newton": "1.6.0" + }, + "conditions": { + "seed": 10042, + "renderer": "fast-rt", + "task_id": "MicroDuckFlatRL-v1", + "physics": "newton", + "command": [ + 0.3, + 0.0, + 0.0 + ], + "mode": "viewer" + }, + "exit_code": 0, + "result": { + "control_steps": 1000, + "effective_duration": 20.0, + "episodes": [ + { + "index": 0, + "length": 1000, + "reason": "time limit", + "reward": 97.66694296896458, + "success": false + } + ], + "metrics": { + "eval/avg_length": 1000.0, + "eval/avg_reward": 97.66694296896458, + "eval/success_rate": 0.0, + "linear_velocity_error": 0.04554646462202072, + "maximum_illegal_contact_force": 0.0, + "reward": 0.0879642516374588, + "root_height": 0.11825577914714813, + "yaw_rate_error": 0.3226650357246399 + }, + "reason": "control steps reached", + "requested_duration": 20.0, + "simulation_steps": 10000, + "simulation_time": 20.0 + }, + "limits": [ + "This summarizes the earlier source-policy evaluation, not a new evaluation of this staged bundle.", + "A cached robot asset and a development simulation runtime were used.", + "A clean-cache evaluation using publicly installable dependencies is pending.", + "Velocity tasks have no terminal success goal; time-limit episodes are not failures." + ], + "checkpoint_metadata": { + "global_step": 983138304, + "num_updates": 10001, + "best_eval_value": null + } +} diff --git a/policies/microduck-flat-ppo-newton/run-manifest.json b/policies/microduck-flat-ppo-newton/run-manifest.json new file mode 100644 index 0000000000000000000000000000000000000000..8e5e06ecb902441a36a9994498f2335206d1f6f9 --- /dev/null +++ b/policies/microduck-flat-ppo-newton/run-manifest.json @@ -0,0 +1,11 @@ +{ + "schema_version": 1, + "configs": { + "train": "configs/train.yaml", + "gym": "configs/env.yaml" + }, + "checkpoints": { + "latest": "checkpoint.pt", + "best": null + } +}