From 5e0ee34ed71740c77be0fc266190d4ea4dff2aa4 Mon Sep 17 00:00:00 2001 From: Arne van Iterson Date: Wed, 6 Dec 2023 23:04:26 +0100 Subject: [PATCH] README --- README.MD | 31 +++++++++++++++++++++++++++++-- res/screenshot1.png | Bin 0 -> 39449 bytes src/sim/pendulum.py | 2 +- 3 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 res/screenshot1.png diff --git a/README.MD b/README.MD index 010f0b4..48f718f 100644 --- a/README.MD +++ b/README.MD @@ -1,6 +1,35 @@ # EV5_Modcon Everything for the EE HU Semester 5 Modelling and Control course +![Screenshot](res/screenshot1.png) + +# Simulation +The inverted pendulum system has been simulated in Python using pygame. + +## Running simulator +1. Open the venv: +```bash +$ ./.venv/Scripts/Activate +``` +2. Start the script +```bash +$ python3 ./src/sim/sim.py +``` +3. The script can be controlled using the following commands: + +| Key | Purpose | +| --------- | --------------------- | +| Esc | Exit | +| Space | Reset simulation | +| P | Pause simulation | +| G | Show debugging graphs | +| C | Toggle PID Control | +| A / Left | Accelerate cart left | +| D / Right | Accelerate cart right | + +# Hardware +A robot has been built using LEGO EV3 to show the simulated system in action. + ## Connections to EV3 required - Large motor on port B - Large motor on port C @@ -12,5 +41,3 @@ Connect either via WiFi, USB or Bluetooth. Do note that connecting via USB or Bl ## Compiling C++ Compiling C or C++ requires a Docker installation of the compiler following (this guide)[https://www.ev3dev.org/docs/tutorials/using-docker-to-cross-compile/] -## Running Python Code -TODO \ No newline at end of file diff --git a/res/screenshot1.png b/res/screenshot1.png new file mode 100644 index 0000000000000000000000000000000000000000..9061aa19c89ed35151049be87a33b772795cc067 GIT binary patch literal 39449 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 r*=b~-lM4zu;HjjZ_$H8|v$Z?rR0BJ)&Z9