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.
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.