motor_controller
PositionVelocityTorqueCascade.hpp
Go to the documentation of this file.
1 //
2 // C++ Interface: PositionVelocityTorqueCascade
3 //
4 // Description:
5 //
6 //
7 // Author: <Ajish Babu>, (C) 2011
8 //
9 // Copyright: See COPYING file that comes with this distribution
10 //
11 //
12 #ifndef CONTROLLERPVTCONTROLLER_H
13 #define CONTROLLERPVTCONTROLLER_H
14 
15 #include <iostream>
16 
17 #include "PID.hpp"
18 
19 namespace motor_controller
20 {
22  {
23  public:
26  double _Ts,
27  double _Kpp,
28  double _Kpv, double _Kiv,
29  double _Kpt, double _Kit,
30  double _Kalp,
31  double _Ktv, double _Ktt,
32  double _Kvff = 0, double _Kaff = 0,
33  double _YMin = 0, double _YMax = 0);
34 
36 
37  void setSamplingTime (double _Ts);
38 
39  void setGains ( double _Kpp,
40  double _Kpv, double _Kiv,
41  double _Kpt, double _Kit); // Sets the gains
42 
43  void setGains();
44 
45  void setFeedForwardGain( double _Kvff=0.0, double _Kaff=0.0 );
46  void setVelSmoothingGain( double _Kalp );
47  void setOutputLimits ( double _YMin, double _YMax ); // Sets the max and min output limits
48  void setIntegratorWindupCoeffs (double _Ktv, double _Ktt); // Sets the intergrator wind up coefficients
49 
50  void setPositionController(bool _status) { posController = _status; };
51  void setVelocityController(bool _status) { velController = _status; };
52 
53  double getSmoothenedVelocity() { return velSmooth; };
54  double getVelocity() { return velComputed; };
55 
56  double getVelocityRef() { return velCommand; };
57  double getTorqueRef() { return torCommand; };
58 
59  void reset();
60 
61  double update ( double _posMeasured,
62  double _posRef,
63  double _torMeasured,
64  double _velFF = 0.0,
65  double _accFF = 0.0 );
66 
67  void printCoefficients();
68 
69 
70  private:
71  motor_controller::PID PositionP;
72  motor_controller::PID VelocityPI;
73  motor_controller::PID TorquePI;
74 
75  double Ts; // Sampling time
76 
77  double Kpp; // Proportional Position loop
78  double Kpv; // Proportional Velocity loop
79  double Kiv; // Integral Velocity loop
80  double Kpt; // Proportional Torque loop
81  double Kit; // Integral Torque loop
82 
83  double Ktv; // Anti-integrator-windup coefficient velocity
84  double Ktt; // Anti-integrator-windup coefficient torque
85 
86  double Kvff; // Velocity feed forward
87  double Kaff; // Acceleration feed forward
88 
89  double Kalp; // Smoothing factor for velocity input 0 <= Ka1 < 1
90  double YMin, YMax; // Minimum and Macimum output
91 
92 
93  double velPrevStep; // Velocity from previous step for filtering
94  double posPrevStep; // Position from the previous step for velocity calculation
95  double velComputed; // Velocity computed from the position input
96  double velSmooth; // Smoothened velocity
97 
98  double velCommand; // Generated velocity command
99  double torCommand; // Generated torque command
100 
101  bool posController; // Activate or deactivate position controller
102  bool velController; // Activate or deactivate position and velocity controller
103 
104  bool firstRun; // To check if it is the first run
105  };
106 
107 }
108 
109 #endif
void setVelSmoothingGain(double _Kalp)
Definition: PositionVelocityTorqueCascade.cpp:75
PID Implementation in C++.
Definition: PID.hpp:231
~PositionVelocityTorqueCascade()
Definition: PositionVelocityTorqueCascade.cpp:55
void setIntegratorWindupCoeffs(double _Ktv, double _Ktt)
Definition: PositionVelocityTorqueCascade.cpp:90
double update(double _posMeasured, double _posRef, double _torMeasured, double _velFF=0.0, double _accFF=0.0)
Definition: PositionVelocityTorqueCascade.cpp:117
double getTorqueRef()
Definition: PositionVelocityTorqueCascade.hpp:57
void printCoefficients()
Definition: PositionVelocityTorqueCascade.cpp:160
void setPositionController(bool _status)
Definition: PositionVelocityTorqueCascade.hpp:50
void setFeedForwardGain(double _Kvff=0.0, double _Kaff=0.0)
Definition: PositionVelocityTorqueCascade.cpp:67
void setOutputLimits(double _YMin, double _YMax)
Definition: PositionVelocityTorqueCascade.cpp:82
void setSamplingTime(double _Ts)
Definition: PositionVelocityTorqueCascade.cpp:60
void setGains()
Definition: PositionVelocityTorqueCascade.cpp:109
void reset()
Definition: PositionVelocityTorqueCascade.cpp:149
double getVelocityRef()
Definition: PositionVelocityTorqueCascade.hpp:56
double getSmoothenedVelocity()
Definition: PositionVelocityTorqueCascade.hpp:53
PositionVelocityTorqueCascade()
Definition: PositionVelocityTorqueCascade.cpp:16
double getVelocity()
Definition: PositionVelocityTorqueCascade.hpp:54
void setVelocityController(bool _status)
Definition: PositionVelocityTorqueCascade.hpp:51
Definition: PositionVelocityTorqueCascade.hpp:21