Ignition Math

API Reference

6.9.3~pre2
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 IGNITION_MATH_PID_HH_
18 #define IGNITION_MATH_PID_HH_
19 
20 #include <chrono>
21 #include <ignition/math/Helpers.hh>
22 #include <ignition/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 
167  public: double Update(const double _error,
168  const std::chrono::duration<double> &_dt);
169 
172  public: void SetCmd(const double _cmd);
173 
176  public: double Cmd() const;
177 
182  public: void Errors(double &_pe, double &_ie, double &_de) const;
183 
187  public: PID &operator=(const PID &_p);
188 
190  public: void Reset();
191 
193  private: double pErrLast = 0.0;
194 
196  private: double pErr = 0.0;
197 
199  private: double iErr = 0.0;
200 
202  private: double dErr = 0.0;
203 
205  private: double pGain;
206 
208  private: double iGain = 0.0;
209 
211  private: double dGain = 0.0;
212 
214  private: double iMax = -1.0;
215 
217  private: double iMin = 0.0;
218 
220  private: double cmd = 0.0;
221 
223  private: double cmdMax = -1.0;
224 
226  private: double cmdMin = 0.0;
227 
229  private: double cmdOffset = 0.0;
230  };
231  }
232  }
233 }
234 #endif
Generic PID controller class. Generic proportional-integral-derivative controller class that keeps tr...
Definition: PID.hh:38
Definition: Angle.hh:42