HUSSAR ("hoch-effiziente and sensor-akkurate Radar Simulation") is a Radar simulation research project funded by RWTÜV Stiftung.
The goal of this project is to transfer ideas from Light Transport Simulation to Radar Simulation, with focus on:
- Accurate models suitable for automotive radar (FMCW Radar in 77 GHz band)
- Effective sampling strategies (such as low-discrepancy sampling, path guiding etc.)
- Efficient implementation (in particular using hardware accelerated ray tracing)
This repository contains the authors implementation that was developed as part of the project (in particular, libhussar). A formal paper outlining and properly evaluating our algorithm is currently still in the works.
The implementation is split up into several libraries and applications.
Note that we do not currently provide any front-end for reading scene descriptions from files. Instead, we provide libraries and example code that can be used to easily write custom simulators that are tailored to the user's particular use-case. To this end, please have a look at the examples in the examples
suite, which serve as a good starting point for writing custom simulators.
A common library that all other libraries and applications depend on. Provides fundamental data structures, physical units and constants, as well as equations for frequency-modulated continuous-wave (FMCW) Radar.
A utility that can communicate with Texas Instruments' DCA1000EVM
and can parse the raw Radar signals streamed by it.
This library is not required for simulation, but can be used to capture real world measurements from Texas Instruments' AWR
sensor family for evaluation purposes.
The actual simulation library.
This implements our Monte Carlo based Radar simulation algorithm, which can be executed both on the CPU as well as Nvidia GPUs.
An alternative simulation library and visualizer for two dimensional simulations.
This application serves as playground for research ideas, which can often times be more easily verified and evaluated in a lower dimensional setting
Provides a graphical user interface to do experiments with both data capture (using libawrcapture
) and simulation (using libhussar
).
It also contains code to interface with the stepper motors attached to the Arduino in our measurement device.
Command-line applications that utilize libhussar
to output simulated Radar signals for different test cases.
These applications are a great starting point for anyone interested in using our libraries.
Apart from the implementation of our algorithm, this repository also includes some additional resources, in particular:
This directory contains models of our 3d printed parts that constitute our measurement setups.
Some of our measurements, in particular those of dihedral reflectors, can be found in this directory. There is also a short evaluation and comparison with commercial software. A full evaluation with more complex works and proper measurements is currently still in the works.
This software is written entirely in C++ and uses CMake as build system. It has been tested on Ubuntu 18 (with g++ 8) and macOS 10.15 (with clang 12). Windows is currently not yet supported.
We require the following packages to be installed.
Package | Example command using apt |
---|---|
Eigen3 | apt install libeigen3-dev |
The following dependencies are optional, but recommended:
Package | Purpose | Installation |
---|---|---|
fftw3 | FFT in visualizer | apt install libfftw3-dev |
glfw3 | visualizer | apt install libglfw3-dev |
SDL2 | hussar2d | apt install libsdl2-dev |
embree3 | Required for simulations on CPU | Installation instructions |
OptiX 7 | Required for simulations on GPU | Installation instructions |
If you want to build this project with GPU support, please specify the path to your OptiX installation by passing -DHUSSAR_OPTIX7_PATH=path/to/optix
to cmake
.
Please note that some dependencies are fetched as git submodules. If you have pulled this repository without submodules, you can fetch them afterwards by running:
git submodule update --init --recursive
Make sure your compiler supports #include <filesystem>
.
For GCC, this requires g++-8 to be installed, which you can configure to be used in CMake by passing -DCMAKE_CXX_COMPILER=g++-8
to cmake
.
If you experience a problem with dropped packets (see netstat -suna
),
then you need to raise the kernel receive buffer:
su -
echo 'net.core.rmem_default=16777216' >> /etc/sysctl.conf
echo 'net.core.rmem_max=16777216' >> /etc/sysctl.conf
sysctl --system # reload configuration