Self-Driving Car Engineer Nanodegree Program
This project utilizes a kalman filter to estimate the state of a moving object of interest with noisy lidar and radar measurements.
The ExtendedKalmanFilter program was run on both datasets. The results are below.
- The helper functions for the program were tested extensively, the program itself could use more unit testing.
Here is the main protcol 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"]
- 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
- pthread library for spdlog
- Clone this repo.
- 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
One change was made to CMakeLists.txt to support spdlog, a C++ logging library that eliminated the need for print statement debugging.
The code was developed using the Catch testing framework.
-
Bash script was written to run all of the tests. It completes the following steps.
-
First compile tests_main.cpp in order to not have to recompile
$ g++ --std=c++11 tests_main.cpp -c
- Next compile tests
$ g++ --std=c++11 tests_main.o test_rmse.cpp -o test_rmse
$ ./test_rmse -r compact
- If changes are made to the test file, tests_main does not need to be recompiled