Different numerical depth values in Laserscan running the same simulation many times

Hi all,
I’m interested in using Isaac Sim to reproduce and investigate faulty situations about my own developed robotic behaviours, so I need the simulator evolves exactly the same way (produces same output and update) starting from the same conditions (input, internal state, etc.).

To test the previous capability, I’ve built a dummy scene (dummyScene.project.usd) and print on console 4 depth values of the Laserscan every simulation frame using a custom Action Graph Node (implemented in LaserPrinter.ogn and LaserPrinter.py).
Running the simulation many times, numerical changes can be noted in the first frames (OutputComparison, Test2.txt vs Text3.txt).

Is it possible to remove that variations to get the repeatability of the simulation?

Other useful information:

  1. To start a new simulation, I reloaded the scene WITHOUT saving changes made by the previous simulation.
  2. The dummy scene contains a robot, controlled using a constant zero velocity setpoint, and some standard 3D bodies (they all have physics and collision active to interact with the LIDAR attached to the robot).
  3. HW and SW configuration:
    -CPU: Intel(R) Core™ i9-10900K CPU @ 3.70GHz
    -Mother Board: ROG STRIX Z490-E GAMING
    -GPU: NVIDIA GeForce RTX 3090
    -OS: 20.04.1-Ubuntu
    -NVIDIA driver version: 515.65.01
    -Isaac Sim: 2022.1.1 (updated from 2022.1.0 Beta) as Standalone application

Thank you all. Regards,

dummyScene.project.usd (188.1 KB)
LaserPrinter.ogn (649 Bytes)
LaserPrinter.py (745 Bytes)

Test2.txt (636 Bytes)
Test3.txt (635 Bytes)

The GPU solver, due to its multithreaded nature will return the same steady state result but might be slightly different (within floating point error) until the simulation settles.

You can switch to the CPU based solver, I believe that should provide more consistent results.
PhysicsScene → BroadphaseType → MBP
PhysicsScene → Enable GPU Dynamics → False

thanks for your reply.

I changed the two parameters as suggested with no luck.

I also mixed changes to:
PhysicsScene → Advanced → Enable Enhanced Determinism → true
PhysicsScene → Advanced → Enable Stabilization → true/false
PhysicsScene → Collision System
PhysicsScene → Solver Type
PhysicsScene → BroadphaseType
without success.

I even set Edit → Preferences → Physics → Simulator → Num Simulation Threads → 1 so multithread should be disable. I’ve also disabled hyper-threading, Dynamic frequency scaling (keeping all cores at maximum speed) and turbo boost, but nothing changed.

What am I missing?

Thank you in advance

Is physic and render steps have fixed duration?

How can I check if physics and render step have fixed duration?

At the moment I measured the time elapsed from the Graph Node (attachment LaserPrinter.py) execution and the next one.
The node also prints the laser scan ranges.

The elapsed time is never the same (attachment outcome.txt), so I think physics step is not fixed if Action Graph is executed on each physics step (as I suppose since the Articulation Controller node “moves” the joints of robots).

The USD attachment is the scene used for testing and the OGN file describes the Graph node interface.
Simulation threads number is 1.

LaserPrinter.py (1.0 KB)
outcome.txt (2.7 KB)

dummyScene_enh_stab_noQuerySupport_cpu.project.usd (132.0 KB)
LaserPrinter.ogn (649 Bytes)