YARP
Yet Another Robot Platform
ControlBoardPid.cpp
Go to the documentation of this file.
1 /*
2  * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3  * SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
8 
9 using namespace yarp::dev;
10 
11 Pid::Pid(double p, double d, double i,
12  double intm, double sc, double omax):
13  kp(p),
14  kd(d),
15  ki(i),
16  max_int(intm),
17  scale(sc),
18  max_output(omax),
19  offset(0),
20  stiction_up_val(0),
21  stiction_down_val(0),
22  kff(0)
23 {}
24 
25 Pid::Pid(double p, double d, double i,
26  double intm, double sc, double omax, double st_up, double st_down, double ff) :
27  kp(p),
28  kd(d),
29  ki(i),
30  max_int(intm),
31  scale(sc),
32  max_output(omax),
33  offset(0),
34  stiction_up_val(st_up),
35  stiction_down_val(st_down),
36  kff(ff)
37 {}
38 
39 Pid::~Pid() = default;
40 
42 {
43  clear();
44 }
45 
46 void Pid::clear()
47 {
48  kp = 0;
49  kd = 0;
50  ki = 0;
51  scale = 0;
52  max_int = 0;
53  max_output = 0;
54  offset = 0;
55  stiction_up_val = 0;
57  kff = 0;
58 }
59 
60 void Pid::setKp(double p)
61 {
62  kp=p;
63 }
64 
65 void Pid::setKi(double i)
66 {
67  ki=i;
68 }
69 
70 void Pid::setKd(double d)
71 {
72  kd=d;
73 }
74 
75 void Pid::setMaxInt(double m)
76 {
77  max_int=m;
78 }
79 
80 void Pid::setScale(double sc)
81 {
82  scale=sc;
83 }
84 
85 void Pid::setMaxOut(double m)
86 {
87  max_output=m;
88 }
89 
90 void Pid::setOffset(double o)
91 {
92  offset=o;
93 }
94 
95 void Pid::setStictionValues(double up_value, double down_value)
96 {
97  stiction_up_val=up_value;
98  stiction_down_val=down_value;
99 }
100 
101 void Pid::setKff(double ff)
102 {
103  kff=ff;
104 }
105 
106 bool Pid::operator==(const yarp::dev::Pid &p) const
107 {
108 
109  if (kp != p.kp) {
110  return false;
111  }
112 
113  if (ki != p.ki) {
114  return false;
115  }
116 
117  if (kd != p.kd) {
118  return false;
119  }
120 
121  if (max_output != p.max_output) {
122  return false;
123  }
124 
125  if (max_int != p.max_int) {
126  return false;
127  }
128 
129  if (kff != p.kff) {
130  return false;
131  }
132 
133  if (offset != p.offset) {
134  return false;
135  }
136 
137  if (scale != p.scale) {
138  return false;
139  }
140 
142  return false;
143  }
144 
145  if (stiction_up_val != p.stiction_up_val) {
146  return false;
147  }
148 
149  return true;
150 
151 }
define control board standard interfaces
Contains the parameters for a PID.
double kd
derivative gain
double scale
scale for the pid output
double offset
pwm offset added to the pid output
double stiction_down_val
down stiction offset added to the pid output
void clear()
Set all pid parameters to zero.
double stiction_up_val
up stiction offset added to the pid output
double max_output
max output
void setKp(double p)
Set proportional gain.
~Pid()
Destructor.
Pid()
Default Constructor.
void setMaxOut(double m)
Set max output value for the pid.
double kff
feedforward gain
void setOffset(double o)
Set offset value for the pid.
void setKi(double i)
Set integrative gain.
double ki
integrative gain
double max_int
saturation threshold for the integrator
void setKff(double Kff)
Set the feedforward gain for the pid.
void setStictionValues(double up_value, double down_value)
Set the two stiction values for the pid.
void setScale(double sc)
Set output scale for the pid.
double kp
proportional gain
bool operator==(const yarp::dev::Pid &p) const
return true if all params are equal
void setKd(double d)
Set derivative gain.
void setMaxInt(double m)
Set max threshold for the integrative part.
An interface for the device drivers.