Skip to content

juanmanzanero/fastest-lap

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Fastest-lap 🏁🏎

Fastest-lap is a vehicle dynamics simulator. It can be used to understand vehicle dynamics, to learn about driving techniques, to design car prototypes, or just for fun!

MacOS Linux Windows Documentation Status codecov

test

What can be done

  • Numerical G-G diagram: given a vehicle, and a speed, to compute its ax-ay diagram. The G-G diagram is a useful technique in vehicle design and parameters exploration.

    This is solved as an optimization problem: for a given lateral acceleration, find the minimum/maximum feasible longitudinal acceleration.

  • Optimal laptime simulation: given a vehicle, and a circuit, to compute the optimal controls that minimize the laptime.

    This problem is solved using a first order collocation method, the trapezoidal rule, with higher-order methods planned to be implemented soon. The NLP is solved using Ipopt, and CppAD to enhance its performance (a lap-time around Circuit de Catalunya can be obtained with 500 points in approximately 1 minute).

    This is not a quasi-steady-state simulation. The model solves the fully transient states as in the dynamic equations without steady-state assumptions.

ferrari-2022-australia.mp4

The approach

The core of the software is a C++ library, that can be used through a Python API. Full documentation is not yet available but some examples can be found in examples/python. Fastest-lap is very efficient, being able to compute a full optimal lap in less than 1 minute.

Dynamic models

The code implements two car models:

Circuits

Circuits are modeled from paths created from google earth, for example, the right track limit of Catalunya is included in this repository (database/google_earth/Catalunya_right.kml). Circuits are then preprocessed with a tool included herein to extract a reference line, its curvature, and the distance to the left/right track limits (database/catalunya_discrete.xml).

Dependencies

Fastest-lap uses several open-source libraries:

  • Ipopt: Interior Point OPTimizer, is an open source software package for large-scale nonlinear optimization. Used within this project to obtain the solution to optimal laptime problems written as NLP (Non-linear programming problem).
  • CppAD: C++ Algorithmic Differentiation. Distributed alongside Ipopt, it is used to compute analytical derivatives.
  • Tinyxml2: TinyXML-2 is a simple, small, efficient, C++ XML parser, used to read XML files (e.g. model parameters, tracks,...)
  • logger-cpp: a simple logger in C++, to handle print levels, and other interesting add-ons
  • lion-cpp: lightweigh interfaces for optimization and numerics, a C++ package manager for all the libraries mentioned above, plus other numerical methods such as mechanical frames, vector algebra, and Runge--Kutta schemes

Installation

Windows 10

Precompiled binaries are available to download for every release.

Download and unzip. The contents of the zip folder are:

  • bin: the dynamic libraries. Fastest-lap C++ core is there. If fastest-lap is used from MATLAB, point loadlibrary() to this directory.
  • include: fastestlapc.h and fastest_lap.py. To use python scripts, make sure this folder is on the PYTHONPATH
  • examples: python notebook examples.
  • database: car and track data

Mac and Linux

This project uses CMake to build the source code and produce the binaries.

The canonical steps to compile a CMake project are: (assume $FASTESTLAP is the source code top level.)

  1. Create a build folder.
mkdir ${FASTESTLAP}/build
  1. From the build folder, run cmake
cd ${FASTESTLAP}/build && cmake ..

The options available for cmake are:

-DCMAKE_BUILD_TYPE=Debug/Release
-DCMAKE_INSTALL_PREFIX=/path/to/install/dir
-DCODE_COVERAGE=Yes/No: enables code coverage (if so, use with -DCMAKE_BUILD_TYPE=Debug)
-DBUILD_DOC=Yes/No: builds doxygen documentation

At this stage, CMake will download and install all the thirdparty dependencies.

  1. Compile
make
  1. Test (optional but recommended)
ctest --verbose
  1. Install (optional)
make install

Linux

A Docker build environment is provided and can be used to compile the shared library and generate the Python bindings.

sh ./src/scripts/linux/docker_compile.sh

Documentation

Read the latest fastest-lap online documentation

References

[1] Tremlett, A. J., and D. J. N. Limebeer. "Optimal tyre usage for a formula one car." Vehicle System Dynamics 54.10 (2016): 1448-1473.
[2] Lot, Roberto, and Nicola Dal Bianco. "Lap time optimisation of a racing go-kart." Vehicle System Dynamics 54.2 (2016): 210-230.
[3] Dal Bianco, Nicola, Roberto Lot, and Marco Gadola. "Minimum time optimal control simulation of a GP2 race car." Proceedings of the Institution of Mechanical Engineers, Part D: Journal of Automobile Engineering 232.9 (2018): 1180-1195.
[4] Lot, Roberto, and Matteo Massaro. "A symbolic approach to the multibody modeling of road vehicles." International Journal of Applied Mechanics 9.05 (2017): 1750068.
[5] Kelly, Daniel P., and Robin S. Sharp. "Time-optimal control of the race car: a numerical method to emulate the ideal driver." Vehicle System Dynamics 48.12 (2010): 1461-1474.
[6] Piccinini, Mattia. "Path planning and control of self-driving vehicles at the limits of handling"
[7] Casanova, D. "On minimum time vehicle manoeuvring: the theoretical optimal lap"
[8] Perantoni, G. et al. "Optimal Control for a Formula One Car with Variable Parameters"