Dynamixel  2.9.5
RoadNarrows Robotics Dynamixel Package
DynaPid Class Reference

Proportional–Integral–Derivative Controller for Dynamixel servos. More...

#include <DynaPid.h>

Inheritance diagram for DynaPid:
DynaPidPos DynaPidSpeed

Public Member Functions

 DynaPid (double fKp=PidKpDft, double fKi=PidKiDft, double fKd=PidKdDft, double fWi=WiSumErrDft)
 Default constructor. More...
 
 DynaPid (const DynaPid &src)
 Copy constructor.
 
virtual ~DynaPid ()
 Default destructor.
 
virtual void SetConstants (double fKp, double fKi, double fKd)
 Set PID constants. More...
 
double GetKp () const
 Get PID proportional constant. More...
 
double GetKi () const
 Get PID integral constant. More...
 
double GetKd () const
 Get PID derivative constant. More...
 
double GetSP () const
 Get PID setpoint. More...
 
double GetCV () const
 Get PID control variable. More...
 
double GetOutput () const
 Get PID output. More...
 
double GetError () const
 Get current error. More...
 
virtual void InitControl ()
 Initialize the PID control variables.
 
virtual void SpecifySetPoint (double fSP, bool bUnwind=false)
 Specify the setpoint. More...
 
virtual double Control (double fPV, double dt)
 Apply PID control. More...
 
DynaPidoperator= (const DynaPid &rhs)
 Assignment operator. More...
 

Static Public Attributes

static const double PidKpDft = 0.5
 default Kp constant
 
static const double PidKiDft = 1.0
 default Ki constant
 
static const double PidKdDft = 0.1
 default Kd constant
 
static const double WiSumErrDft = 0.1
 default sum error weight
 

Protected Member Functions

virtual double error (double fPV)
 Calculate error from setpoint and current process variable value. More...
 
virtual double toOutput (double fCV)
 Convert control variable to application-specific output value. More...
 

Protected Attributes

double m_fSP
 setpoint
 
double m_fPV
 process variable
 
double m_fKp
 proportional constant
 
double m_fKi
 integral constant
 
double m_fKd
 derivative constant
 
double m_fWi
 weighted sum of errors moving average constant
 
bool m_bHasPrev
 has previous error
 
double m_fErrPrev
 previous error
 
double m_fErr
 error
 
double m_fErrSum
 sum of errors
 
double m_fCV
 control variable value
 
double m_fOutput
 control variable output (could be same as CV)
 

Detailed Description

Proportional–Integral–Derivative Controller for Dynamixel servos.

The Servo PID:
setpoint (SP) = application specific
process variable (PV) = application specific
control variable (CV) = application specific
The PID Control Loop:
CV = Kp * errj + Ki * Σjerrk * dtk + Kd * (errj - errj-1) / dtj
output = converted control variable

where:
j this time step
j-1 previous time step
dtk delta time between time steps k-1 and k
errk error = SP - PVk
PVk process variable at time step k
Kp proportional constant
Ki integral constant
Kd derivative constant

Definition at line 104 of file DynaPid.h.

Constructor & Destructor Documentation

DynaPid::DynaPid ( double  fKp = PidKpDft,
double  fKi = PidKiDft,
double  fKd = PidKdDft,
double  fWi = WiSumErrDft 
)
inline

Default constructor.

Parameters
fKpPID proportional constant.
fKiPID integral constant.
fKdPID derivative constant.
fWiPID integral sum of errors weight constant.

Definition at line 120 of file DynaPid.h.

124  {
125  m_fWi = fWi;
126  SetConstants(fKp, fKi, fKd);
127  InitControl();
128  }
virtual void InitControl()
Initialize the PID control variables.
Definition: DynaPid.h:204
virtual void SetConstants(double fKp, double fKi, double fKd)
Set PID constants.
Definition: DynaPid.h:152
double m_fWi
weighted sum of errors moving average constant
Definition: DynaPid.h:259

Member Function Documentation

double DynaPid::Control ( double  fPV,
double  dt 
)
virtual

Apply PID control.

Parameters
fPVProcess variable.
dtDelta time step (seconds).
Returns
Output.

Definition at line 83 of file DynaPid.cxx.

Referenced by DynaPidSpeed::Control(), and DynaBgThread::execPosCtl().

84 {
85  double fErrDt; // change in error w.r.t delta time
86 
87  // new process variable value
88  m_fPV = fPV;
89 
90  // error
91  m_fErr = error(m_fPV);
92 
93  if( !m_bHasPrev )
94  {
96  m_bHasPrev = true;
97  }
98 
99  // weigthed sum of errors moving average
100  m_fErrSum = (1.0 - m_fWi) * m_fErrSum + m_fWi * (m_fErr * dt);
101 
102  // delta error
103  if( dt > 0.0 )
104  {
105  fErrDt = (m_fErr - m_fErrPrev)/dt;
106  }
107  else
108  {
109  fErrDt = 0.0;
110  }
111 
112  m_fErrPrev = m_fErr;
113 
114  // new control variable value
115  m_fCV = (m_fKp * m_fErr) + (m_fKi * m_fErrSum) + (m_fKd * fErrDt);
116 
118 
119  return m_fOutput;
120 }
double m_fOutput
control variable output (could be same as CV)
Definition: DynaPid.h:265
double m_fKd
derivative constant
Definition: DynaPid.h:258
double m_fErrPrev
previous error
Definition: DynaPid.h:261
virtual double toOutput(double fCV)
Convert control variable to application-specific output value.
Definition: DynaPid.h:286
double m_fKp
proportional constant
Definition: DynaPid.h:256
bool m_bHasPrev
has previous error
Definition: DynaPid.h:260
virtual double error(double fPV)
Calculate error from setpoint and current process variable value.
Definition: DynaPid.h:274
double m_fPV
process variable
Definition: DynaPid.h:255
double m_fErrSum
sum of errors
Definition: DynaPid.h:263
double m_fErr
error
Definition: DynaPid.h:262
double m_fWi
weighted sum of errors moving average constant
Definition: DynaPid.h:259
double m_fKi
integral constant
Definition: DynaPid.h:257
double m_fCV
control variable value
Definition: DynaPid.h:264
virtual double DynaPid::error ( double  fPV)
inlineprotectedvirtual

