Gazebo Math

API Reference

6.16.0
gz/math/PID.hh
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2016 Open Source Robotics Foundation
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16 */
17 #ifndef GZ_MATH_PID_HH_
18 #define GZ_MATH_PID_HH_
19 
20 #include <chrono>
21 #include <gz/math/Helpers.hh>
22 #include <gz/math/config.hh>
23 
24 namespace ignition
25 {
26  namespace math
27  {
28  // Inline bracket to help doxygen filtering.
29  inline namespace IGNITION_MATH_VERSION_NAMESPACE {
30  //
37  // cppcheck-suppress class_X_Y
38  class IGNITION_MATH_VISIBLE PID
39  {
57  public: PID(const double _p = 0.0,
58  const double _i = 0.0,
59  const double _d = 0.0,
60  const double _imax = -1.0,
61  const double _imin = 0.0,
62  const double _cmdMax = -1.0,
63  const double _cmdMin = 0.0,
64  const double _cmdOffset = 0.0);
65 
67  public: ~PID() = default;
68 
86  public: void Init(const double _p = 0.0,
87  const double _i = 0.0,
88  const double _d = 0.0,
89  const double _imax = -1.0,
90  const double _imin = 0.0,
91  const double _cmdMax = -1.0,
92  const double _cmdMin = 0.0,
93  const double _cmdOffset = 0.0);
94 
97  public: void SetPGain(const double _p);
98 
101  public: void SetIGain(const double _i);
102 
105  public: void SetDGain(const double _d);
106 
109  public: void SetIMax(const double _i);
110 
113  public: void SetIMin(const double _i);
114 
117  public: void SetCmdMax(const double _c);
118 
121  public: void SetCmdMin(const double _c);
122 
126  public: void SetCmdOffset(const double _c);
127 
130  public: double PGain() const;
131 
134  public: double IGain() const;
135 
138  public: double DGain() const;
139 
142  public: double IMax() const;
143 
146  public: double IMin() const;
147 
150  public: double CmdMax() const;
151 
154  public: double CmdMin() const;
155 
158  public: double CmdOffset() const;
159 
171  public: double Update(const double _error,
172  double _errorRate,
173  const std::chrono::duration<double> &_dt);
174 
182  public: double Update(const double _error,
183  const std::chrono::duration<double> &_dt);
184 
187  public: void SetCmd(const double _cmd);
188 
191  public: double Cmd() const;
192 
197  public: void Errors(double &_pe, double &_ie, double &_de) const;
198 
202  public: PID &operator=(const PID &_p);
203 
205  public: void Reset();
206 
208  private: double pErrLast = 0.0;
209 
211  private: double pErr = 0.0;
212 
214  private: double iErr = 0.0;
215 
217  private: double dErr = 0.0;
218 
220  private: double pGain;
221 
223  private: double iGain = 0.0;
224 
226  private: double dGain = 0.0;
227 
229  private: double iMax = -1.0;
230 
232  private: double iMin = 0.0;
233 
235  private: double cmd = 0.0;
236 
238  private: double cmdMax = -1.0;
239 
241  private: double cmdMin = 0.0;
242 
244  private: double cmdOffset = 0.0;
245  };
246  }
247  }
248 }
249 #endif
Generic PID controller class. Generic proportional-integral-derivative controller class that keeps tr...
Definition: gz/math/PID.hh:39
double Cmd() const
Return current command for this PID controller.
void SetCmdOffset(const double _c)
Set the offset value for the command, which is added to the result of the PID controller.
void SetIMax(const double _i)
Set the integral upper limit.
PID & operator=(const PID &_p)
Assignment operator.
void Reset()
Reset the errors and command.
void SetPGain(const double _p)
Set the proportional Gain.
void Init(const double _p=0.0, const double _i=0.0, const double _d=0.0, const double _imax=-1.0, const double _imin=0.0, const double _cmdMax=-1.0, const double _cmdMin=0.0, const double _cmdOffset=0.0)
Initialize PID-gains and integral term limits:[iMax:iMin]-[I1:I2].
void Errors(double &_pe, double &_ie, double &_de) const
Return PID error terms for the controller.
double IGain() const
Get the integral Gain.
void SetIGain(const double _i)
Set the integral Gain.
void SetCmdMax(const double _c)
Set the maximum value for the command.
void SetCmdMin(const double _c)
Set the minimum value for the command.
void SetCmd(const double _cmd)
Set current target command for this PID controller.
double Update(const double _error, double _errorRate, const std::chrono::duration< double > &_dt)
Update the Pid loop with nonuniform time step size.
double Update(const double _error, const std::chrono::duration< double > &_dt)
Update the Pid loop with nonuniform time step size.
~PID()=default
Destructor.
double CmdMin() const
Get the minimun value for the command.
double DGain() const
Get the derivative Gain.
void SetIMin(const double _i)
Set the integral lower limit.
void SetDGain(const double _d)
Set the derivative Gain.
double CmdOffset() const
Get the offset value for the command.
double CmdMax() const
Get the maximum value for the command.
double IMax() const
Get the integral upper limit.
double IMin() const
Get the integral lower limit.
PID(const double _p=0.0, const double _i=0.0, const double _d=0.0, const double _imax=-1.0, const double _imin=0.0, const double _cmdMax=-1.0, const double _cmdMin=0.0, const double _cmdOffset=0.0)
Constructor, zeros out Pid values when created and initialize Pid-gains and integral term limits:[iMa...
double PGain() const
Get the proportional Gain.
Definition: gz/math/AdditivelySeparableScalarField3.hh:28