I’m trying to sync an Isaac Sim simulation with a real robot, and I need Isaac’s computations to run faster than the real robot. Both are looping over the same C++ controller code and so should produce the same output when the loop counts are lined up; I have successfully synchronized a PyBullet simulation and the real robot this way.
The goal is run at 500 Hz, and while PyBullet is able to complete each controller loop within 0.001 seconds, Isaac takes anywhere from 0.0015 to 0.01 seconds – much too slow! The difference persists no matter what dt values I set for Isaac, so I think it comes down to the computation time: Isaac simply can’t keep up.
I’ve tried everything I can think of to speed up Isaac – running Isaac headless, replacing self.world.step()
with omni.physx.acquire_physx_interface.update_simulation(dt, self.loop_count*dt)
, setting frequency to 400 instead of 500 Hz – to no avail. I’ve also played with a variety of world simulation parameters like flatcache, backend, and thread count, though many of my optimization attempts seem to make things worse: using GPU instead of CPU, for example, quadruples my runtime per loop.
Any suggestions for what to try to cut down Isaac’s runtime? (I’m running on Ubuntu 20.04 with 1.0 TB disk capacity, a 525.125.06 CUDA driver, 16 11th gen @ 2.30 GHz processor cores, and ~30 GB memory; I’ve noticed while running Isaac that individual cores are occupied up to 100% capacity regardless of the number of threads I use.)