Cannot add own usd object to scene in python

I want to add own usd object to the scene in Isaac sim with python. Here is sample of the code I use:

add_reference_to_stage(usd_path=path, prim_path=prim_path)
prim = XFormPrim(
    prim_path=prim_path, name=f"object_{self._object_count}",
    position=np.array([40, 0, 40])
)
self.get_world().scene.add(prim)

Where path is for example: "/home/user/my_object.usd" and prim_path: "/World/objects/object".
if path is a file in Isaac sim assets /Isaac/Props/Flip_Stack/screw_95_physics.usd it works, but if I try to load my own object, following error shows up:

[Error] [asyncio] [/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/kit/python/lib/python3.7/asyncio/base_events.py:1619] Task exception was never retrieved
future: <Task finished coro=<BaseSampleExtension._on_load_world.<locals>._on_load_world_async() done, defined at /home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py:161> exception=ErrorException(Error in 'pxrInternal_v0_20__pxrReserved__::UsdStage::_SetValueImpl' at line 6043 in file /buildAgent/work/ca6c508eae419cf8/USD/pxr/usd/usd/stage.cpp : 'Type mismatch for </World/objects/object_0.xformOp:orient>: expected 'GfQuatf', got 'GfQuatd'')>
Traceback (most recent call last):
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py", line 162, in _on_load_world_async
    await self._sample.load_world_async()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample.py", line 44, in load_world_async
    self.setup_scene()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/user_examples/master_thesis.py", line 55, in setup_scene
    self.add_object()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/user_examples/master_thesis.py", line 79, in add_object
    position=np.array([40, 0, 40])
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/prims/xform_prim.py", line 82, in __init__
    XFormPrim._set_xform_properties(self)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/prims/xform_prim.py", line 160, in _set_xform_properties
    XFormPrim.set_world_pose(self, position=current_position, orientation=current_orientation)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/prims/xform_prim.py", line 329, in set_world_pose
    self, translation=np.array(calculated_translation), orientation=gf_quatd_to_np_array(calculated_orientation)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/prims/xform_prim.py", line 389, in set_local_pose
    xform_op.Set(rotq)
pxr.Tf.ErrorException: 
	Error in 'pxrInternal_v0_20__pxrReserved__::UsdStage::_SetValueImpl' at line 6043 in file /buildAgent/work/ca6c508eae419cf8/USD/pxr/usd/usd/stage.cpp : 'Type mismatch for </World/objects/object_0.xformOp:orient>: expected 'GfQuatf', got 'GfQuatd''

Can somebody help me with this error?
Thank you.
lego_4x2_red_isaac.usd (327.5 KB) - my .usd file which doesn’t work.
screw_95_physics.usd (20.1 KB) - file from Isaac assets which works.

Thanks for reporting this issue!, we’re working on a proper for our bugfix release next month.

For now, if you can make the following change in
/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/prims/xform_prim.py

it should allow you to move forward.

1 Like

Okay, thank you so much for such a quick answer.

EDIT: The text below describes error with Physics context, but now I found, if I change prim path of method _create_new_physics_scene() to "/World/physicsScene" (change capital P to small p) it works. Unfortunatelly, I don’t know why :D

It looks like it loaded the model to the scene, but after I load the model I want to start a simulation.
With /Isaac/Props/Flip_Stack/screw_95_physics.usd it works, but with my .usd file I get following error:

[Error] [asyncio] [/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/kit/python/lib/python3.7/asyncio/base_events.py:1619] Task exception was never retrieved
future: <Task finished coro=<BaseSampleExtension._on_load_world.<locals>._on_load_world_async() done, defined at /home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py:161> exception=Exception("The Physics Context's physics scene path is invalid, you need to reinit Physics Context")>
Traceback (most recent call last):
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample_extension.py", line 162, in _on_load_world_async
    await self._sample.load_world_async()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/base_sample/base_sample.py", line 44, in load_world_async
    self.setup_scene()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/user_examples/master_thesis.py", line 53, in setup_scene
    self.add_object()
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.examples/omni/isaac/examples/user_examples/master_thesis.py", line 77, in add_object
    self._world.step(render=False)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/world/world.py", line 286, in step
    SimulationContext.step(self, render=render)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/simulation_context/simulation_context.py", line 434, in step
    self._physics_context._step(current_time=self.current_time)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/physics_context/physics_context.py", line 340, in _step
    self._physx_interface.update_simulation(elapsedStep=self.get_physics_dt(), currentTime=current_time)
  File "/home/filip/.local/share/ov/pkg/isaac_sim-2021.2.0/exts/omni.isaac.core/omni/isaac/core/physics_context/physics_context.py", line 134, in get_physics_dt
    raise Exception("The Physics Context's physics scene path is invalid, you need to reinit Physics Context")
Exception: The Physics Context's physics scene path is invalid, you need to reinit Physics Context

here is the code I use to load and simulate objects physics (it’s based on Hello world example)

    def setup_scene(self):
        world_usd_file = "/path/to/scene.usd" 
        omni.usd.get_context().open_stage(world_usd_file, None)
        self._world = self.get_world()
        self._world.reset()
        self._scene = self._world.scene

        self._world.get_physics_context()._create_new_physics_scene("/World/PhysicsScene")
        self._world.reset()
        self._world.clear_instance()

        spawn_count = 200
        for i in range(spawn_count):
            self.add_object()
        # stabilize objects after simulation
        for i in range(20):
            self._world.step(render=False)

        return


    def add_object(self):
        path = "/path/to/object.usd"
        prim_path = f"/World/objects/object_{self._object_count}"
        add_reference_to_stage(usd_path=path, prim_path=prim_path)
        prim = XFormPrim(
            prim_path=prim_path, name=f"object_{self._object_count}",
            position=np.array([40, 0, 40])
        )
        self._objects.append(
            self._scene.add(prim)
        )
        self._object_count += 1
        # # simulate falling of an object
        for i in range(5):
            self._world.step(render=False)


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