isaac-sim / IsaacLab

Unified framework for robot learning built on NVIDIA Isaac Sim
https://isaac-sim.github.io/IsaacLab
Other
2.15k stars 881 forks source link

[Question] How to model MuJoCo's friction loss parameter in Isaac Lab? #1325

Open SuomiKP31 opened 1 week ago

SuomiKP31 commented 1 week ago

Question

I'm trying to reproduce some results from a MuJoCo codebase in Isaac Lab. While PhysX has a friction parameter which can be set through the ActuatorCfg class in Isaac Lab, it is modelled differently compared to its MuJoCo counterpart.

MuJoCo's friction loss parameter is a load-independent friction, which does not correlate to the normal force. It can be applied to revolute joints or sliders, and it has implicit unit corresponding to the joint type.

In PhysX, the friction parameter present on joints is a unitless coefficient, modelling Coulomb friction which scales with the normal force. Essentially the two simulators modelled the same thing using different approximation models.

Being a newcomer to Isaac Lab, my immediate thought is to calibrate my robot's friction coefficients in Isaac Sim so that it falls in similar fashion under gravity compared to MuJoCo. But I do wonder if there's a way to more quantitively model the friction, so that it is as close to MuJoCo as possible.

Is it possible to obtain the combined force/torque applied to a joint after the actions have been applied to the actuators but before simulation update, so that I can apply this static friction manually?

StephenWelch commented 1 week ago

Also curious about this!

SuomiKP31 commented 1 week ago

I have previously used Omni-Isaac Gym Envs. I just looked back and found a function under ArticulationView called get_measured_joint_forces which seems to be what I need. However, Isaac Lab doesn't seem to be using this API. Can I use it in conjunction with the isaac.lab.assets.Articulation API? I'm going to try this tomorrow to see if it leads to anywhere.

GiulioRomualdi commented 3 days ago

Back in time I opened a similar question in the nvidia forum https://forums.developer.nvidia.com/t/how-to-implement-load-independent-static-friction-torque-in-isaacsim-revolute-joint/307662/1. Given the answer I think there is no a simple solution to implement dry friction, or static friction in Isaac lab

StrainFlow commented 1 day ago

It does not actually scale with the "normal force" but with the "transmitted joint force". Here is the documentation's description:

`The joint friction is unitless and relates the magnitude of the spatial force [F_trans, T_trans] transmitted from parent to child link to the maximal friction force F_resist that may be applied by the solver to resist joint motion, per axis; i.e. |F_resist| <= coefficient * (|F_trans| + |T_trans|), where F_resist may refer to a linear force or torque depending on the joint axis.

The simulated friction effect is therefore similar to static and Coulomb friction. In order to simulate dynamic joint friction, use a joint drive with zero stiffness and zero velocity target, and an appropriately dimensioned damping parameter.`

I'm getting clarification on exactly how this works. So far one thing I have learned is that if you are modeling joint friction, you should use the PGS solver, not the TGS solver.