How to best model mechanical tolerances within Isaac Lab

Hi!
I am looking to model mechanical tolerances and deformations that could occur at each joint for a robot within Isaac Lab.

Considering a robot arm, the joints are revolute for the most part. But it is possible due to manufacturing issues or real life deformations the joint rotates or translates in other axes than the driven revolute axes - not by much, but due to linkages smaller deltas higher up will lead upto a significant delta at end effector.

Hence if we consider each joint as a D-6 joint, my goal is to drive only the revolute axes and the other 5 axes at each joint will be used for random initialization at each instance in Lab to model this mechanical deformation.

I could do it by generating multiple USDs, each with varying level of deformations, but this means a large number of files and the sample space will be made static, which I do not prefer.

On the other hand I tried changing all my robot joints to D-6 joints. But, The PhysX articulation interface seems to recognize only one axis and none of the others, so I cannot find a simple way to alter those other 5 axes.

And from what I understand it is not possible to change the transformations of joints at will especially when the simulation has already begun?

Is there any other way to do this? I appreciate any help!

The documentation states it has only been tested for revolute and prismatic kinds but hints at the ability to use a D-6 joint as well. But, the Lab Articulation interface / Physx one doesn’t expose all the degrees in a D-6 joint. It only gives access to “<joint_name>:0”. It added the “:0” on its own so I assume its possible some way to make it expose all 6 degrees in the single joint?

What about adding a slight random fixed variable on the axis that you want to randomise on for the manufacturing tolerances. You could have something like a sine wave with a randomized starting position error across the arc as the slight tolerance wouldn’t be uniform on altering the “standard” axis. Adjusting the amplification of the wave and/or noise would probably work.

So start with the tolerance say like <1° +/- then have a random wave across the arc. Would probably save a lot of compute compared to soft body?

That was always the plan, but I could not find a way to interface with a D-6 joint - which is what is needed if I want to randomize a few axes and keep 1 for articulation. Do you know of a way to do that? The API is there but I do not know if it is fully developed yet.

I had not even thought about a soft body. Its too computationally expensive for my usecase.

1 Like

Sorry I’m not on the forum much how did you get on with this?