snake-rl-sdc β Snake Robot Locomotion Checkpoints (SDC line)
PPO policy checkpoints for the SDC (serpenoid curve control) snake-robot research line,
trained in IsaacLab with rsl_rl. This repository is the single archive for the whole
line: one directory per training round, each holding the final checkpoints together
with the exact env.yaml / agent.yaml they were trained with.
| Resource | Link |
|---|---|
| Code | https://github.com/Intelligent-Robotics-and-Control-Lab/snake_rl_lab_sdc |
| Training curves | https://wandb.ai/yongdongwanglab/snake_rl_lab_sdc |
Rounds
| Round | Date | Task | Summary |
|---|---|---|---|
sdc3d20_20260727/ |
2026-07-27 | Uniteboa-SDC3D20-AllTerrains-v0 |
First 12D 3D-SDC policies on the 20-DoF snake, 8-family terrain grid: att-OFF vs att-ON |
Round sdc3d20_20260727 β 3D Serpenoid Curve Control for a 20-DoF Snake Robot
Originally published as snake-rl-sdc3d20-20260727; renamed into this repository on
2026-07-27 (the old URL redirects here).
Two PPO policies trained in IsaacLab on a 20-DoF snake robot with a 12-dimensional 3D SDC action space (yaw + pitch amplitude groups, shared Gaussian window, inter-plane phase offset). Both were trained for 3000 iterations at 4096 environments over a single 160-tile terrain grid covering 8 families.
Code commit: cb903bf on branch feature/sdc3d-action-space.
Contents
sdc3d20_20260727/attoff/model_2999.pt attitude penalties disabled (roll_rate = 0.0, vz = 0.0)
sdc3d20_20260727/attoff/env.yaml environment config as run
sdc3d20_20260727/attoff/agent.yaml PPO config as run
sdc3d20_20260727/atton/model_2999.pt attitude penalties enabled (roll_rate = -1.0, vz = -3.0)
sdc3d20_20260727/atton/env.yaml
sdc3d20_20260727/atton/agent.yaml
The two runs are identical except for those two scalars: same seed (42), same task
Uniteboa-SDC3D20-AllTerrains-v0, same 4096 environments, same 3000 iterations,
progress_cap_to_cmd = true in both.
Action space
12 continuous dimensions per step:
| index | meaning |
|---|---|
| 0:3 | Gaussian group centres along the body |
| 3:6 | yaw-plane amplitude weights |
| 6:9 | pitch-plane amplitude weights |
| 9 | window width sigma |
| 10 | yaw offset kappa, used for turning |
| 11 | yaw/pitch phase offset phi |
Joint targets follow a travelling serpenoid wave. Even joints are yaw, odd joints are
pitch. The pitch plane reuses the same Gaussian amplitude map as yaw, so the existing
sdc_basis ablation applies identically to both planes. phi = +/- pi/2 corresponds to
sidewinding, phi = 0 to sinus lifting.
Evaluation
4096 environments, 2000 steps, measurement window [200, first reset), net progress
projected onto the spawn heading. The 2D column is the previous 8-dimensional SDC
champion, measured under the same protocol at command -0.035 m/s.
Fleet mean net progress over 36 s at command -0.035 m/s:
| att-OFF | att-ON | 2D baseline | |
|---|---|---|---|
| net progress (m) | 3.380 | 0.234 | 1.078 |
| fleet dz (m) | -0.455 | +0.026 | +0.002 |
| body path length (m) | 30.51 | 25.51 | 6.29 |
| 3D/2D path ratio | 1.025 | 1.006 | 1.008 |
| stationary environments | 0.6 % | 22.6 % | 0.8 % |
| command gain dv/dcmd | -0.04 | +0.18 | +0.453 |
| pitch amplitude collapsed | 0.0 % | 100 % | n/a |
Per family, restricted to the families where the comparison was verified directly:
| terrain family | dz (m) | att-OFF (m) | 2D baseline (m) | ratio |
|---|---|---|---|---|
| tr07 flat | -0.001 | 3.193 | 0.756 | 4.2x |
| tr06 inverted slope | -0.006 | 3.080 | 0.779 | 4.0x |
| tr02 inverted stairs | +0.004 | 1.007 | 0.394 | 2.6x |
| tr08 pole forest | +0.033 | 0.406 | 2.657 | 0.15x, regression |
Fleet speed against commanded speed:
| command (m/s) | att-OFF speed | att-ON speed |
|---|---|---|
| -0.020 | 0.0959 | 0.0103 |
| -0.035 | 0.0940 | 0.0065 |
| -0.050 | 0.0971 | 0.0049 |
Honest limitations
Neither policy is a clean win.
att-ON collapsed. The pitch amplitude weight sits at -1.56 with 100 percent of environments at the lower bound, and the yaw amplitude collapsed as well, to -1.68. The policy froze rather than reverting to a 2D gait; 68.6 percent of environments on stairs are completely stationary, and fleet progress falls below the 2D baseline. Penalising vertical velocity removes the very mechanism 3D locomotion depends on. Roll rate is the tumbling-exploit channel and should be penalised separately from vz.
att-OFF is command-blind and partly gravity-assisted. Speed is essentially constant across three different commanded speeds, so the policy does not track the command at all. On stairs it descends 2.638 m in 36 s and on slopes 0.844 m, so a substantial part of the headline progress is falling rather than locomotion.
The defensible 3D gain is narrow but real: on flat ground, where no descent is available, att-OFF reaches 3.193 m against 0.756 m for 2D at dz = -0.001. Pole forest regresses to 0.406 m against 2.657 m, so lifting destroys the pole-contact propulsion the 2D gait relies on.
Both policies keep |phi| > 0.7 at 0.0 percent of environments, att-OFF averaging
0.44 rad, so the gain does not come from sidewinding but from a mild yaw/pitch phase
offset, morphologically closer to sinus lifting combined with lateral undulation.
Efficiency is worse in 3D: att-OFF spends 30.5 m of body path for 3.38 m of net displacement (11 percent), against 6.29 m for 1.078 m (17 percent) in 2D.
Single seed (42) per arm. No seed replication was run.
Simulation setup
IsaacLab / Isaac Sim 5.1, direct RL environment, rsl_rl PPO. Isotropic friction
(static = dynamic = 0.2, combine mode min), no passive wheels, scales or anisotropy.
Control step 0.02 s (decimation 4, sim dt 1/200), episode 2000 steps or 40 s.
Citation
Adaptive Learning System Control Laboratory, Okayama University.