stevanStevic / PID-Control

PID controller in C++ to maneuver the vehicle around the track

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

CarND-Controls-PID

Self-Driving Car Engineer Nanodegree Program


Sumamry

This is a simple C++ implementation of a simple PID controller.

Hyperparameters

The PID controller in this project is used to control steering angle based on cross track error (CTE). However general principle can be used for any control correction (e.g. speed).

It consists of 3 hyperparameters that have differenet relation to CTE used in 3 terms. Terms of the PID controller are explained below:

  • Proportional hyperparameter is mutliplied with CTE which result in sharp angles if CTE is high and gentle is CTE is low. It is responsible of getting the vehicle close to the target path. Without other parameters contoller would just oscillate around reference position and wold not be able to reach it.

  • Integral hyperparameter is multiplied with sum of CTEs over time period. This would smooth the errors caused by biased errors (e.g. steeering drift).

  • Derivative hyperparameter is multiplied with delta CTE. Delta CTE is represented as difference between current nad previous CTE.

Final angle is calculated as a negative sum of these 3 products.

Parameter tuning

There are various methods to tune these parameters Twiddle, SGD, Trial and Error Method and etc. I used manual tuning with Trial and Error Method.

  • Start with setting derivative and integral to zero, and only tune proportional term. Until vehicle has stable oscilating around center of the lane which is reference position tweek the this parameter.

  • Next step is to wweek derivative term to try and smooth out the oscilations of the vehicle. This means fixing overshooting of the reference position.

  • As integral part is used to fix the biases and in the simulation there are none, this parameter is very small. In this concrete project it could be even suppresed by setting it's value to 0.

Final parameters that drove a vehicle in the lane boundaries with decent steering are [P: 0,195, I: 0.0002, D: 2.9].

Dependencies

Fellow students have put together a guide to Windows set-up for the project here if the environment you have set up for the Sensor Fusion projects does not work for this project. There's also an experimental patch for windows in this PR.

Basic Build Instructions

  1. Clone this repo.
  2. Make a build directory: mkdir build && cd build
  3. Compile: cmake .. && make
  4. Run it: ./pid.

Tips for setting up your environment can be found here

Editor Settings

We've purposefully kept editor configuration files out of this repo in order to keep it as simple and environment agnostic as possible. However, we recommend using the following settings:

  • indent using spaces
  • set tab width to 2 spaces (keeps the matrices in source code aligned)

Code Style

Please (do your best to) stick to Google's C++ style guide.

Project Instructions and Rubric

Note: regardless of the changes you make, your project must be buildable using cmake and make!

More information is only accessible by people who are already enrolled in Term 2 of CarND. If you are enrolled, see the project page for instructions and the project rubric.

About

PID controller in C++ to maneuver the vehicle around the track

License:MIT License


Languages

Language:C++ 99.5%Language:Shell 0.3%Language:CMake 0.1%