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.