CALM-PPO

A PPO policy that recommends a crossing speed for speed bumps so that the ride stays comfortable. It was trained on a half-car simulation with the road ahead as input and is scored with the ISO 2631-1 weighted acceleration. Code, environment and scoring are in the CALM repository.

This is seed 69 of five clean training runs, chosen as the one with the best comfort at equal travel time on roads it never saw during training.

Files

File What it is
PPO_final.zip Stable-Baselines3 policy after 10 M steps
vecnormalize.pkl Observation and reward normalisation; needed together with the policy
configs/ The settings the model was trained with (agent, reward, environment, preview, curriculum, scenario trimming)
seeds/seedNN/ All five training runs (seeds 69 to 73), each with its policy and normalisation file; seed69 is the model at the top level

Use

The policy expects the observation and the wrapper stack of the CALM environment (half-car state, the three nearest bump peaks over the next 40 m, target_speed action), so run it through the repository:

git clone --recurse-submodules https://github.com/Mohammed-Azab/CALM
cd CALM
mkdir -p logs/models/PPO/calm_ppo
cp PPO_final.zip vecnormalize.pkl logs/models/PPO/calm_ppo/
calm eval calm_ppo --scenario c --render

The vehicle at evaluation time must be the half-car, which is the default.

Training

  • PPO, 10 M steps, 5 parallel environments, curriculum over four levels that adds real roads.
  • Action: a recommended speed between 8 km/h and the scenario speed, followed by a speed controller.
  • Policy: two hidden layers (256, 128) with a tanh-bounded mean; value network (256, 256).
  • A controller adapts the weight of the speed term to keep the average speed at a set target (0.6 in configs/algo_configs.yaml).
  • Real roads from the CALM-Scenarios dataset with their starts and ends trimmed to road level.
  • The 20 roads from Augsburg, Nardo, Sindelfingen and Stuttgart are held out of training.

Results

On the 105 real scenarios, replayed on the scoring vehicle calibrated against the IMU:

a_w (m/s²) against the human against constant, equal time
20 unseen roads 0.261 -6.6 % -1.0 %
all 105 roads 0.265 -9.8 % -1.0 %

The "equal time" column compares with a constant-speed drive that takes the same time, which removes the advantage of simply driving slower. Against the MPC reference the difference is about 1 % and not distinguishable from zero; treat the policy as on par with the MPC on real roads, not better.

All five seeds

Same recipe, different random seed. Real roads, 20 unseen scenarios; the equal-time column is relative to a constant drive of the same duration.

Seed speed (km/h) against the human against constant, equal time
69 19.8 -6.6 % -1.0 %
70 19.2 -5.9 % -0.5 %
71 19.1 -10.5 % -0.6 %
72 20.9 -5.2 % -0.6 %
73 18.4 -15.3 % -0.7 %

Seed 69 is the one at the top level because it has the best comfort at equal time. Seeds 70, 71 and 73 drive slower, which makes them look better against the human but not at equal time.

Limits

  • Half-car only, flat road sections with bumps; no potholes, no curves, no braking for traffic.
  • Trained on real roads. On synthetic multi-bump roads it shows no gain over a constant drive at equal time, while the MPC does.
  • The replay is within 30 % of the measured IMU acceleration on about 80 % of the roads (median error 17 %).
  • The seeds differ in how much they slow down (18.4 to 20.9 km/h on the unseen roads) but agree at equal time.

License

MIT, as the code.

Downloads last month
49
Video Preview
loading