Isaac Sim too slow for real-time synchronization

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.)

I have 16 cores, but only one or two cores are using 100%(others are not seem to be used) while running simulation. Is there a way to use multi-core as much as possible to speed up the simulation process?

  • Ubuntu 22.04
  • Xeon(R) Gold 6226R
  • RAM 128GB
  • RTX A6000
  • Isaac Sim 2022.2.1
1 Like

It turns out my particular runtime issue was due to a combination of other factors, but if anyone is still experiencing a similar issue, it unfortunately doesn’t look like Isaac 2022.2.1 is optimized for all use cases … How to speed up simulation in Isaac-Sim - #6 by rthaker

For the curious, I was able to shave off a couple crucial milliseconds by referencing the Isaac Sim source code (~/.local/share/ov/pkg/isaac_sim-2022.2.1/) to avoid unnecessary overhead.

For example, I replaced the line self.position = self.robot.get_world_pose()[0] with the code below to earn back 0.003 seconds:

world_pose = self.robot._prim_view._physics_view.get_root_transforms()[0]
self.position = world_pose[0:3]

Obviously, this kind of workaround isn’t ideal, especially since it almost defeats the purpose of having a tool as theoretically powerful as Isaac Sim. However, if you also have a small program that probably won’t have to be changed too often, I’d suggest trying this hack to help reduce runtime.

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