17                               double Kt_n, 
double Kf_p, 
double Kf_n,
 
   18                               double Kv_p, 
double Kv_n, 
double Ka_p,
 
   19                               double Ka_n, 
unsigned int poly) {
 
   20   assert(Kt_p > 0.0 && 
"Kt_p should be > 0");
 
   21   assert(Kt_n > 0.0 && 
"Kt_n should be > 0");
 
   22   assert(Kf_p >= 0.0 && 
"Kf_p should be >= 0");
 
   23   assert(Kf_n >= 0.0 && 
"Kf_n should be >= 0");
 
   24   assert(Kv_p >= 0.0 && 
"Kv_p should be >= 0");
 
   25   assert(Kv_n >= 0.0 && 
"Kv_n should be >= 0");
 
   26   assert(Ka_p >= 0.0 && 
"Ka_p should be >= 0");
 
   27   assert(Ka_n >= 0.0 && 
"Ka_n should be >= 0");
 
   29   double signDq = this->
smoothSign(dq, 0.1, poly);  
 
   33   double Kt = 0.5 * (Kt_p * (1 + signDq) + Kt_n * (1 - signDq));
 
   34   double Kv = 0.5 * (Kv_p * (1 + signDq) + Kv_n * (1 - signDq));
 
   35   double Ka = 0.5 * (Ka_p * (1 + signDq) + Ka_n * (1 - signDq));
 
   36   double Kf = 0.5 * (Kf_p * (1 + signDq) + Kf_n * (1 - signDq));
 
   38   current = Kt * torque + Kv * dq + Ka * ddq + signDq * Kf;
 
   44                              double Kt_n, 
double Kf_p, 
double Kf_n, 
double Kv_p,
 
   45                              double Kv_n, 
double Ka_p, 
double Ka_n,
 
   47   assert(Kt_p > 0.0 && 
"Kt_p should be > 0");
 
   48   assert(Kt_n > 0.0 && 
"Kt_n should be > 0");
 
   49   assert(Kf_p >= 0.0 && 
"Kf_p should be >= 0");
 
   50   assert(Kf_n >= 0.0 && 
"Kf_n should be >= 0");
 
   51   assert(Kv_p >= 0.0 && 
"Kv_p should be >= 0");
 
   52   assert(Kv_n >= 0.0 && 
"Kv_n should be >= 0");
 
   53   assert(Ka_p >= 0.0 && 
"Ka_p should be >= 0");
 
   54   assert(Ka_n >= 0.0 && 
"Ka_n should be >= 0");
 
   56   double signDq = this->
smoothSign(dq, 0.1, poly);  
 
   60   double Kt = 0.5 * (Kt_p * (1 + signDq) + Kt_n * (1 - signDq));
 
   61   double Kv = 0.5 * (Kv_p * (1 + signDq) + Kv_n * (1 - signDq));
 
   62   double Ka = 0.5 * (Ka_p * (1 + signDq) + Ka_n * (1 - signDq));
 
   63   double Kf = 0.5 * (Kf_p * (1 + signDq) + Kf_n * (1 - signDq));
 
   66       (current / Kt) - (Kv / Kt) * dq - (Ka / Kt) * ddq - signDq * (Kf / Kt);
 
   73   if (value > threshold)
 
   75   else if (value < -threshold)
 
   77   double a = value / threshold;
 
   78   if (poly == 1) 
return a;
 
   79   if (poly == 2 && value > 0) 
return a * a;
 
   80   if (poly == 2 && value <= 0) 
return -a * a;
 
double smoothSign(double value, double threshold, unsigned int poly=3)
 
double getTorque(double current, double dq, double ddq, double Kt_p, double Kt_n, double Kf_p=0.0, double Kf_n=0.0, double Kv_p=0.0, double Kv_n=0.0, double Ka_p=0.0, double Ka_n=0.0, unsigned int poly=3)
 
double getCurrent(double torque, double dq, double ddq, double Kt_p, double Kt_n, double Kf_p=0.0, double Kf_n=0.0, double Kv_p=0.0, double Kv_n=0.0, double Ka_p=0.0, double Ka_n=0.0, unsigned int poly=3)