The following project is a part of Udacity’s Self Driving car engineering NanoDegree program. The aim of project is to successfully implement Kalman filter in C++ on LIDAR and RADAR data to obtain a smooth curvature of the car in the simulator.
Passing the project requires obtaining Root Mean Square Error values that are lower than the tolerance outlined in the project rubric.
Name of Folder | Contains |
---|---|
/assets | Resources for README |
/cmake-build-release | Build files of the project |
/data | LIDAR and RADAR data |
/src | source file for the project in c++ |
CMakeList.text | Cmake list to build the project |
install-linux.sh | setting up web sockets on Linux systems |
This project involves the Term 2 Simulator which can be downloaded here. Which is also included in the repository for Linux.
- cmake >= 3.5
- All OSes: click here for installation instructions
- make >= 4.1 (Linux, Mac), 3.81 (Windows)
- Linux: make is installed by default on most Linux distros
- Mac: install Xcode command line tools to get make
- Windows: Click here for installation instructions
- gcc/g++ >= 5.4
- Linux: gcc / g++ is installed by default on most Linux distros
- Mac: same deal as make - install Xcode command line tools
- Windows: recommend using MinGW
- Clone this repo.
- Use the install.sh scripts for installing uWebSocketIO
- Make a build directory:
mkdir build && cd build
- Compile:
cmake .. && make
- On windows, you may need to run:
cmake .. -G "Unix Makefiles" && make
- On windows, you may need to run:
- Run it:
./ExtendedKF
- Run the simulator.
- Select a low resolution.
- Press start.
Here is the main protocol that main.cpp uses for uWebSocketIO in communicating with the simulator.
INPUT: values provided by the simulator to the c++ program
["sensor_measurement"] => the measurement that the simulator observed (either lidar or radar)
OUTPUT: values provided by the c++ program to the simulator
["estimate_x"] <= kalman filter estimated position x
["estimate_y"] <= kalman filter estimated position y
["rmse_x"]
["rmse_y"]
["rmse_vx"]
["rmse_vy"]
Rubric Points
Here I will consider the rubric points individually and describe how I addressed each point in my implementation.
The given README.md file is an extensive writeup of the project. It includes the code folder architecture, resources, test output, Jupyter Notebook etc. For any questions, please contact
Shivam Bhardwaj
LinkedIn Instagram Facebook Github
Mail to [email protected]
As you can see in the image above my RMSE is well below <= [.11, .11, 0.52, 0.52] for X, Y, VX and VY respectively.
To begin with I would like to thank Udacity team for compiling everything in such an amazing tutorial. Following are my take on the overall project.
-
On my laptop, the RMSE values in the simulator are not displayed when I run the simulator in high resolution. As you can see below, the area under RMSE is blank
-
I tested my code on Jetbrains' Clion, and it worked flawlessly.
-
Steps were taken to avoid repeated calculations for example as shown below (tools.cpp)
-
Instead of initializing EKF vales to 0, by changing them performance is improved as explained in the lectures.
The code was tested on the following specifications
- CPU:
Intel(R) Core(TM) i9-8950HK CPU @ 4.8 Ghz
- GPU:
Nvidia GeForce GTX 1050 Ti Mobile
- OS:
Ubuntu 16.04.6 LTS (Xenial Xerus)
- Kernal:
4.15.0-48-generic