{
  "experiment": "Bridge_T800_AMP_v4",
  "recipe_version": 4,
  "initialization": "parent_actor_critic_amp_and_normalizers_new_optimizers",
  "resume": false,
  "parent_checkpoint": "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_17-44-53_t800_v4_stand_turn_fresh_4096/model_6000.pt",
  "parent_checkpoint_sha256": "db996d1541fffc942fb9b7778e7c424466763187489af5cce2615aa1b4104416",
  "official_bridge_artifact": false,
  "physical_robot_validation": false,
  "motion": "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_walk_forward_knee.npz",
  "num_envs": 4096,
  "iterations": 400,
  "source_motion": "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_17-44-53_t800_v4_stand_turn_fresh_4096/motions/t800_walk_forward_knee.npz",
  "motion_sha256": "e81a1ea23ae1e9d6662c9db152d4ea2364eebe661fcabb36031a48a6adaf9d30",
  "expert_knee_branch_preflight": "passed_forward_geometry",
  "logging_backend": "rsl_rl.utils.logger.Logger",
  "console_log_interval_iterations": 1,
  "seed": 42,
  "yaw_max": 0.35,
  "standing_turn_repair": true,
  "natural_standing": true,
  "standing_l1": true,
  "recipe_variant": "stand_still_l1_refinement",
  "amp_motions": [
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_walk_forward_knee.npz",
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_turn_left_forward_knee.npz",
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_turn_right_forward_knee.npz"
  ],
  "amp_motion_sha256": {
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_walk_forward_knee.npz": "e81a1ea23ae1e9d6662c9db152d4ea2364eebe661fcabb36031a48a6adaf9d30",
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_turn_left_forward_knee.npz": "fbab2b700b81c38bf37305edc08eaa5c0899942430ff243d321418c502dcd774",
    "/home/z/bridge/rl/bridge_amp_v4/logs/2026-10-20_21-44-33_standing_l1_refinement_4096/motions/t800_turn_right_forward_knee.npz": "df32b0c61311ded7b79e56df63896815f4aab34c9b0cc683e4c1537bea62af77"
  },
  "standing_posture_backend": "mjlab.tasks.velocity.mdp.variable_posture",
  "knee_target_bounds_rad": {
    "left_knee_pitch": [
      0.1075368715934723,
      2.0943951023931953
    ],
    "right_knee_pitch": [
      0.10753687159347233,
      2.0943951023931953
    ]
  },
  "stage": "forward_and_turning",
  "policy_dt": 0.01,
  "physics_dt": 0.0025,
  "actor_history": 15,
  "num_steps_per_env": 24,
  "ppo_epochs": 5,
  "ppo_minibatches": 4,
  "ppo_initial_learning_rate": 0.0001,
  "entropy_coef": 0.002,
  "action_std_min": 0.12,
  "action_std_max": 2.0,
  "discriminator_history": 10,
  "discriminator_frame_dim": 48,
  "discriminator_terms": [
    "base_angular_velocity",
    "absolute_joint_position_waist_zero",
    "joint_velocity_waist_zero",
    "projected_gravity"
  ],
  "style_scale_per_s": 7.5,
  "task_style_lerp": 0.4,
  "standing_style": "task-only for zero command; no walking style pressure while standing",
  "policy_normalization": "raw moments updated once per rollout, frozen within PPO update",
  "discriminator_normalization": "balanced raw expert and policy frames; normalized-space two-sided gradient penalty",
  "optimizer": "existing legacy plain PPO Adam; independent discriminator SGD momentum0.9 lr0.00025",
  "mirror_loss": true,
  "mirror_loss_coeff": 0.1,
  "scope_differences_from_t800": [
    "Bridge model and existing 400Hz physics/PD",
    "nominal dynamics without domain randomization or observation noise",
    "checked rollout-derived expert clips rather than four original T800 motion capture clips",
    "zero-command style gate and first-nine-step history warmup are local additions",
    "native mjlab posture reward and task-specific knee position-target bounds"
  ],
  "bridge_urdf_sha256": "f0411693eb0586eab4d27a9d027bbd619ca3050efa3a051491fcb9a3421c0805"
}
