Interpenetration of objects and incoherent force measurement with physx engine


I face two problems:

Context: There is a manipulator (with a gripper) that is always controlled (using inverse kinematic and position controller) to go down (-z) and forward (+x) in the scenario shown in the videos below

1) There is interpenetration between the robot gripper and a rigid object no matter what simulation parameters are changed

After reading in detail the Isaac Gym documentation (Simulation Setup, Simulation Parameters, Simulation Parameter Tuning, etc.) and also the PhysX 4.1 SDK Guide (Best Practice Guide, Advanced Collision Detection) it seems to be impossible to avoid the interpenetration between the robot gripper and a rigid object as shown in the videos…

The typical behavior follows the same pattern: the simulation performs correctly (or not) the contact without interpenetration of the objects for a few episodes and then enters a state in which there is always interpenetration.


  • Based on the configuration parameters shown below (which have been tested with several sets of values), how could the interpenetration problem be fixed?
  • Does the fact that the gripper’s fixed finger has a very sharp collision geometry affect the physics?

Here are, as a reference, the latest parameters used to configure the PhysX engine:

'sim': {'dt': 1 / 60.0, # 1/60: 0.0166
        'substeps': 8, 
        'up_axis': 'z', 
        'use_gpu_pipeline': True, 
        'gravity': [0.0, 0.0, -9.81], 
        'physx': {'num_threads': 4, # for CPU PhysX only
                  'solver_type': 1, # 0: pgs, 1: tgs
                  'use_gpu': True, 
                  'num_position_iterations': 12, 
                  'num_velocity_iterations': 0, 
                  'contact_offset': 0.005, 
                  'rest_offset': 0.0, 
                  'bounce_threshold_velocity': 0.08175,  # 2 * gravity * dt / num_substeps
                  'max_depenetration_velocity': 1000.0, 
                  'default_buffer_size_multiplier': 5.0, 
                  'max_gpu_contact_pairs': 8 * 1024 ** 2,
                  'friction_offset_threshold': 0.005,
                  'friction_correlation_distance': 0.001,
                  'num_subscenes': 4, 
                  'contact_collection': 2}}, # 0: CC_NEVER, 1: CC_LAST_SUBSTEP, 2: CC_ALL_SUBSTEPS

2) Force reporting is not consistent for different sensors

I am measuring the force that appears during the performance of the task (shown in the video below) using the three methods indicated in the documentation (Joint Force Sensors, Rigid Body Force Sensors and Contact Tensors (net contact force: CC_ALL_SUBSTEPS). Note: The rigid body force sensor is attached to the fixed finger.

However, based on the next graphs, only the contact tensors (net force) show values consistent with the simulation (always go down (-z) and forward (+x)). The other sensors don’t show relevant/valid information, for example, after 60 timesteps (when the gripper touches the object and a downward and forward motion is still applied).


  • Any idea why this might be happening?
  • How can I get a reliable force measurement from the other sensors?

Thanks in advance,

1 Like