The repository contains a custom implementation of this Binary Integer Optimization Algorithm.
The project is structured into three main modules:
- lanes_generator.py: the module is used to create random Formula One tracks with cones on each side
- boundary_detection.py: receives a given track and performs The Robust Lane Detection optimization (RLD) on it
- performance.py: used to check the behaviour of the algorithm on given tests (circle + rectangle)
lanes_generator.py creates a random track which can be saved by answering yes
when prompted after running the module.
The default save location is the shapes directory.
To run boundary_detection.py on a certain track, write in the terminal the index
of the shape you would like to load (a numeric value, e.g. 0
, for shape_0). The algorithm will compute the boundary and show it in a plot.
performance.py contains two test cases, one for a rectangle shaped lane and another for a circular lane. Choose between them when prompted. The program will create the shape and run the algoritm on it, also plotting the results at the end.
The algorithm provides a solution to real-time lane detection, in the context of the Formula Student
Driverless racecar competition.
We represent the boundaries of the lane with an undirected graph G(V, E) where the vertices V are the set
of observed cones, including false positives, and E is the set of edges connecting cones that are adjacent
to each other. The overall strategy is to solve a constrained binary integer program to find the adjacency
matrix, A, of the lane graph that is optimal with respect to a specified cost function.
The binary integer optimization problem was modelled using cvxpy, a Python-embedded modeling language for convex optimization problems.
The solver used was Mosek.
An example of the result obtained for a random track is given in the following image: