-
Notifications
You must be signed in to change notification settings - Fork 7
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement friction compensation #261
Comments
Note iPOS drives already implement some sort of compensation by applying a current offset. Sadly, I think it doesn't care of the sign of the velocity, hence it might help or hinder motion depending on it. This is also the reason why certain joints (sagittal right hip?) move out of zero pose right after entering torque mode. @jgvictores said this offset was disabled for the sake of their tests. |
I confirm this is my belief but I'm not 100% sure.
I confirm I'm also pretty sure about this, which provides further proof of the above (the joint does not even wait for a reference to check the direction, it just feeds the current).
I'm quite positive on this one. |
The iPOS setting is available in EasySetup > Drive Setup > Current controller > Tune & Test > Test > Compensate for gravitational load > Offset value. It is described like this in the documentation:
Assuming the latest backup represent the current state of the drives, the only place we are using this parameter is joint 12, left sagittal ankle, with a value of 0.25 A (variable OffsetCurrent). |
|
Now we have a custom PID implementation: #262. Following on this, I'm thinking of a nested (cascaded) torque PID capable of accounting for friction, whose output would be directly forwarded to the iPOS firmware as current commands. Problem: can I actually use the drive's current probes to obtain force feedback (using the motor constant and reduction factors in the current-to-torque conversion)? Edit: the current sensor is placed on the motor side, hence no, it doesn't reflect the actual torque exerted by the joint. Edit 2: see #270. |
|
|
TEO's joints require a lot of effort to rotate because of friction. It might be useful to have some sort of out-of-the-box compensation for this phenomenon without having to rely on external control loops.
I believe friction compensation should only target torque/current control as position and speed loops already take care of following their reference regardless of any physical downstream reactions (friction, gravity, load...) that could impede motion. Without any deeper background on control theory, it is only my guess that the acceleration feedforward component of the position PI kind of behaves like a term of the intrinsic compensator.
Regarding the friction model, I'd go first with static friction (a.k.a. Coulomb friction). Further, a damping coefficient could be considered in order to apply an additional friction term that varies with the joint's rotation speed. These two friction kinds are represented in Gazebo via
<friction>
and<damping>
joint properties (SDF reference). Note it seems to go a bit further and even consider a spring-like behavior via the additional initial-reference and stiffness parameters. Refs:Joint::Load
,ODEJoint::SetParam
(regarding friction),ODEJoint::SetStiffnessDamping
(regarding joint stiffness/damping, docs).According to estimations by S. Morante & J. Victores, static friction and damping coefficients on TEO's left sagittal shoulder result in ~0.7 and ~0.001, respectively (roboticslab-uc3m/teo-gazebo-models#1 (comment)). See morante2015force-preprint.pdf, video.
See also an attempt on friction compensation in the iCub: robotology/icub-firmware#67, robotology/icub-firmware#228,
PID_do_friction_comp
,eo_pid_PWM_friction
.See also:
The text was updated successfully, but these errors were encountered: