Official implementation of the paper: A Simulation Benchmark for Autonomous Racing with Large-Scale Human Data
[Website] [Dataset] [ROS2 interface] [Paper]
Gym interfaces with Assetto Corsa for Autonomous Racing. This repository integrates the Assetto Corsa racing simulator with the OpenAI's Gym interface, providing a high-fidelity environment for developing and testing Autonomous Racing algorithms in realistic racing scenarios.
Features:
This repository contains all the necessary code to run the Gym interface for Assetto Corsa and RL benchmarks. For the ROS2 interface, refer to ROS2 interface
We base our SAC code on this implementation.
Install the AC plug-in
Follow the instructions in INSTALL.md
Install Python in Windows
Install Visual Studio Compiler
Install Python using Anaconda
conda create -n p309 python=3.9.13
conda activate p309
pip install setuptools==65.5.0
pip install -r requirements.txt
conda install pytorch==1.12.1 cudatoolkit=11.6 -c pytorch -c conda-forge
Download the tracks occupancy grid
Get the files from here tracks.
Optionally, download them using the Huggingface Hub interface:
conda install -c conda-forge huggingface_hub
python -c "from huggingface_hub import snapshot_download; snapshot_download(repo_id='dasgringuen/assettoCorsaGym', repo_type='dataset', local_dir='AssettoCorsaGymDataSet', allow_patterns='AssettoCorsaConfigs/tracks/*')"
assetto_corsa_gym/AssettoCorsaConfigs/tracks
.To create a new track:
assetto_corsa_gym/AssettoCorsaConfigs/tracks
.assetto_corsa_gym/AssettoCorsaConfigs/tracks/generate_track.ipynb
to create a new track. This script creates a pickle file with the occupancy grid, downloads the AC reference path, and visualizes the track. Make sure to update the assetto_corsa_gym/AssettoCorsaConfigs/tracks/config.yaml
file.test_client.ipynb
test_gym.ipynb
Experiments and parameters are configured via config.yml
and executed with python train.py
. Optionally, a different config file can be specified using python train.py config=<config_file>
. To enable logging to Weights and Biases, appropriate values should be set in the config file. Each parameter in the config file can be modified directly from the terminal using <field>=<value>
. For instance, to change the car, use AssettoCorsa.car=<car>
.
Train from SAC from Scratch
To train SAC from scratch in Barcelona/F317:
python train.py
To train on other cars and tracks (ensure the car and track are set first in AC):
python train.py AssettoCorsa.track=<track> AssettoCorsa.car=<car>
Example for Monza GT3:
python train.py AssettoCorsa.track=monza AssettoCorsa.car=bmw_z4_gt3
Test a model by loading a checkpoint
python train.py --test --load_path <path_to_model> AssettoCorsa.track=<track> AssettoCorsa.car=<car>
Train SAC from demonstrations using an ensemble of buffers
Update ac_offline_train_paths.yml (see available data in data\paths.yml).
Run:
python train.py load_offline_data=True Agent.use_offline_buffer=True dataset_path=<path_to_dataset>
Currently supported tracks:
ks_barcelona-layout_gp
monza
ks_red_bull_ring-layout_gp
indianapolis_sp
ks_silverstone-gp
To download everything at once (120GB):
git clone https://huggingface.co/datasets/dasgringuen/assettoCorsaGym
# After cloning, delete the .git directory to free up space
To download one track and car combination at a time, run the following replacing
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="dasgringuen/assettoCorsaGym",
repo_type="dataset",
local_dir="AssettoCorsaGymDataSet",
allow_patterns="data_sets/<track>/<car>/*"
)
Hugging Face is currently having some false positives in their dataset checking due to a security issue with pickle files importing numpy:
Detected Pickle imports:
- "numpy.core.multiarray.scalar"
- "numpy.core.multiarray._reconstruct"
- "numpy.dtype"
- "numpy.ndarray"
Hugging Face flags these for security reasons. You can see more about this in the issue here. We plan to convert the files to a safer format like Parquet in the future.
You are very welcome to contribute to this project. Feel free to open an issue or pull request if you have any suggestions or bug reports, but please review our guidelines first. Our goal is to build a codebase that can easily be extended to new environments and tasks, and we would love to hear about your experience!
This project is licensed under the MIT License - see the LICENSE
file for details. Note that the repository relies on third-party code, which is subject to their respective licenses.