In this project an Unscented Kalman Filter is used to estimate the state of a moving object of interest with noisy lidar and radar measurements.
This project involves the Term 2 Simulator which can be downloaded here
Required tools are:
This repository includes two files that can be used to set up and install uWebSocketIO for either Linux or Mac systems. For windows you can use either Docker, VMware, or even Windows 10 Bash on Ubuntu to install uWebSocketIO. Please see this concept in the classroom for the required version and installation scripts.
Once the install for uWebSocketIO is complete, the main program can be built and run by doing the following from the project top directory.
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”]
I tried to stick to the Google’s C++ style guide.
In order to check the guidelines I installed cpplint using
pip install cpplint
The simulator provides noisy lidar and radar measurements which are shown as blue and red dots. The position that is calculated by the kalman filter is displayed as green dots.
The results for dataset 1 are shown in the following image
The results for dataset 2 are shown in the following image
For further reading and to dive deeper into the concept of UKF and basic filtering I suggest these materials which I enjoyed reading and watching:
If you need math behind the Kalman Filter then this youtube series is awesome: THE KALMAN FILTER
This interactive tutorial is very helpful to visualize and have a better grasp of workings in this area: The Extended Kalman Filter: An Interactive Tutorial for Non-Experts
If you are looking for what other filters might be apart from EKF and UKF then you can check this. It’s little math heavy and based on Matlab: Optimal Filtering with Kalman Filters and Smoothers
A nice explanation of choosing between EKF and UKF and then it’s implementation guide. It’s in two parts: Understanding Nonlinear Kalman Filters Part I
And Part II
A Python library for Kalman filtering which you can check out: pykalman
The UKF paper: The Unscented Kalman Filter for Nonlinear Estimation