Now I can apply a force on it, but I can get its postition callback.Below is my code now:
import omni.usd
import omni.physx.scripts.physicsUtils as physicsUtils
from pxr import Usd, UsdPhysics, Gf, UsdGeom
from isaacsim.core.api import SimulationContext
import carb
stage = omni.usd.get_context().get_stage()
cad_prim_path = "/World/Move/Stage/Mesh_016"
simulation_context = SimulationContext()
cad_prim = stage.GetPrimAtPath(cad_prim_path)
if not cad_prim.IsValid():
carb.log_error(f"Prim at path {cad_prim_path} is not valid. Please ensure the USD stage is loaded correctly.")
exit()
xform_api = UsdGeom.Xformable(cad_prim)
def get_prim_position_callback(step_size):
world_transform = xform_api.GetLocalTransformation()
position = world_transform.ExtractTranslation()
carb.log_info(f"Prim '{cad_prim_path}' current position: {position}")
rigid_body_api = UsdPhysics.RigidBodyAPI.Get(stage, cad_prim_path)
force_to_apply = Gf.Vec3f(0.0, 20.0, 0.0)
torque_to_apply = Gf.Vec3f(0.0, 0.0, 0.0)
physicsUtils.add_force_torque(
stage=stage,
path=cad_prim_path,
force=force_to_apply,
torque=torque_to_apply,
mode="force",
isWorldSpace=True
)
carb.log_info(f"Force applied to {cad_prim_path}. Start simulation by pressing 'Play' in the GUI to see position updates.")
simulation_context.play()
simulation_context.add_physics_callback("cad_prim_position_logger", get_prim_position_callback)
And I got this error:
Traceback (most recent call last) Traceback (most recent call last):
File “c:/isaacsim/exts/isaacsim.code_editor.vscode/isaacsim/code_editor/vscode/executor.py”, line 78, in execute
result = eval(code, self._globals, self._locals)
File “”, line 54, in
File “c:/isaacsim/exts/isaacsim.core.api/isaacsim/core/api/simulation_context/simulation_context.py”, line 967, in add_physics_callback
] = self._physics_context._physx_interface.subscribe_physics_step_events(callback_fn)
AttributeError: ‘NoneType’ object has no attribute '_physx_interface
Thanks for reply!But it still can’t work.
It looks like it still not subscribed to my PhysicScene
import omni.usd
import omni.physx.scripts.physicsUtils as physicsUtils
from pxr import Usd, UsdPhysics, Gf, UsdGeom
from isaacsim.core.api import SimulationContext
import carb
stage = omni.usd.get_context().get_stage()
cad_prim_path = "/World/Move/Stage/Mesh_016"
physics_scene_prim_path = "/World/PhysicsScene"
simulation_context = SimulationContext(physics_prim_path=physics_scene_prim_path)
simulation_context.initialize_physics()
print(simulation_context)
cad_prim = stage.GetPrimAtPath(cad_prim_path)
if not cad_prim.IsValid():
carb.log_error(f"Prim at path {cad_prim_path} is not valid. Please ensure the USD stage is loaded correctly.")
exit()
xform_api = UsdGeom.Xformable(cad_prim)
def get_prim_position_callback(step_size):
world_transform = xform_api.GetLocalTransformation()
position = world_transform.ExtractTranslation()
carb.log_info(f"Prim '{cad_prim_path}' current position: {position}")
rigid_body_api = UsdPhysics.RigidBodyAPI.Get(stage, cad_prim_path)
force_to_apply = Gf.Vec3f(0.0, 15.0, 0.0)
torque_to_apply = Gf.Vec3f(0.0, 0.0, 0.0)
physicsUtils.add_force_torque(
stage=stage,
path=cad_prim_path,
force=force_to_apply,
torque=torque_to_apply,
mode="force",
isWorldSpace=True
)
carb.log_info(f"Force applied to {cad_prim_path}. Start simulation by pressing 'Play' in the GUI to see position updates.")
simulation_context.play()
simulation_context.add_physics_callback("cad_prim_position_logger", get_prim_position_callback)
It still the same error AttributeError: ‘NoneType’ object has no attribute '_physx_interface
but when I print(simulation_context), it gets
<isaacsim.core.api.simulation_context.simulation_context.SimulationContext object at 0x000001EAF7BB7A00>
I don’t understand where is my falut
from isaacsim.core.api import SimulationContext
from isaacsim.core.api.physics_context import PhysicsContext
# set your own prim_path path here:
PhysicsContext_instance = PhysicsContext(prim_path="/World/PhysicsScene")
simulation_context = SimulationContext()
simulation_context._physics_context = PhysicsContext_instance # weird insertion to assure _physics_context, I think it is a bug.