ihmcrobotics / ihmc-open-robotics-software

Robotics software featuring legged locomotion algorithms and a momentum-based controller core with optimization. Supporting software for world-class robots including humanoids, running birds, exoskeletons, mechs and more.
https://robots.ihmc.us
252 stars 89 forks source link

Arm controller with separate PID gains for each joint #12

Closed dljsjr closed 8 years ago

dljsjr commented 8 years ago

Originally reported by: Vladimir Ivan (Bitbucket: vivan, GitHub: vivan)


The PID controllers for the arm joints currently share one set of PID gains between them. These gains are set up in ManipulationControlModule.java on line 98:

YoPIDGains jointspaceControlGains = armControllerParameters.createJointspaceControlGains(registry);

This severely limits accuracy/response of the arms. Each joint drives a link(age) with different inertia properties. Sharing the PID gains restricts setting these to conservative values.

We (the Edinburgh team) would like to tune these gains and run a couple of experiments while we are at JSC. This is high on our priority list, since we can't execute any manipulation/reaching plans without good tracking performance.

I'm happy to help with making this happen.


dljsjr commented 8 years ago

Original comment by Vladimir Ivan (Bitbucket: vivan, GitHub: vivan):


We have managed to tune the gains, so this is no longer a high priority issue.

dljsjr commented 8 years ago

Original comment by Vladimir Ivan (Bitbucket: vivan, GitHub: vivan):


That's interesting. Let me discuss this with Alex (our control guy). We have started tuning the gains and we got significant improvement in the performance. We'll see what we can do with the existing gains on Monday.

dljsjr commented 8 years ago

Original comment by Sylvain Bertrand (Bitbucket: SylvainBertrand, GitHub: SylvainBertrand):


Hi! Sorry for the late response. So I can split the gains to be joint specific, but before doing so I would like to point out that those gains are used to compute a desired acceleration for each joint which is then fed into our QP solver + inverse dynamics to compute the adequate desired joint torques. This means that these gains don't have to be scaled according to each joint's subtree inertia as the inverse dynamics is already doing so. This is why we use only one set of gains for all the arm joints.

Also, note that I have barely had the time to finish implementing the controller on Valkyrie, these gains are temporarily downtuned to ensured stability until the whole controller is working properly. Increasing them at the moment might result in unexpected instabilities.