Dynamixel  2.9.5
RoadNarrows Robotics Dynamixel Package
DynaPidPos Class Reference

Position PID class. More...

#include <DynaPidPos.h>

Inheritance diagram for DynaPidPos:
DynaPid

Public Member Functions

 DynaPidPos (double fKp=0.5, double fKi=0.0, double fKd=0.005, double fWi=0.25)
 Default constructor. More...
 
 DynaPidPos (const DynaPid &src)
 Copy constructor.
 
virtual ~DynaPidPos ()
 Default destructor.
 
DynaPidPosoperator= (const DynaPidPos &rhs)
 Assignment operator.
 
virtual void SpecifySetPoint (int nOdPosStart, int nOdPosGoal, int nSpeedLim, int nCurSpeed, bool bIsReversed, bool bUnwind=false)
 Specify position setpoint. More...
 
- Public Member Functions inherited from DynaPid
 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 TuneMaxSpeedDelta = 1000.0
 max speed change deltas More...
 
static const double TuneAbsMinSpeed = 0.0
 absolute minimum speed
 
- Static Public Attributes inherited from DynaPid
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

void initParams ()
 Initialize parameters.
 
virtual double error (double fPVodPosCur)
 Calculate error from goal postion setpoint and current position variable value. More...
 
virtual double toOutput (double fCVSpeed)
 Convert control variable to application-specific output value. More...
 

Protected Attributes

int m_nOdPosStart
 starting odometer position
 
int m_nOdPosGoal
 goal ing odometer position (set point)
 
int m_nSpeedLim
 speed limit (max neg/pos speed)
 
int m_nOdDir
 odometer direction
 
int m_nOdPosCur
 current odometer position
 
double m_fSpeedAbsMax
 absolute speed limit >= 0
 
double m_fPrevSpeed
 previous speed
 
- Protected Attributes inherited from DynaPid
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

Position PID class.

Definition at line 74 of file DynaPidPos.h.

Constructor & Destructor Documentation

DynaPidPos::DynaPidPos ( double  fKp = 0.5,
double  fKi = 0.0,
double  fKd = 0.005,
double  fWi = 0.25 
)
inline

Default constructor.

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

Definition at line 88 of file DynaPidPos.h.

91  :
92  DynaPid(fKp, fKi, fKd, fWi)
93  {
94  initParams();
95  }
void initParams()
Initialize parameters.
Definition: DynaPidPos.h:155
DynaPid(double fKp=PidKpDft, double fKi=PidKiDft, double fKd=PidKdDft, double fWi=WiSumErrDft)
Default constructor.
Definition: DynaPid.h:120

Member Function Documentation

double DynaPidPos::error ( double  fPVodPosCur)
protectedvirtual

Calculate error from goal postion setpoint and current position variable value.

Parameters
fPVOdPosCurCurrent odometer position process variable value.
Returns
Error.

Reimplemented from DynaPid.

Definition at line 91 of file DynaPidPos.cxx.

92 {
93  m_nOdPosCur = (int)fPVOdPosCur;
94 
95  return (double)(m_nOdPosGoal - m_nOdPosCur);
96 }
int m_nOdPosGoal
goal ing odometer position (set point)
Definition: DynaPidPos.h:145
int m_nOdPosCur
current odometer position
Definition: DynaPidPos.h:148
void DynaPidPos::SpecifySetPoint ( int  nOdPosStart,
int  nOdPosGoal,
int  nSpeedLim,
int  nCurSpeed,
bool  bIsReversed,
bool  bUnwind = false 
)
virtual

Specify position 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
nOdPosStartStarting position (odometer ticks).
nOdPosGoalNew goal position setpoint (odometer ticks).
nSpeedLimSpeed limit (raw).
nCurSpeedCurrent servo speed (raw).
bIsReversedOdometer is [not] reversed from encoder.
bUnwindDo [not] reset controller integral sum of errors term

Definition at line 71 of file DynaPidPos.cxx.

References DynaPid::SpecifySetPoint().

Referenced by DynaBgThread::WriteGoalPos().

77 {
78  DynaPid::SpecifySetPoint((double)nOdPosGoal, bUnwind);
79 
80  m_nOdPosStart = nOdPosStart;
81  m_nOdPosGoal = nOdPosGoal;
82  m_nSpeedLim = nSpeedLim;
83  m_nOdDir = bIsReversed? -1: 1;
84 
85  m_nOdPosCur = nOdPosStart;
86 
87  m_fSpeedAbsMax = m_nSpeedLim >= 0? (double)m_nSpeedLim: -(double)m_nSpeedLim;
88  m_fPrevSpeed = (double)nCurSpeed;
89 }
int m_nOdPosStart
starting odometer position
Definition: DynaPidPos.h:144
virtual void SpecifySetPoint(double fSP, bool bUnwind=false)
Specify the setpoint.
Definition: DynaPid.cxx:71
int m_nOdDir
odometer direction
Definition: DynaPidPos.h:147
double m_fSpeedAbsMax
absolute speed limit >= 0
Definition: DynaPidPos.h:149
int m_nSpeedLim
speed limit (max neg/pos speed)
Definition: DynaPidPos.h:146
int m_nOdPosGoal
goal ing odometer position (set point)
Definition: DynaPidPos.h:145
int m_nOdPosCur
current odometer position
Definition: DynaPidPos.h:148
double m_fPrevSpeed
previous speed
Definition: DynaPidPos.h:150
double DynaPidPos::toOutput ( double  fCVSpeed)
protectedvirtual

Convert control variable to application-specific output value.

Parameters
fCVSpeedSpeed control variable value.
Returns
Output.

Reimplemented from DynaPid.

Definition at line 98 of file DynaPidPos.cxx.

99 {
100  double fSpeed;
101 
102  fSpeed = fCVSpeed * (double)m_nOdDir;
103 
104  //
105  // Cap speed to the absolute maximum which is the target goal speed.
106  //
107  if( fSpeed > m_fSpeedAbsMax )
108  {
109  fSpeed = m_fSpeedAbsMax;
110  }
111  else if( fSpeed < -m_fSpeedAbsMax )
112  {
113  fSpeed = -m_fSpeedAbsMax;
114  }
115 
116  //
117  // If there is an absolute lower speed, then cap as necessary.
118  //
119  if( TuneAbsMinSpeed > 0.0 )
120  {
121  if( (fSpeed > 0.0) && (fSpeed < TuneAbsMinSpeed) )
122  {
123  fSpeed = TuneAbsMinSpeed;
124  }
125  else if( (fSpeed < 0.0) && (fSpeed > -TuneAbsMinSpeed) )
126  {
127  fSpeed = -TuneAbsMinSpeed;
128  }
129  }
130 
131  //
132  // Cap the acceleration so that jerkiness and oscillations are minimized.
133  //
134  if( fabs(fSpeed-m_fPrevSpeed) > TuneMaxSpeedDelta )
135  {
136  if( m_fPrevSpeed > fSpeed )
137  {
138  fSpeed = m_fPrevSpeed - TuneMaxSpeedDelta;
139  }
140  else
141  {
142  fSpeed = m_fPrevSpeed + TuneMaxSpeedDelta;
143  }
144  }
145 
146  m_fPrevSpeed = fSpeed;
147 
148  return fSpeed;
149 }
static const double TuneMaxSpeedDelta
max speed change deltas
Definition: DynaPidPos.h:77
int m_nOdDir
odometer direction
Definition: DynaPidPos.h:147
double m_fSpeedAbsMax
absolute speed limit >= 0
Definition: DynaPidPos.h:149
static const double TuneAbsMinSpeed
absolute minimum speed
Definition: DynaPidPos.h:78
double m_fPrevSpeed
previous speed
Definition: DynaPidPos.h:150

Member Data Documentation

const double DynaPidPos::TuneMaxSpeedDelta = 1000.0
static

max speed change deltas

max speed chg deltas

Definition at line 77 of file DynaPidPos.h.


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