Toolkit for locating a vehicle on the race track
This project deals with the localization of a vehicle on a race track. This is a student project from Bochum University of Applied Sciences.
The main approach of localization is based on locating the vehicle based on the current and already travelled section types. A section type can be a right turn, a left turn and straight.
Robot
The used Robot is the LEGO EV3 Brick as a line follower to test the algorithm.
The robot use MicroPython. How to install MicroPython and set up your Visual Studio Code to connect your pc to the robot is documented in this file: https://assets.education.lego.com/v3/assets/blt293eea581807678a/bltb470b9ea6e38f8d4/5f8802fc4376310c19e33714/getting-started-with-micropython-v2_enus.pdf?locale=de-de
Important notes regarding the robot:
- The robot has differential drive.
- The motors / sensors are connected to the following ports of the robot:
- Motor: OUTPUT A & OUTPUT B
- ColorSensor: INPUT 4
- GyroSensor: INPUT 1
Getting started
How to run MicroPython programs on LEGO EV3:
- Download and flash the EV3 MicroPython image onto a micro SD card
- Insert the micro SD card into the SD card slot on the EV3 Brick
- Download, install, and launch Visual Studio Code on your computer
- Install and activate the LEGO Education EV3 extension
- Connect the EV3 Brick
- After installing the extension, a device can be connected in Visual Studio Code (at the bottom, left).
- The LEGO EV3 Brick should be listed and can be selected in the list.
The following Python-packages must be installed on the computer to run the algorithm:
- numpy
- pandas
- matplotlib
- tkinter
- socket
- datetime
Preparations before run
Clone this git. Connect the EV3 robot to the same network as your executing device.
The following adjustments might be necessary, before the algorithm is executable:
- change ip-address in Lokalisierung_LEGO/main.py to the ip-address of the executing device
- insert the sections of the race track in localization.py (get_set_of_section_*())
- structure of a section: [name, section_type, previous_sections_type]
- if the track plotter is used, insert also a set of track parts in the file grafic (get_set_of_trackparts_*()).
- structure of a section: [URL, name, start position(x,y), start orientation]
- Images of the race tracks are not included in this git. If interested, please contact the authors.
Run
- Connect the robot via Visual Studio Code.
- Start the python file race_management.py
- Now some windows should pop up.
- You can't move this windows until the UDP-connection with the robot is connected.
- When you want to stop the script you have to restart the python kernel.
- Start the main.py file on the robot.
- To do this, select the file in the Lego-EV window in the lower left corner of Visual Studio Code. Then right click and click on "Run"
- Now the robot should drive and send data to the pc which plots in the console the current detected section and plot stuff.
- To stop the robot/program press the left upper button on the robot, or close the dashboard window.
Description
The main branch contains the following files:
- localization.py: localization algorithm
- driving.py: detection of section type, calculation of odometry, calculation driven distance in section
- grafic.py: graphical output
- race_management.py: main program
- Lokalisierung_LEGO (folder), main.py: programming of the robot LEGO EV3
The following measured values are stored and must be adjusted if necessary (in main.py):
- wheel circumference (radumfang)
- wheel spacing (d)
Notes on constant values (in race_management.py):
- CHAR_RECIVING: number of chars in one UDP-message This value should only be changed if the sent string changes.
- THRESHOLD_LEFT, THRESHOLD_RIGHT: value to detect a left or right turn These values can be changed to possibly improve the algorithm.
- BLOCK_SIZE_DA: number of iterations to analyse the section type This value can be changed to possibly improve the algorithm.
- S = 0, R = 1, L = 2: value for a straight part, a right turn, a left turn of the track These values should not be changed in order to maintain the functionality of the algorithm.
Code overview
Authors and acknowledgment
Jessica Dreyer, Sebastian Böttger
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project status
Project closed.
Cordial invitation to further develop this project.