57 lines
1.8 KiB
Markdown
57 lines
1.8 KiB
Markdown
# 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.*
|