Problem reading the contact sensor on IsaacSim

Hi!
I am trying to read a contact sensor on IsaacSim using the standalone Python API workflow.
I did a minimal example as follows. I am creating a scene, a default ground, a dynamic sphere, and a contact sensor attached to the dynamic sphere. However, the readings of the contact sensor are always zero. What I am missing?

Thank you in advance

import omni
from omni.isaac.kit import SimulationApp



CONFIG = {"renderer": "RayTracedLighting", 
          "width": "1920",
          "height": "1080",
          "headless": False} #False

simulation_app = SimulationApp(CONFIG) # we can also run as headless.




from omni.isaac.core import World
from omni.isaac.core.objects import DynamicSphere
from omni.isaac.isaac_sensor import _isaac_sensor
from omni.isaac.core.utils.viewports import set_camera_view
import omni.physxdemos as demo
import omni.physx as _physx
import rosgraph
import numpy as np
from pxr import Gf
import omni.kit.commands


simulation_app.update()
world = World(stage_units_in_meters=1.0)
world.scene.add_default_ground_plane()
simulation_app.update()
simulation_app.update()
set_camera_view(eye=np.array([30, 30, 40]), target=np.array([0, 0, 0]))

sphere = world.scene.add(
                    DynamicSphere(
                        prim_path="/World/Sphere", 
                        name="sphere",
                        position=np.array([0, 0, 15.91708]), # Using the current stage units which is in meters by default.
                        radius=0.3, # most arguments accept mainly numpy arrays.
                        color=np.array([0, 0, 1.0]),
                        mass = 100,
                        visible = True,
                            # RGB channels, going from 0-1
                        )
                    )
sensor_path = "/World/Sphere"       


world.reset()



sphere_egg_breaker = world.scene.get_object("sphere_egg_breaker")


result, sensor = omni.kit.commands.execute(
                "IsaacSensorCreateContactSensor",
                path="/sensor",
                parent= sensor_path,
                min_threshold=0,
                max_threshold=10000000,
                color= (1, 0, 0, 1),
                radius=0.4, #0.01
                sensor_period=0.5,
                offset= Gf.Vec3d(0,0,0),
                visualize=True,)

_cs = _isaac_sensor.acquire_contact_sensor_interface()   


i = 0
while simulation_app.is_running():
    world.step(render=True)

    if world.is_playing():
        if world.current_time_step_index == 0:
            world.reset()
        i = i+1        
        
        readings = _cs.get_sensor_sim_reading(sensor_path +"/sensor")
        print("Contact sensor: ", readings.inContact, readings.time, readings.value)
        print(i)       
    
simulation_app.close() # close Isaac Sim

[Update] I realized that the code is working on Windows. When I run the script on Linux does not work (when I use the IMU sensor instead the contact sensor, the code works on Linux).

Hello!

Can you try on version 2022.1.1? I tried your script here and it worked fine.

just one small change, I had to change the parameter offset to translation when creating the contact sensor, as the command parameters were refactored.

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