Standalone ATO (Rust) — automatic train speed/brake control. Pairs with TrainSim. No ETCS/ATP.
|
|
||
|---|---|---|
| .agent | ||
| .forgejo | ||
| config | ||
| crates | ||
| spec | ||
| .dockerignore | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| Dockerfile | ||
| README.md | ||
ATO — Automatic Train Operation
Standalone Automatic Train Operation for railway-style speed control.
No ETCS. No ATP. Lean Rust, safety-oriented style.
Companion simulation: TrainSim
| Forgejo | https://git.italiatts.online/rwsholdem/ato |
| Language | Rust |
| Role | Reads train state, outputs traction/brake commands |
What it does
- Load parameters from
config/ato.default.json(replaceable file, no rebuild needed for tuning). - Connect to TrainSim over HTTP (
spec/interface.md). - Cruise mode: from standstill → hold target speed on a loop track.
- Core also supports stop-at-position / brake-curve helpers (
ato-core).
Repository layout
| Path | Purpose |
|---|---|
crates/ato-core/ |
Pure control logic — zero dependencies, no I/O, #![forbid(unsafe_code)] |
crates/ato-app/ |
Control loop + minimal HTTP client (http.rs, std only) |
config/ |
Runtime parameters (ato.default.json) |
spec/ |
Shared interface contract + JSON message examples |
Dockerfile |
Multi-stage build, runs tests during image build |
Interface (summary)
See spec/interface.md. TrainSim implements the server; ATO is the client.
GET /train/state— speed, position, track lengthPOST /train/actuate—{ "traction_pct": 0–100, "brake_pct": 0–100 }POST /sim/start·POST /sim/stop
Build & test
cargo test --workspace
docker build -t ato .
Run with TrainSim (CodeView lab, nested Docker)
On the CodeView VPS, integration runs inside DinD (not on the host):
cd /root/code-view/profiles/ato-lab
./run-e2e.sh
Detailed ATO design and SIL notes — to be expanded in a later README revision.