CarND-Controls-MPC
Self-Driving Car Engineer Nanodegree Program
Note:
This repo has been modified by olala7846@gmail.com, for the original repo, please reference Udacity's github
Dependencies
- cmake >= 3.5
- All OSes: click here for installation instructions
- make >= 4.1
- 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
- uWebSockets
- 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
- Fortran Compiler
- Mac:
brew install gcc
(might not be required) - Linux:
sudo apt-get install gfortran
. Additionall you have also have to install gcc and g++,sudo apt-get install gcc g++
. Look in this Dockerfile for more info.
- Mac:
- Ipopt
- Mac:
brew install ipopt
- Linux
- You will need a version of Ipopt 3.12.1 or higher. The version available through
apt-get
is 3.11.x. If you can get that version to work great but if not there's a scriptinstall_ipopt.sh
that will install Ipopt. You just need to download the source from the Ipopt releases page or the Github releases page. - Then call
install_ipopt.sh
with the source directory as the first argument, ex:bash install_ipopt.sh Ipopt-3.12.1
.
- You will need a version of Ipopt 3.12.1 or higher. The version available through
- Windows: TODO. If you can use the Linux subsystem and follow the Linux instructions.
- Mac:
- CppAD
- Mac:
brew install cppad
- Linux
sudo apt-get install cppad
or equivalent. - Windows: TODO. If you can use the Linux subsystem and follow the Linux instructions.
- Mac:
- 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.
Basic Build Instructions
- Clone this repo.
- Make a build directory:
mkdir build && cd build
- Compile:
cmake .. && make
- Run it:
./mpc
.
Reports
The Model
- The state is modele by a vector of x, y, psi, v, the first 2 terms (x, y) are the 2D coordinate of car in the coordinate space, and psi is the facing of the car to the angle of the x-axis and v is the absolute speed of car in the modeled state.
- Errors CTE(cross track error) and E-Psi(psi error) are the difference value the the reference trajectory(which is a fitted polynomial of degree 3).
- Actuators delta(steering angle) and a(throttle) are modeled as the angular acceleration and acceleration, but notice that the real angular acceleration should be
double d_psi = v / Lf * delta * dt
Time step Length and Elapsed Duration (N & dt)
- T(The prediction horizon) equals to N(steps to predict) multiplies dt(time elapse per step)
- Although theoretically we want T to be as large as possible, but since we only fits the track by 6 points with a degree=3 polynomial and normally the environments change too much during time for our car to predict, it doesn't make sense to have a very large T.
- We normally want
dt
to be as small as possible, but the cumputational time increases asdt
decreases andN
increases. So after some trial and error, I ended up picking aT = 1.5 seconds
wheredt=0.08 (sec)
andN=15 (steps)
.