Self-Driving Car Engineer Nanodegree Program
-
cmake >= 3.5
-
All OSes: click here for installation instructions
-
make >= 4.1(mac, linux), 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]((https://developer.apple.com/xcode/features/)
- Windows: recommend using MinGW
-
- Run either
install-mac.sh
orinstall-ubuntu.sh
. - If you install from source, checkout to commit
e94b6e1
, i.e.Some function signatures have changed in v0.14.x. See this PR for more details.git clone https://github.com/uWebSockets/uWebSockets cd uWebSockets git checkout e94b6e1
- Run either
-
Ipopt and CppAD: Please refer to this document for installation instructions.
-
Eigen. This is already part of the repo so you shouldn't have to worry about it.
-
Simulator. You can download these from the releases tab.
-
Not a dependency but read the DATA.md for a description of the data sent back from the simulator.
- Clone this repo.
- Make a build directory:
mkdir build && cd build
- Compile:
cmake .. && make
- Run it:
./mpc
.
The docker-compose can run the project into a container and exposes the port required by the simulator to run.
- Clone this repo.
- Build image:
docker-compose build
- Run Container:
docker-compose up
- On code changes repeat steps 2 and 3.
- The MPC is recommended to be tested on examples to see if implementation behaves as desired. One possible example is the vehicle offset of a straight line (reference). If the MPC implementation is correct, it tracks the reference line after some timesteps(not too many).
- The
lake_track_waypoints.csv
file has waypoints of the lake track. This could fit polynomials and points and see of how well your model tracks curve. NOTE: This file might be not completely in sync with the simulator so your solution should NOT depend on it. - For visualization this C++ matplotlib wrapper could be helpful.)
- Tips for setting up your environment are available here
- VM Latency: Some students have reported differences in behavior using VM's ostensibly a result of latency. Please let us know if issues arise as a result of a VM environment.
- You don't have to follow this directory structure, but if you do, your work will span all of the .cpp files here. Keep an eye out for TODOs.
THe model was taken from the Udacity Course material and is shown in the image below:
I choose to use a timestep length of 8 and an elapsed duration of 100 ms. I was able to get better performance with a timestep length of 18 and an elapsed duration of 50 ms, but I wanted to get the model working at an elapsed duration of 100 ms I got a timestep length of 8 by trying longer lengths and finding issues at higher speeds and around curves where the model would predict too far ahead and have a crazy prediction causing an unstable controller. So through iterations of smaller timestep lengths I ended up with a value of 8.
I was able to tune the controller to handle the 100 ms latency. I copied the cost function from the MPC quiz, but added in a penalty for steering at low cross track error this was intended to be able to have a higher cross track error penalty without hunting around the line.