Best Practices for Monitoring Collisions Between Agent and Environment in RL


Hello NVIDIA Community,

I am currently working on customized RL agent for applications like pick-and-place in complex environments with the help of Omniverse and Isaac Sim.

What could be the best practices for monitoring interactions, specifically collisions, between the agent and its environment? I am particularly interested in understanding the most efficient way to use them inside methods like RLTask.is_done (get_observations, calculate_metrics, etc.) which are called from post_physics_step.

One solution I have found from omniisaacgymenvs examples is to wrap an RigidPrimView enabling track_contact_forces=True and then use it:
knee_contact = self._frankas._hands.get_net_contact_forces(clone=False)

Is it the best/only way in Isaacsim?

To conclude my questions:

  1. How to best track collisions for manipulator style robot?
  2. Manipulator can collide with itself or some obstacle meaning an end and reset of the environment. What to do with surfaces which must collide, like gripper finger inner parts?
  3. In the stage where manipulator holds an object, how to track this object collisions with environment? Any specifics on this part?
  4. Does RigidPrimView needs to be wrapped around every robot part/link? ArticulationView doesn’t have track_contact_forces.

Any advice or pointers you could provide would be incredibly helpful as I continue to refine my approach to this aspect of my project.

Thank you in advance for your time and help!