Particle Emitter + GPU Dynamics Error in Isaac Sim Extension

Hi everyone,

I’m working on a custom extension trying to combine the modified trajectory_generator_example ( Lula Trajectory Generator — Isaac Sim Documentation ), and with a a particle emitter (based on FluidBallEmitterDemo.py).

Separately, both work nicely. Even an extention I made out of the FluidBallEmitterDemo works good.

Issue:

When I run taskspace trajectory movement (i need this type of movement only), I get the error:

[omni.physx.plugin] Particles feature is only supported on GPU. Please enable GPU dynamics flag in Property/Scene of physics scene!

This happens with both: Use_Instancer = True or False

What should happen:

Robot follows a Cartesian path (continuous IK update). - works

Particle system/emitter is started from the same button and updated every physics step. - error (some primitives spawned but do not behave as physical particles).

What I have tried so far:

  1. Explicitly setting GPU dynamics via PhysxSceneAPI. In Physics/Scene the Checkmark “Enable GPU dynamics” looks activated

  2. finding the actual UsdPhysics.Scene in the stage, enabling GPU dynamics on that scene, using the same scene path as simulation_owner when creating particle system

Isaac versions

5.1.0
5.0.0

Operating System
Windows 11

Hi, Can you try to enable GPU dynamics globally via SimulationManager to see if that works?

from isaacsim.core.simulation_manager import SimulationManager

#Enable GPU dynamics BEFORE creating particle system or starting timeline
SimulationManager.enable_gpu_dynamics(flag=True)

Hi, thanks for your reply!

I tried a few placements for the GPU dynamics enable:

First, in scenario.py SimulationManager.enable_gpu_dynamics(flag=True) before particle creation. Did not work.

Second, i tried to place it inside _setup_taskspace_particles() (right before add_physx_particle_system) Did not work.

I also tried to place it in ui_builder.py right before timeline.play() Did not work.

Third, I tried to moved it so it runs on import of the mentioned Lula trajectory generator example:

a) at the top of scenario.py Did not work.

b) in extension.py before importing UIBuilder/scenario:

from isaacsim.core.simulation_manager import SimulationManager

SimulationManager.enable_gpu_dynamics(flag=True)

Nothing worked. The error message remained always the same.

Seems the issue is that the Lula trajectory generator might be creating or resetting the physics scene in a way that disables GPU dynamics after you’ve enabled it. Can you check if GPU dynamics is actually enabled with following code?

from pxr import PhysxSchema, UsdPhysics

def check_gpu_dynamics():
    stage = omni.usd.get_context().get_stage()
    physics_scene_path = "/physicsScene"  # or your scene path
    physics_scene = stage.GetPrimAtPath(physics_scene_path)
    
    physx_api = PhysxSchema.PhysxSceneAPI(physics_scene)
    gpu_enabled = physx_api.GetEnableGPUDynamicsAttr().Get()
    
    print(f"GPU Dynamics enabled: {gpu_enabled}")
    return gpu_enabled

So, enabling GPU dynamics globally via SimulationManager.enable_gpu_dynamics(flag=True) before the timeline starts and before creating the particle system remains in my code

What i did: I added the check_gpu_dynamics() diagnostic at multiple points in scenario.py. Results:

After LulaKinematicsSolver created: False

After reset(): False (after pressing the reset button )

At start of setup_taskspace_trajectory(): False

After explicitly setting PhysxSceneAPI.enableGPUDynamics = True: True

(here is the code for that step:

def _enable_gpu_dynamics(self):

stage = omni.usd.get_context().get_stage()

scene_prim = self._get_or_create_physics_scene_prim(stage)

physx_scene_api = PhysxSchema.PhysxSceneAPI.Apply(scene_prim)

physx_scene_api.CreateEnableGPUDynamicsAttr(True)

self._physics_scene_path = scene_prim.GetPath().pathString

return self._physics _scene_path

But I still get the aforement ioned error…

PS Initially, both my robot (“kuka”) and the physicsScene were outside of /World. moving them all under /World ( screenshot)

does not help either and i become the False and True flags in the same order as described above

So enabling GPU dynamics via SimulationManager.enable_gpu_dynamics(flag=True) is working as expected. I have no idea what’s the issue now. If you have a minimal repro case, we can take a further look.