Control the Traffic Manager
Paths. scripts/… and references/… below are relative to the
directory holding this SKILL.md. Your working directory is the user's
project, not that directory, so prefix them with its absolute path or the
command is not found.
Shape how autopilot vehicles drive — globally (all cars on a TM port) or
per-vehicle. This is the counterpart to control-vehicle:
that skill drives one car manually; this one tunes the autonomous traffic. It
affects cars enrolled in autopilot (see spawn-vehicles),
on the matching --tm-port.
Instructions
Progress:
- [ ] Step 1: Check prerequisites (bash scripts/check_env.sh), clear FAILs
- [ ] Step 2: Have autopilot vehicles on the TM port (spawn-vehicles)
- [ ] Step 3: Apply global and/or per-vehicle settings
- [ ] Step 4: Watch the change on a rendered server
Commands need CARLA_HOST/CARLA_PORT/TM_PORT from scripts/env.sh. Use the
same --tm-port the vehicles were spawned on (default 8000).
Step 1: Check prerequisites
bash scripts/check_env.sh
Step 3: Tune
source scripts/env.sh
# GLOBAL: all traffic 30% faster than the limit, keep 3 m, deterministic
python3 scripts/traffic.py global --speed-diff -30 --distance 3 --seed 42
# EVERY car: run 50% of red lights, allow lane changes
python3 scripts/traffic.py all --ignore-lights 50 --auto-lane-change on
# ONE car (the ego's neighbour): crawl, hug the right, TM manages its lights
python3 scripts/traffic.py vehicle --id 42 --speed-diff 60 --lane-offset 0.5 --lights on
# make the ego's autopilot reckless
python3 scripts/traffic.py vehicle --role hero --ignore-vehicles 40 --ignore-signs 100
# TM sync (only alongside a synchronous world — see set-world-settings)
python3 scripts/traffic.py sync on
Step 4: Verify
Watch the traffic on a rendered server. Settings are write-only on the TM (no
read-back), so the command reports what it set and to how many vehicles.
Examples
Example 1: faster traffic
User says: "make the traffic move faster"
global --speed-diff -40 (40% above the limit). Negative = faster.
Example 2: chaos for testing
User says: "make cars run lights and ignore each other"
all --ignore-lights 100 --ignore-vehicles 60 — expect collisions (that's the
point of the test).
Example 3: deterministic traffic run
User says: "same traffic behaviour every run"
global --seed 42, in synchronous mode (sync on + set-world-settings), spawn
with a seed. Seed + sync is what makes it reproducible.
Troubleshooting
Problem: nothing changes
Cause: cars aren't on this TM port, or aren't on autopilot, or you set the ego
(which you're driving manually).
Solution: match --tm-port to the spawn; ensure autopilot is on (spawn-vehicles
default); target autopilot cars.
Problem: cars froze after sync on
Cause: TM sync without a synchronous, ticked world (or vice-versa).
Solution: keep TM sync and world sync in step and tick the world (set-world-settings).
Problem: --speed-diff 30 made them slower, not faster
Cause: the value is % below the limit.
Solution: use a negative value to go faster (-30 = 30% above the limit).
Problem: collisions everywhere
Cause: high --ignore-vehicles / --ignore-lights.
Solution: lower them; 0 restores full caution.
Outputs
Traffic Manager behaviour state (global + per-vehicle). No file, no read-back; the
command reports what it applied.
Detail (every setting, the speed-difference sign, hybrid physics, determinism,
sync coupling) in references/traffic-manager.md.