Fast drone sim in python (currently linear quadrotors only). Vectorized on CPU cranking about 5M timesteps per second on a laptop i7. Also vectorized for GPU with up to 250M timesteps per second (RTX A1000), but if the state at every time step needs to be logged and be available to the CPU after simulation, then that number reduces to 20M or so.
Visuals in THREE.js with a websocket connection, inspired by the Learning to Fly in Seconds paper (https://arxiv.org/abs/2311.13081).
This gif shows the visualization of 512 quadrotors, although 8192 were simulated on a RTX A1000 graphics card.
Till Blaha - @tblaha
Ubuntu 22.04 tested only. Visuals require docker.
Python dependencies can be installed with:
pip install -r requirements.txt
Cuda can be a hassle to install. For Ubuntu 22.04 on my machine, the following worked, but there may be (must be!) easier ways, perhaps with a different version.
- Delete all current nvidia things
sudo apt purge "nvidia-*" "libnvidia-*" "cuda-*" "linux-modules-nvidia-*"
sudo apt autoremove
- Make sure that "Using X.Org X server" is selected in "Software & Updates" > "Additional Drivers"
- Compile the latests 550 driver from scratch for your kernel (
6.1.0-1036-oem
in my case)
sudo apt install gcc-12
sudo update-alternatives --install /usr/bin/cc cc /usr/bin/x86_64-linux-gnu-gcc-12 100
- download the runscript from https://www.nvidia.com/download/driverResults.aspx/218826/en-us/. Terminate x-server and run
chmod +x ./NVIDIA-Linux-x86_64-550.54.14.run
sudo ./NVIDIA-Linux-x86_64-550.54.14.run # say yes to everything
- reboot and do ONLY the "Base Installer" step of https://developer.nvidia.com/cuda-downloads?target_os=Linux&target_arch=x86_64&Distribution=Ubuntu&target_version=22.04&target_type=deb_network
- finally, install cuda and some other things
sudo apt install cuda-driver-550 nvidia-compute-utils-550
Build docker image of the webserver for the visuals
docker build -t devserver . -f dockerfile
Run it with
docker run -it --net host -v ./static:/usr/app/static devserver
Open the URL reported by the docker container in a WebGL capable browser.
ipython -i sim.py
Check options at the top of sim.py
for configuration.
.
├── benchmarks/ # unrelated code for testing numba/cuda
├── libs/ # math functions, compute kernels and visualization interface
├── static/ # the visualization frontend code
├── dockerfile # sets up a Vite development webserver to host the visuals
├── crafts.py # contains the drone definitions (currently only quadrotor)
├── sim.py # simulation main function
├── LICENSE
├── README.md
└── requirements.txt
Copyright (C) 2024 Till Blaha -- TU Delft
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see https://www.gnu.org/licenses/.
Eschmann, Albani and Loianno, "Learning to Fly in Seconds", 2023, arXiv 2311.13081