Unscented Kalman Filter Project
This project implements Unscented Kalman Filter to estimate the state of a moving object of interest with noisy lidar and radar measurements.
Implementation requires obtaining RMSE values that are lower that the tolerance outlined in the specification.
Usage
./UnscentedKF [-R] [-L]
-R
- use only radar measurements-L
- use only laser measurements- default - use both types of measurement
Dependencies
Runtime
Tools
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, clang- 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
Libraries not included into the project
uWebSocketIO
== v0.13.0- Ubuntu/Debian: the repository includes
install-ubuntu.sh
that can be used to set up and installuWebSocketIO
- Mac: the repository includes
install-mac.sh
that can be used to set up and installuWebSocketIO
- Windows: use either Docker, VMware, or even Windows 10 Bash on Ubuntu
- Ubuntu/Debian: the repository includes
Libraries included into the project
JSON for Modern C++
- JSON parserCatch2
- Unit-testing frameworkProgramOptions.hxx
- Single-header program options parsing library for C++11Eigen
- C++ template library for linear algebra: matrices, vectors, numerical solvers, and related algorithms
Build
- Clone this repo.
mkdir build
cd build
cmake .. -G "Unix Makefiles"
make
make test
- optional
Protocol
The project uses uWebSocketIO
request-response protocol to communicate 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"]
TODOs
- Experiment more with Kalman filter state initialization. Eg. use truncated normal distribution with 0 mean to speed, turn rate, and acceleration
- Add more unit/functional tests