Randomization not working while running physics simulation

I have the following code:

from omni.isaac.kit import SimulationApp

OBJECTS_PATH = ["path/to/myusd1", "path/to/myusd2"]
N_OBJS = 30
OUTPUT = "outputs"

simulation_app = SimulationApp(launch_config={"renderer": "RayTracedLighting", "headless": True})

import random
import carb
import omni.replicator.core as rep
from omni.isaac.core import World
from omni.isaac.core.utils import prims
from omni.isaac.core.utils.stage import get_current_stage
from omni.physx.scripts import utils
from omni.replicator.core.scripts.get import mesh
from pxr import Gf, UsdGeom


# Starts replicator and waits until all data was successfully written
def run_orchestrator():
    rep.orchestrator.run()

    # Wait until started
    while not rep.orchestrator.get_is_started():
        simulation_app.update()

    # Wait until stopped
    while rep.orchestrator.get_is_started():
        simulation_app.update()

    rep.BackendDispatch.wait_until_done()
    rep.orchestrator.stop()


def main():
    rep.create.light(position=(0.0, 0.0, 1.0))

    # load objects
    objs_path = []
    objs_prim = []
    objs_rep = []
    types = []

    for idx in range(N_OBJS):
        random_idx = random.randint(0, len(OBJECTS_PATH) - 1)
        obj_path = OBJECTS_PATH[random_idx]
        path = f"/Objects/mesh_{str(idx).zfill(3)}"
        obj_prim = prims.create_prim(prim_path=path, usd_path=obj_path)
        objs_path.append(path)
        utils.setRigidBody(obj_prim, "convexHull", False)
        objs_prim.append(obj_prim)
        obj_rep = mesh(str(obj_prim.GetPrimPath()))
        objs_rep.append(obj_rep)

        types.append(random_idx)

    # place objects
    for obj_rep in objs_rep:
        with obj_rep:
            rep.modify.pose(
                position=rep.distribution.uniform((-0.3, -0.3, 0.3), (0.3, 0.3, 0.5)),
                rotation=rep.distribution.uniform((0.0, 0.0, 0.0), (360.0, 360.0, 360.0)),
            )

    # place camera
    camera_path = "/Camera"
    camera = get_current_stage().DefinePrim(camera_path, "Camera")
    camera.GetAttribute("clippingRange").Set(Gf.Vec2f(0.001, 100.0))
    camera.GetAttribute("focalLength").Set(30)
    UsdGeom.Xformable(camera).AddTranslateOp().Set((0.0, 0.0, 1.0))
    UsdGeom.Xformable(camera).AddRotateXYZOp().Set((0.0, 0.0, 0.0))

    # render
    basic_writer = rep.WriterRegistry.get("BasicWriter")
    basic_writer.initialize(output_dir=OUTPUT, rgb=True)
    render_product = rep.create.render_product(camera_path, (512, 512))
    basic_writer.attach(render_product)

    # world = World(
    #     physics_dt=1.0 / 200.0,
    #     rendering_dt=1.0 / 200.0,
    #     stage_units_in_meters=1.0,
    # )
    # world.reset()

    with rep.trigger.on_frame(num_frames=100, interval=1):
        # for obj_rep in objs_rep:
        #     with obj_rep:
        #         pass
        pass

    run_orchestrator()
    simulation_app.update()


if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        carb.log_error(f"Exception: {e}")
        import traceback

        traceback.print_exc()
    finally:
        simulation_app.close()

It works correctly.

If I uncomment only the following lines it works:

    # world = World(
    #     physics_dt=1.0 / 200.0,
    #     rendering_dt=1.0 / 200.0,
    #     stage_units_in_meters=1.0,
    # )
    # world.reset()

If I uncomment only the following lines (so the “world” lines remain commented) it works:

        # for obj_rep in objs_rep:
        #     with obj_rep:
        #         pass

But I uncomment both blocks the code throws thousand of warnings (more than 18000 warnings):

2023-04-21 16:48:19 [14,730ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,731ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,731ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,731ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,731ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,731ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,748ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719268 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
2023-04-21 16:48:19 [14,766ms] [Warning] [omni.graph.core.plugin] No source has valid data array=0x1e719430 usdValid=0 cpuValid=0 gpuValid=0 gpuAllocedWithCuda=0
...

In fact if I also try to add a randomization step in with rep.trigger.on_frame(num_frames=100, interval=1): for the objects poses like:

        for obj_rep in objs_rep:
            with obj_rep:
                rep.modify.pose(position=(0.0, 0.0, 0.5), rotation=(0.0, 0.0, 0.0))

or

        for obj_rep in objs_rep:
            with obj_rep:
                rep.modify.pose(
                    position=rep.distribution.uniform((-0.3, -0.3, 2.0), (0.3, 0.3, 2.0)),
                    rotation=rep.distribution.uniform((0.0, 0.0, 0.0), (360.0, 360.0, 360.0)),
                )

it raises the same warnings and the poses are not changed but follow only the physics simulation.

Moved to SDG forum for Replicator help.

Hi @federico.domeniconi , may I know the version of isaac sim, replicator core and the environment you are using? Thanks!

I’m using Isaac 2022.2.1 and I’m running the script with /home/federico/.local/share/ov/pkg/isaac_sim-2022.2.1/python.sh program.py.

1 Like

@federico.domeniconi I’ve run the script in Isaac Sim-2022.2.1-rc14 and it seems working fine. The position is being modified first then physics is playing. I think if you run it in the most recent version of Isaac you should be good. @mati-nvidia Can you make sure which rc version is the public released Isaac 2022.2.1 version?