From e2f4a0d2a537a144d079bec10e07726a3370a5f9 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Mon, 27 Oct 2025 17:23:04 +0100 Subject: [PATCH] chore: add README --- README.md | 61 +++++++++++++++++ car.svg | 143 ++++++++++++++++++++++++++++++++++++++ logo.png | Bin 0 -> 31091 bytes logo.svg | 202 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 406 insertions(+) create mode 100644 car.svg create mode 100644 logo.png create mode 100644 logo.svg diff --git a/README.md b/README.md index e69de29..f81a3a8 100644 --- a/README.md +++ b/README.md @@ -0,0 +1,61 @@ +

+ +

+ +# Rally Racer + +This repository holds a sandbox driving simulation controllable via a network interface as a machine learning and data collection challenge. + +# Installation +From the root of the repository, run +```sh +uv sync +``` + +To run the game, you can use +```sh +uv run main.py +``` + +# Generality +Launching [`main.py`](main.py) starts a race with a single car on the provided track. +This track can be controlled either by keyboard (*WASD*) or by a socket interface. +An example of such interface is included in the code in [*`scripts/recorder.py`*](scripts/recorder.py). To run it, simply use the following command: +```sh +uv run -m scripts.recorder +``` + +# Sensing +The car sensing is available in two commodities: **raycasts** and **images**. These sensing snapshots are sent at 10 Hertz (i.e. 10 times a second). Due to this fact, correct reception of snapshot messages has to be done regularly. + +# Communication protocol + +A remote controller can be impemented using TCP socket connecting on localhost on port 5000. +Different commands can be issued to the race simulation to control the car. + +These commands are declared in [`src/command.py`](src/command.py) + +## Car controls +```python +ControlCommand(control: CarControl, active: bool) +``` +To simulate key press and control the car. + + +# Controls + +- W Move forward +- S Brake / move backward +- A Turn left +- D Turn right +- F Toggle FPS indicator +- V Toggle speedometer +- R Reset car +- C Toggle raycasts visibility +- Esc Quit + + +# Credits +This project is based on the repository [https://github.com/ISC-HEI/RallyRobotPilot_2025](https://github.com/ISC-HEI/RallyRobotPilot_2025), which is in turn based on [https://github.com/mandaw2014/Rally](https://github.com/mandaw2014/Rally) \ No newline at end of file diff --git a/car.svg b/car.svg new file mode 100644 index 0000000..802901f --- /dev/null +++ b/car.svg @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/logo.png b/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8cf983544139138bce64435ef14395a916f15f2e GIT binary patch literal 31091 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 z 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 literal 0 HcmV?d00001 diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..424f65a --- /dev/null +++ b/logo.svg @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +