GranOO  3.0
A robust and versatile workbench to build 3D dynamic simulations based on the Discrete Element Method
Pid.hpp
Go to the documentation of this file.
1 // This file is part of GranOO, a workbench for DEM simulation.
2 //
3 // Author(s) : - Damien Andre IRCER/UNILIM, Limoges France
4 // <damien.andre@unilim.fr>
5 // - Jean-luc Charles Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
6 // <jean-luc.charles@ensam.eu>
7 // - Jeremie Girardot Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
8 // <jeremie.girardot@ensam.eu>
9 // - Cedric Hubert LAMIH/UPHF, Valenciennes France
10 // <cedric.hubert@uphf.fr>
11 // - Ivan Iordanoff Arts et Metiers ParisTech, CNRS, I2M, Bordeaux France
12 // <ivan.iordanoff@ensam.eu>
13 //
14 // Copyright (C) 2008-2019 D. Andre, JL. Charles, J. Girardot, C. Hubert, I. Iordanoff
15 //
16 // This program is free software: you can redistribute it and/or modify
17 // it under the terms of the GNU General Public License as published by
18 // the Free Software Foundation, either version 3 of the License, or
19 // (at your option) any later version.
20 //
21 // This program is distributed in the hope that it will be useful,
22 // but WITHOUT ANY WARRANTY; without even the implied warranty of
23 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 // GNU General Public License for more details.
25 //
26 // You should have received a copy of the GNU General Public License
27 // along with this program. If not, see <http://www.gnu.org/licenses/>.
28 //
29 
30 
31 #ifndef _GranOO_Math_Function_Pid_hpp_
32 #define _GranOO_Math_Function_Pid_hpp_
33 
36 
37 namespace GranOO3
38 {
39  namespace Math
40  {
41  //---------------------------------------------------//
42  // Pid: A proportional-integral-derivative controller
43  // directly inspired from the sources of Bradley J. Snyder <snyder.bradleyj@gmail.com>
44  // Kp - proportional gain
45  // Ki - Integral gain
46  // Kd - derivative gain
47  // dt - loop interval time
48  // max - maximum value of manipulated variable
49  // min - minimum value of manipulated variablef(x) = [Ax] & [Cste] //
50  //---------------------------------------------------//
51 
52 
53  class Pid : public FunctionT<Pid>
54  {
55  public:
56  static std::string class_ID() {return "Pid";}
57 
58  Pid();
59  Pid(const std::string& symbol, const std::string desc = "");
60  Pid(const double& x, double target, double dt, double max, double min, double Kp, double Kd, double Ki);
61  ~Pid();
62 
63  GRANOO_ACCESS(target, double, _target);
64  GRANOO_ACCESS(dt , double, _dt );
65  GRANOO_ACCESS(max , double, _max );
66  GRANOO_ACCESS(min , double, _min );
67  GRANOO_ACCESS(Kp , double, _Kp );
68  GRANOO_ACCESS(Kd , double, _Kd );
69  GRANOO_ACCESS(Ki , double, _Ki );
70 
71  void parse_xml(const TiXmlElement* el, const std::string& AttributeName);
72 
73  double operator()();
74  double operator()(const double& x, const double& target);
75  double operator()(const double& x, const double& target, const double& dt, const double& max, const double& min, const double& Kp, const double& Kd, const double& Ki);
76 
77 
78 
79  private:
80  Pid(const Pid&) = delete;
81  Pid& operator=(const Pid&) = delete;
82 
83  private:
84  const double* _x;
85  double _target;
86  double _dt;
87  double _max;
88  double _min;
89  double _Kp;
90  double _Kd;
91  double _Ki;
92  double _pre_error;
93  double _integral;
94 
95  };
96  }
97 }
98 #endif
Definition: FunctionT.hpp:48
Definition: Pid.hpp:54
Pid()
Definition: Pid.cpp:39
double _pre_error
Definition: Pid.hpp:92
const double * _x
Definition: Pid.hpp:84
Pid(const Pid &)=delete
double _dt
Definition: Pid.hpp:86
double _target
Definition: Pid.hpp:85
double _integral
Definition: Pid.hpp:93
double operator()()
Definition: Pid.cpp:74
double _Kd
Definition: Pid.hpp:90
static std::string class_ID()
Definition: Pid.hpp:56
~Pid()
Definition: Pid.cpp:54
double _min
Definition: Pid.hpp:88
double _Kp
Definition: Pid.hpp:89
void parse_xml(const TiXmlElement *el, const std::string &AttributeName)
Definition: Pid.cpp:58
double _Ki
Definition: Pid.hpp:91
Pid & operator=(const Pid &)=delete
double _max
Definition: Pid.hpp:87
static const char * desc
Definition: Between2SetOf.cpp:37
Definition: Common.hpp:198
T min(const T v0, const T v1)
Definition: Exprtk.hpp:1456
T max(const T v0, const T v1)
Definition: Exprtk.hpp:1463
x y t t *t x y t t t x y t t t x *y t *t t x *y t *t t x y t t t x y t t t x(y+z)