# Training and reproduction ## Environment The maintained task is `Isaac-Dropbear-Velocity-v0`, an Isaac Lab `ManagerBasedRLEnv` trained with RSL-RL PPO. Physics runs at 200 Hz (`dt=0.005`), while the policy and environment step at 50 Hz (`decimation=4`). Stage 46 used 512 parallel environments on one A100 80 GB GPU, 24 rollout steps per environment, and 80 continuation updates. The exact resolved environment and agent configurations are preserved in `configs/release_v0.1.0/`. The TensorBoard event file is in `training/stage46/`. ## Stage 66 directional obstacle continuation Run the six-mode obstacle branch from the published v0.2.0 checkpoint: ```bash DROPBEAR_TRAIN_GPU=1 \ DROPBEAR_LIVE_STATE=/tmp/dropbear_training_live.json \ bash scripts/train_stage66_directional_obstacles.sh ``` Set `DROPBEAR_TRAIN_GPU=0,1,2` and `DROPBEAR_TRAIN_GPU_COUNT=3` to run one 512-environment simulator per A100. Torchrun and RSL-RL synchronize one shared policy across the 1,536 total environments. Only rank zero publishes the live training snapshot. The curriculum retains 35% flat tiles and assigns the remaining 65% equally to forward, backward, left, right, turn-left, and turn-right box approaches. Each terrain label deterministically selects its matching body-frame command. The turn modes use `vx=+0.20 m/s` with `wz=+/-0.20 rad/s`; cardinal modes use one planar component at `+/-0.20 m/s`. This continuation removes the previous corrective asymmetry: both alternating-knee weights are `1`, and both step-through weights are `1`. Mass and contact friction remain randomized. Pushes are disabled only for the first directional attribution gate, then introduced as a separate continuation instead of changing terrain, bilateral weighting, and disturbances at once. The terrain sequence is: 1. isolated boxes with direction and height variation; 2. curb-style step-up and step-down lanes; 3. repeated ascending, descending, and mixed stairs. ## Reproduce Stage 46 Activate the Isaac Lab Python environment, install `dropbear_walk` editable, then run: ```bash bash scripts/train_release_v0_1.sh ``` The script: 1. creates a local RSL-RL warm-start run from `warm_start_model_8666.pt`; 2. enables measured base-linear-velocity feedback and COM-reference feedback; 3. fixes the target to +0.20 m/s robot-left; 4. applies the exact Stage 46 reward/penalty weights; 5. performs 80 PPO updates with actor deltas scaled to 0.04; 6. saves every five iterations. `CUDA_VISIBLE_DEVICES` defaults to `0` and can be overridden: ```bash CUDA_VISIBLE_DEVICES=2 bash scripts/train_release_v0_1.sh ``` The wrapper deliberately adapts old checkpoints without destroying learned behavior. New observation columns are appended to the actor and critic first layers with zero weights; empirical-normalizer means are initialized to zero and variances/stds to one. This keeps the inherited policy identical at the moment of adaptation while allowing the continuation to learn the new feedback. ## PPO parameters used for the release | Parameter | Value | |---|---:| | Actor/critic MLP | 512, 256, 128 ELU | | Environments | 512 | | Rollout steps | 24 | | Learning rate | `3e-5`, fixed | | Actor update scale | 0.04 | | Entropy coefficient | `1e-4` | | Action standard deviation | 0.04 | | Discount / GAE lambda | 0.99 / 0.95 | | PPO clip | 0.2 | | Learning epochs / mini-batches | 5 / 4 | | Physics / policy rate | 200 Hz / 50 Hz | | Gait period | 0.55 s | The continuation initially destabilizes while the much stronger COM objective is introduced, then recovers to the full 1,000-step horizon. The final logged updates have a time-out fraction of 1.0 and bad-orientation fraction of 0.0. ## Deterministic validation Re-run the release's focused left-motion gate: ```bash ./IsaacLab/isaaclab.sh -p scripts/evaluate_dropbear_deterministic.py \ --actor-base-lin-vel \ --eval-com-control \ --eval-gait-period 0.55 \ --eval-com-stand-height 1.052 \ --eval-com-height-delta 0 \ --eval-com-height-error-scale 0.03 \ --eval-com-vertical-velocity-error-scale 0.08 \ --eval-reset-policy-joints-only \ --eval-reset-joint-position-range 1.0 1.0 \ --eval-reset-joint-velocity-range 0.0 0.0 \ --eval-plane \ --eval-disable-pushes \ --eval-feet-min-distance 0.16 \ --eval-feet-min-lateral-separation 0.10 \ --eval-forward-speed 0 \ --eval-lateral-speed 0.20 \ --eval-yaw-rate 0 \ --eval-episodes 64 \ --eval-warmup-episodes 0 \ --eval-output evaluation/left_0.20_strict_64.reproduced.json \ --task Isaac-Dropbear-Velocity-Play-v0 \ --checkpoint checkpoints/dropbear_locomotion_v0.1.0/model_8745.pt \ --num_envs 64 \ --device cuda:0 \ --viz none ``` For the four-direction sweep, add: ```text --eval-planar-cardinal-sweep --eval-forward-speed 0.20 --eval-backward-speed -0.20 --eval-lateral-speed 0.20 --eval-episodes 128 --num_envs 128 ``` The evaluator uses deterministic actor means and writes complete machine-readable statistics, including fall/time-out rates, achieved COM and root velocity, arm modes, gait score, foot minima, and per-step strict-gate violation fractions. ## Planar-speed and disturbance curriculum The post-release continuation samples the four exact body-frame cardinal commands with equal probability. `--initial-command-level 0.2` defines the current magnitude; the two speed ranges below define curriculum ceilings, not an immediate jump: ```text --initial-command-level 0.2 --forward-speed-range -1.0 1.0 --lateral-speed-range -1.0 1.0 --planar-cardinal-commands ``` When a deterministic sweep identifies a weak direction, all four directions can remain represented while temporarily biasing the sampler. For example: ```text --cardinal-forward-weight 0.10 --cardinal-backward-weight 0.35 --cardinal-left-weight 0.15 --cardinal-right-weight 0.40 ``` The order is forward, backward, left, right. These are relative weights; they need not sum to one. Restore equal weights after the weak-direction gate passes. After each completed-episode window, `lin_vel_cmd_levels` widens both planar axes by 0.1 m/s only when normalized velocity tracking exceeds 40% of the tracking reward's weight and at least 95% of episodes reach the time limit without a fall or other terminal failure. The resulting progression covers ±0.2, ±0.3, ..., ±1.0 m/s while preventing an unvalidated checkpoint from being exposed to the full envelope immediately. Robustness runs can add controlled impulse-like velocity perturbations: ```text --push-forward-velocity 0.0 --push-lateral-velocity 0.25 --push-interval-s 5.0 ``` This example applies a random body velocity change in the lateral axis every five seconds while leaving the forward component untouched. It is an instantaneous velocity disturbance, not a force specified in newtons. Increase the lateral magnitude only after a deterministic no-push cardinal gate passes. Yaw, COM-height reduction, uneven terrain, and floor recovery remain separate curriculum axes. Changing them simultaneously with planar speed makes regressions difficult to attribute.