In order to keep all the assignments in the same repo I created a master CMakeLists which splits the repo into subprojects and compiles them individually but using a shared build folder optimizing the usage of resources.
For building the projects the use of CMake Tools extension for VSCode or other IDEs should be enough, if you don't have the extension launch cmake using the CMakeLists in the repo root folder.
For Assignment 1 the datasets must be inside a folder called datasets that you must create inside the repo root folder.
In the first part of the assignment when we do the ransac i left between comment marker a whole part that implements a Vertical Plane RANSAC, this implementation was made in order to remove the building walls at the side of the street.
The function that tries to label some veichles as 2W Veichles (2 Wheels Veichles) is based on calculating the volume of the cluster and comparing it to the average volume of a 2W Veichle.
In this assigment inside Tracker class you'll find a #define STABILIZER_ON this will enable a part of the data assosiacion method that will try to stabilize the tracking by implementing a recovery policy for the tracklets (based on tests on the dataset it seems to work).
If you comment #define STABILIZER_ON the KF will work without stabilization and will need a bit of thresholds tuning.
It is possible to implement the yaw angle only if we add to the dataset detections from a radar (which can return yaw angle) and trough Sensor Fusion and an Extended Kalman Filter elaborate all the data keeping also track of the yaw angle.
In my opinion keeping track of yaw angle would be possible even without a radar but only in a synthetic way. I'm talking about setting a "North" inside the rendered 3D world and using the movement direction of each tracked entity in order to obtain the yaw angle. The only problem is that this method in my opinion is not a viable alternative because we will be basing our predictions on synthetic data which invalidates purpose of the Kalman Kalman filter which is extimating the position based on a real input.