Calculate error from setpoint and current process variable value.

Parameters
fPVProcess variable value.
Returns
Error.

Reimplemented in DynaPidPos.

Definition at line 274 of file DynaPid.h.

275  {
276  return m_fSP - fPV;
277  }
double m_fSP
setpoint
Definition: DynaPid.h:254
double DynaPid::GetCV ( ) const
inline

Get PID control variable.

Returns
CV.

Definition at line 187 of file DynaPid.h.

187 { return m_fCV; }
double m_fCV
control variable value
Definition: DynaPid.h:264
double DynaPid::GetError ( ) const
inline

Get current error.

Returns
Error.

Definition at line 199 of file DynaPid.h.

Referenced by DynaBgThread::execPosCtl().

199 { return m_fErr; }
double m_fErr
error
Definition: DynaPid.h:262
double DynaPid::GetKd ( ) const
inline

Get PID derivative constant.

Returns
Kd

Definition at line 175 of file DynaPid.h.

175 { return m_fKd; }
double m_fKd
derivative constant
Definition: DynaPid.h:258
double DynaPid::GetKi ( ) const
inline

Get PID integral constant.

Returns
Ki

Definition at line 169 of file DynaPid.h.

169 { return m_fKi; }
double m_fKi
integral constant
Definition: DynaPid.h:257
double DynaPid::GetKp ( ) const
inline

Get PID proportional constant.

Returns
Kp

Definition at line 163 of file DynaPid.h.

163 { return m_fKp; }
double m_fKp
proportional constant
Definition: DynaPid.h:256
double DynaPid::GetOutput ( ) const
inline

Get PID output.

Returns
Output.

Definition at line 193 of file DynaPid.h.

193 { return m_fOutput; }
double m_fOutput
control variable output (could be same as CV)
Definition: DynaPid.h:265
double DynaPid::GetSP ( ) const
inline

Get PID setpoint.

Returns
SP.

Definition at line 181 of file DynaPid.h.

181 { return m_fSP; }
double m_fSP
setpoint
Definition: DynaPid.h:254
DynaPid& DynaPid::operator= ( const DynaPid rhs)
inline

Assignment operator.

Parameters
rhsRight hand side object.
Returns
Returns *this.

Definition at line 245 of file DynaPid.h.

References m_fKd, m_fKi, m_fKp, and m_fWi.

246  {
247  m_fWi = rhs.m_fWi;
248  SetConstants(rhs.m_fKp, rhs.m_fKi, rhs.m_fKd);
249  InitControl();
250  return *this;
251  }
virtual void InitControl()
Initialize the PID control variables.
Definition: DynaPid.h:204
double m_fKd
derivative constant
Definition: DynaPid.h:258
virtual void SetConstants(double fKp, double fKi, double fKd)
Set PID constants.
Definition: DynaPid.h:152
double m_fKp
proportional constant
Definition: DynaPid.h:256
double m_fWi
weighted sum of errors moving average constant
Definition: DynaPid.h:259
double m_fKi
integral constant
Definition: DynaPid.h:257
virtual void DynaPid::SetConstants ( double  fKp,
double  fKi,
double  fKd 
)
inlinevirtual

Set PID constants.

Parameters
fKpPID proportional constant.
fKiPID integral constant.
fKdPID derivative constant.

Definition at line 152 of file DynaPid.h.

153  {
154  m_fKp = fKp;
155  m_fKi = fKi;
156  m_fKd = fKd;
157  }
double m_fKd
derivative constant
Definition: DynaPid.h:258
double m_fKp
proportional constant
Definition: DynaPid.h:256
double m_fKi
integral constant
Definition: DynaPid.h:257
void DynaPid::SpecifySetPoint ( double  fSP,
bool  bUnwind = false 
)
virtual

Specify the setpoint.

The PID can also be unwound. This PID technique is used when a new setpoint causes the PID to behave badly, normally through integral windup. Unwinding resets the accumulated sum of errors integral term to zero.

Parameters
fSPNew setpoint.
bUnwindDo [not] reset controller integral sum of errors term

Reimplemented in DynaPidSpeed.

Definition at line 71 of file DynaPid.cxx.

Referenced by DynaPidPos::SpecifySetPoint(), and DynaPidSpeed::SpecifySetPoint().

72 {
73  m_fSP = fSP;
74 
75  m_bHasPrev = false;
76 
77  if( bUnwind )
78  {
79  m_fErrSum = 0.0;
80  }
81 }
bool m_bHasPrev
has previous error
Definition: DynaPid.h:260
double m_fErrSum
sum of errors
Definition: DynaPid.h:263
double m_fSP
setpoint
Definition: DynaPid.h:254
virtual double DynaPid::toOutput ( double  fCV)
inlineprotectedvirtual

Convert control variable to application-specific output value.

Parameters
fCVControl variable value.
Returns
Output.

Reimplemented in DynaPidPos.

Definition at line 286 of file DynaPid.h.

287  {
288  return fCV;
289  }

The documentation for this class was generated from the following files: