# 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](https://git.italiatts.online/rwsholdem/trainsim)** | | | |---|---| | **Forgejo** | https://git.italiatts.online/rwsholdem/ato | | **Language** | Rust | | **Role** | Reads train state, outputs traction/brake commands | ## What it does 1. Load parameters from `config/ato.default.json` (replaceable file, no rebuild needed for tuning). 2. Connect to TrainSim over HTTP (`spec/interface.md`). 3. **Cruise mode:** from standstill → hold target speed on a loop track. 4. 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`](spec/interface.md). TrainSim implements the server; ATO is the client. - `GET /train/state` — speed, position, track length - `POST /train/actuate` — `{ "traction_pct": 0–100, "brake_pct": 0–100 }` - `POST /sim/start` · `POST /sim/stop` ## Build & test ```bash 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): ```bash cd /root/code-view/profiles/ato-lab ./run-e2e.sh ``` --- *Detailed ATO design and SIL notes — to be expanded in a later README revision.*