/CarND-MPC-Project

CarND Term 2 Model Predictive Control (MPC) Project

Primary LanguageC++

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
  • gcc/g++ >= 5.4
  • uWebSockets
    • Run either install-mac.sh or install-ubuntu.sh.
    • If you install from source, checkout to commit e94b6e1, i.e.
      git clone https://github.com/uWebSockets/uWebSockets
      cd uWebSockets
      git checkout e94b6e1
      
      Some function signatures have changed in v0.14.x. See this PR for more details.
  • 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.
  • 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 script install_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.
    • Windows: TODO. If you can use the Linux subsystem and follow the Linux instructions.
  • 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.
  • 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

  1. Clone this repo.
  2. Make a build directory: mkdir build && cd build
  3. Compile: cmake .. && make
  4. 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 as dt decreases and N increases. So after some trial and error, I ended up picking a T = 1.5 seconds where dt=0.08 (sec) and N=15 (steps).

The Results

IMAGE ALT TEXT HERE