{ "schema_version": 5, "model_api": 1, "name": "microduck-running", "kind": "perpetual", "obs_len": 61, "action_len": 14, "action_scale": 1.0, "entry_pose": "standing", "duration_s": null, "status": "simulation-only-hardware-candidate", "description": "Robustified iteration-12195 forward-running policy for the stock MicroDuck on flat ground. It is not hardware validated.", "command": { "layout": "twist(3), head_pose(4), body_pose(6)", "twist": [ "forward velocity command in m/s; curriculum trained through 2.2; evaluated at 2.2; not a hard speed limit", "lateral velocity; use 0 (training range was only -0.02 to 0.02 m/s)", "yaw rate; use 0 (training range was only -0.05 to 0.05 rad/s)" ], "head": "unused; zeros", "body": "unused; zeros", "idle": [0, 0, 0], "exact_zero_training_fraction": 0.03 }, "robot": { "model": "microduck", "hw_rev": 1, "servos": "14x Dynamixel XL330", "control_hz": 50, "hardware_modifications_required": false }, "training": { "task_id": "Mjlab-Running-Flat-MicroDuck", "algorithm": "PPO (rsl_rl)", "repo": "Vottivott/microduck-playground", "commit": "828d950134e29a8d04cbb51720a22c8729047fb7", "upstream_base": "pollen-robotics/microduck_rl@d424a0c899f6b33cbd3daeb279913134349c0b63", "checkpoint_iteration": 12195, "resumed_from": "iteration 11748", "num_envs": 4096, "seed": 42, "common_environment": { "MICRODUCK_RUNNING_TARGET_MAX_SPEED": 2.2, "MICRODUCK_RUNNING_SPEED_CAP": 2.4, "MICRODUCK_RUNNING_ACTION_RATE_WEIGHT": -0.1, "MICRODUCK_RUNNING_HIGH_SPEED_STAGE_INTERVAL": 750, "MICRODUCK_RUNNING_FORWARD_PROGRESS_WEIGHT": 5.0, "MICRODUCK_RUNNING_ENABLE_SYMMETRY": false, "MICRODUCK_RUNNING_ENABLE_HEADING_FEEDBACK": false, "foot_friction_range": [0.7, 1.3], "push_interval_s": [3.0, 6.0] }, "robustification_stages": [ {"updates": 100, "push_m_s": 0.03, "trunk_com_m": 0.003, "head_com_m": 0.003, "initial_tilt_deg": 1.0}, {"updates": 150, "push_m_s": 0.06, "trunk_com_m": 0.005, "head_com_m": 0.005, "initial_tilt_deg": 1.5}, {"updates": 200, "push_m_s": 0.1, "trunk_com_m": 0.008, "head_com_m": 0.006, "initial_tilt_deg": 2.0} ], "export": "scripts/export.py; observation normalizer baked into policy.onnx", "continuation_checkpoint": { "path": "checkpoint.pt", "sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973", "actor_exact_to_released_onnx": true, "original_full_ppo_state": true } }, "eval": { "sim_proxy": "mjlab / MuJoCo Warp with BAM XL330 M6 actuator model", "command_speed_m_s": 2.2, "duration_s": 10.0, "warmup_s": 1.0, "results": { "nominal_plain": {"num_envs": 512, "speed_m_s": 1.6510932445526123, "survival": 0.9921875}, "stress_plain": {"num_envs": 512, "speed_m_s": 1.6349653005599976, "survival": 0.98828125}, "nominal_backlash": {"num_envs": 256, "speed_m_s": 1.6362495422363281, "survival": 0.98828125}, "stress_backlash": {"num_envs": 256, "speed_m_s": 1.6121970415115356, "survival": 0.984375}, "high_grip_stress": {"num_envs": 512, "speed_m_s": 1.6424154043197632, "survival": 0.966796875} }, "stress": {"push_m_s": 0.1, "trunk_com_m": 0.01, "head_com_m": 0.006, "initial_tilt_deg": 2.0}, "known_limits": "Heading and lateral drift remain substantial. Never tested on hardware." }, "onnx_contract": { "observation_normalizer_embedded": true, "training_action_clipping": false, "onnx_output_clip": false, "checkpoint_parity_max_abs_error": 0.00000762939453125 }, "sim2real": { "retained": [ "BAM XL330 M6 voltage control, back-EMF, current limiting, battery 6.5-8.2 V, and load-dependent sag", "3-6 physics-step actuator delay, 0-1-step IMU delay, and one-control-step joint-velocity lag", "foot friction 0.7-1.3", "trunk mass/inertia +/-5%, trunk CoM +/-8 mm, head CoM +/-6 mm, armature +/-10%, and BAM joint friction +/-10% in the final training stage", "planar velocity pushes up to +/-0.10 m/s and initial pitch/roll up to +/-2 degrees in the final training stage", "encoder bias +/-0.015 rad, IMU misalignment up to 6 degrees, and actor observation noise" ], "relaxed": [ "flat terrain only", "trained on the ordinary non-backlash robot model; backlash is cross-evaluation only", "head/body pose-command widening curricula removed", "weaker posture, angular-motion, foot-slip, and action-rate regularization; head/body pose tracking disabled", "motor-gain randomization remains disabled in the inherited recipe" ], "hardware_validated": false }, "versions": { "default": {"iteration": 12195, "policy": "policy.onnx", "checkpoint": "checkpoint.pt", "preview": "media/preview.mp4"}, "speed_parent": {"iteration": 11748, "directory": "lineage/iteration-11748"}, "legacy_mat_policy": {"iteration": 8749, "directory": "legacy/iteration-8749"} }, "media": { "preview": "media/preview.mp4", "run_into_mat": "media/run-into-mat.mp4", "run_into_mat_policy_iteration": 8749, "run_into_mat_note": "The mat, collision augmentation, camera treatment, motor cutoff, and sparks are scripted demo elements. The policy has no obstacle perception.", "audio": false }, "source_artifact_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb", "artifacts": { "policy_onnx_sha256": "007707dd7779b2756ded67c58b2e9f94fe5071794a48c2b5a20d5f8d841efbeb", "checkpoint_pt_sha256": "052f6df6683fdae83deb369b7f2c7d13e45f87ed2907adee6e23b1ebf9dfe973", "preview_mp4_sha256": "942f0802cc0c6795769bd99a9991f866fee682890ea9ea6d71077f7d4eb5492b" } }