Get Torques in Position Control Mode

Just throwing my two cents after looking at this particular challenge for a month.

Position control is not PD control. It’s a mixed linear complementarity problem solver.

From my understanding, Isaac calls GPU-enabled PhysX backend, which uses Featherstone MLCP solver. This incorporates stiffness and damping of the joints similarly to PD control, but there is a bunch of other force terms in there that make the final torque output deviate from PD control by a large margin.

This isn’t Isaac’s fault entirely, as the MLCP solver itself doesn’t make it straightforward to extract the exact torques applied to the virtual servos. AFAIK bullet has the same problem when trying to use position control.

Temporary solution is to use effort mode control and to somehow plug in your own stable MLCP solver or PD controller, neither of which is trivial.

6 Likes