Giter Club home page Giter Club logo

pid-control's Introduction

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.

pid-control's People

Contributors

domluna avatar baumanab avatar stevanstevic avatar mvirgo avatar swwelch avatar davidobando avatar citlaligm avatar htuennermann avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.