PID_Controller.cpp
Go to the documentation of this file.
1 /*+-------------------------------------------------------------------------+
2  | MultiVehicle simulator (libmvsim) |
3  | |
4  | Copyright (C) 2014-2024 Jose Luis Blanco Claraco |
5  | Copyright (C) 2017 Borys Tymchenko (Odessa Polytechnic University) |
6  | Distributed under 3-clause BSD License |
7  | See COPYING |
8  +-------------------------------------------------------------------------+ */
9 
10 #include <mvsim/PID_Controller.h>
11 
12 using namespace mvsim;
13 
15 double PID_Controller::compute(double err, double dt)
16 {
17  e_n_2 = e_n_1;
18  e_n_1 = e_n;
19  e_n = err;
20 
21  double output =
22  lastOutput + KP * (e_n - e_n_1) + KI * e_n * dt + KD * (e_n - 2 * e_n_1 + e_n_2) / dt;
23 
24  // prevent integral windup
25  if (max_out != 0.0 && (output < -max_out || output > max_out))
26  {
27  output -= KI * e_n * dt;
28  }
29 
30  lastOutput = output;
31 
32  if (max_out != 0.0)
33  {
34  if (output < -max_out) output = -max_out;
35  if (output > max_out) output = max_out;
36  }
37 
38  return output;
39 }
40 
42 {
43  lastOutput = 0;
44  e_n = 0, e_n_1 = 0, e_n_2 = 0;
45 }
mvsim
Definition: Client.h:21
mvsim::PID_Controller::e_n_2
double e_n_2
Definition: PID_Controller.h:30
mvsim::PID_Controller::KP
double KP
Definition: PID_Controller.h:18
mvsim::PID_Controller::compute
double compute(double err, double dt)
Definition: PID_Controller.cpp:15
mvsim::PID_Controller::KI
double KI
Definition: PID_Controller.h:18
mvsim::PID_Controller::KD
double KD
Definition: PID_Controller.h:18
mvsim::PID_Controller::reset
void reset()
Definition: PID_Controller.cpp:41
mvsim::PID_Controller::lastOutput
double lastOutput
Definition: PID_Controller.h:29
mvsim::PID_Controller::e_n
double e_n
Definition: PID_Controller.h:30
mvsim::PID_Controller::e_n_1
double e_n_1
Definition: PID_Controller.h:30
mvsim::PID_Controller::max_out
double max_out
For clamping (0=no clamp)
Definition: PID_Controller.h:19
PID_Controller.h


mvsim
Author(s):
autogenerated on Wed May 28 2025 02:13:08