# Possible bug in Joint friction value definition

It’s a continuance from my previous post about comparing Isaac gym with Matlab,
I did a test with a real joint and compared it against Isaac gym simulation and Matlab,
Here are the result,
For Matlab simulation I used this joint friction model which is included in the Matlab Simscape:

With Friction= 0.13 N.m and Damping= 0.001 N.m/(Rad/s) I got this results which fits the result I got from the real joint

In Isaac Gym I got better results but with a very different friction value!! almost 16 times smaller than the Matlab one:
Friction= 0.008 N.m and Damping= 0.001 N.m/(Rad/s)

From my own calculation Matlab’s friction value is close to the real values for friction.
In my previous post I mentioned that there are two other variables which should set to zero, which I have done it so I don’t understand the source of such discrepancy!
asset_options.angular_damping=0
asset_options.linear_damping=0

Any idea?

The joint friction model in PhysX uses the transmission force computed through forward dynamics to approximate the normal force acting at the joint. It then uses a Coulomb friction model based on the normal force and friction coefficient to simulate the joint friction.

Would it be possible for you to share the configuration and observed results so we can investigate a bit more?

Thanks for the response, Sure, I will share the details of the configurations with you.
So what happens to the viscous friction? the Damping value in joint definition represents the viscous friction? because in the documents it’s introduced more as the Kd in a PID controller than a characteristic of the joint, both are the same concept but in the real world Kd is adjustable and Damping is not. And what’s the unit of measurement for friction? it’s not indicated in the documents, is it N.m? how about damping, N.m/(Rad/s)?

And another thing I noticed is that the asset_options.angular_damping value is not zero by default, it’s 0.5 as I remember, this parameter drastically change the results of the simulation.

The joint damping value is a function of the joint velocity and is part of the drive model, which is an implicit PD controller. We provide stiffness, which drives the joint position towards a target position, and damping, which drives the joint velocity towards a target joint velocity. Both target position and target velocity default to 0.

The friction coefficient is unitless and is similar to a contact friction coefficient. Joint friction is applied as a constraint driving the joint velocity to zero, where the frictional force limit is defined by the normal force scaled by the friction coefficient. We approximate the normal force using the joint transmission force that is computed while computing the accelerations acting on the articulation during forward dynamics. This means that this friction coefficient can be seen more of a material property than a joint property.

The default angular damping coefficient is probably a little high. This is world frame damping rather than joint space damping. It’s sometimes useful to help retain simulation stability when simulating at relatively large time-steps, although this has become less of an issue with more recent iterations of Isaac Gym as the underlying articulation model has improved.

1 Like

Thank you for the explanation! now I get it, so in the documents by friction it means coefficient of friction:

And it only simulates the Coulomb friction not Viscouse friction, for modeling the Viscouse friction we have to apply it though damping value in the drive mode, am I correct?

Exactly - the friction value is the coefficient of friction modelling assumed dry friction caused by parts rubbing against each other. Viscous friction could be implemented using the drive’s damping.

We don’t have anything equivalent to the stribeck term. However, our joint transmission force is not a constant but instead depends on the forces transmitting through the joints, so it varies depending on factors like joint velocity, the suspended mass, coriolis and centrifugal forces etc.

It looks promising that you’re able to closely match your desired behavior by tweaking the friction coefficient.

It would not be difficult to add a constant coulomb friction value into the model if that’s seen as a useful addition that makes the model more closely match other commonly-used joint friction models. This might be beneficial to simulate seized up/locked joints.

1 Like

Thank you! it explains the results I got from Isaac gym and Matlab! Actually I got more consistent results with Isaac gym than Matlab when I changed the amount of the load and the distance of the load from the joint.
Yeah! it’s promising and I didn’t expect it, I don’t have a torque sensor to measure the reaction torques but from looking at the behavior of the system, the simulation looks very close to the reality.
When modeling a gearbox motor or a more complicated joint or even estimating the motor’s current it would be useful to have an additional term in the joint parameters for modeling extra non-linearities in the system. It’s doable with current gym’s features by applying an external force at a distance from the joint but having it the joint parameters would be very handy.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.