Add standalone ATO controller in lean Rust.
Some checks are pending
CodeView ATO CI / rust (push) Waiting to run
CodeView ATO CI / integration (push) Blocked by required conditions

Pure ato-core logic, minimal HTTP client, JSON config and spec files.
Docker build with tests; integrates with TrainSim over simple REST API.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Mona Lisa 2026-06-14 20:37:21 +00:00
parent b4e580af11
commit a8d40b466b
20 changed files with 748 additions and 24 deletions

45
spec/interface.md Normal file
View file

@ -0,0 +1,45 @@
# ATO ↔ TrainSim interface (v1)
Standalone. No ETCS. No ATP. JSON over HTTP.
Base URL (TrainSim): `http://trainsim:8080`
## TrainSim → ATO reads
`GET /train/state`
```json
{
"speed_mps": 0.0,
"position_m": 0.0,
"track_length_m": 1000.0,
"sim_running": false
}
```
## ATO → TrainSim writes
`POST /train/actuate`
```json
{
"traction_pct": 0,
"brake_pct": 0
}
```
Percent 0100. Do not send both > 0 (TrainSim clamps brake wins).
`POST /sim/start` — start physics tick (empty body)
`POST /sim/stop` — pause physics (empty body)
Optional (TrainSim logs only): `POST /train/doors` `{ "command": "open" | "close" }`
## ATO configuration (env)
| Variable | Meaning |
|----------|---------|
| `TRAINSIM_URL` | TrainSim base URL |
| `TARGET_SPEED_MPS` | Cruise target (default 10) |
| `TICK_MS` | Control period (default 100) |