Self-Driving Car Engineer Nanodegree Program
In this project I utilize a kalman filter to estimate the state of a moving object of interest with noisy lidar and radar measurements.
Much of the code here is very similar to that developed over the course of the first few lessons in Term 2 on the EKF and sensor fusion for lidar and radar sensors. However, as a result, the FusionEKF
and KalmanFilter
objects are tightly coupled. A better approach would be use Sensor
and MotionModel
base classes providing an interface with appropriate methods for calculating the measurment update and motion prediction operators given a state vector. This would enable easy generalization to more than two sensors. As it stands, there are separate KalmanFilter::Update
and KalmanFilter::UpdateEKF
methods for the laser and radar sensors respectively.
Results are shown below. Points in blue and red are sensor data, while points in green are the smoothed trajectory (position portion only).
While the achived RMSE on the figure-8 dataset is below the required threshold, I think there might be some turning overshoot. This should be rectified with the use of a more realistic (nonlinear) motion model.
This project uses the Term 2 Simulator which can be downloaded here
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.
- mkdir build
- cd build
- cmake ..
- make
- ./ExtendedKF
Tips for setting up your environment can be found here
Note that the primary files that were modified to accomplish the project are src/FusionEKF.cpp, src/FusionEKF.h, kalman_filter.cpp, kalman_filter.h, tools.cpp, and tools.h
- 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.
- 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
This is optional!
If you'd like to generate your own radar and lidar data, see the utilities repo for Matlab scripts that can generate additional data.
More information is only accessible by people who are already enrolled in Term 2 of CarND. If you are enrolled, see the project resources page for instructions and the project rubric.
-
Students have reported rapid expansion of log files when using the term 2 simulator. This appears to be associated with not being connected to uWebSockets. If this does occur, please make sure you are conneted to uWebSockets. The following workaround may also be effective at preventing large log files.
- create an empty log file
- remove write permissions so that the simulator can't write to log