20 pid.
max_value = torqueConfigData->pid_max_value;
21 pid.
min_value = torqueConfigData->pid_min_value;
22 pid.
dis = torqueConfigData->pid_dis;
23 pid.
Kd = torqueConfigData->Kd;
24 pid.
inertia = torqueConfigData->inertia;
25 pid.
scalePI = torqueConfigData->scalePI;
27 pid.
maxTorque = torqueConfigData->maxTorque;
30 0.1744f, 0.0205f, 0.0215f, 0.0225f, 0.0235f, 0.0244f, 0.0252f,
31 0.0259f, 0.0265f, 0.0270f, 0.0274f, 0.0276f, 0.0278f, 0.0282f,
32 0.0282f, 0.0278f, 0.0276f, 0.0274f, 0.0270f, 0.0265f, 0.0259f,
33 0.0252f, 0.0244f, 0.0235f, 0.0225f, 0.0215f, 0.0205f, 0.1744f});
69 double er0 = (Kp + (
dt * Ki) + (
Kd /
dt)) * curr_error;
72 double delta = (er0 + er1 + er2);
118 return std::make_shared<TorqueControllerConfiguration>(configData);
127 const std::string& jointName,
131 float actualVelocity,
132 float actualPosition)
136 double dt = timeSinceLastIteration.toSecondsDouble();
140 float actualTorqueF =
141 filter.
update(actualTorque);
142 Kd = (-gravity + targetTorque + actualTorqueF) /
159 (-0.003721 * std::pow(Kd, 2.0) + 0.43429 * Kd - 1.4408) * (scalePI * 0.45);
180 (-gravity + targetTorque - Kd * actualVelocity);
189 float current = -(pid.
control) * 1000.0;
198 double pushbackMargin = 5.0 / 180. *
M_PI;
199 double pushBackTorque = 100;
201 double jointLimitProtection = 0;
202 if (!configData->limitless)
204 double borderHigh = configData->jointLimitHigh - pushbackMargin;
205 double borderLow = configData->jointLimitLow + pushbackMargin;
206 double penetration = 0;
207 if (actualPosition > borderHigh)
209 penetration = actualPosition - borderHigh;
211 else if (actualPosition < borderLow)
213 penetration = actualPosition - borderLow;
215 jointLimitProtection = penetration / pushbackMargin * pushBackTorque;
218 return jointLimitProtection;