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;