"""Is gravity actually simulated at all right now? Check PhysicsScene + one item's live state.""" import omni.usd, omni.timeline from pxr import UsdPhysics, PhysxSchema, UsdGeom, Usd import isaacsim.core.experimental.utils.app as app_utils from isaacsim.core.experimental.prims import RigidPrim stage = omni.usd.get_context().get_stage() tl = omni.timeline.get_timeline_interface() print("timeline playing:", tl.is_playing()) sc = stage.GetPrimAtPath("/World/PhysicsScene") print("PhysicsScene valid:", sc.IsValid()) if sc.IsValid(): physxScene = PhysxSchema.PhysxSceneAPI(sc) print(" gravityMagnitude:", sc.GetAttribute("physics:gravityMagnitude").Get()) print(" gravityDirection:", sc.GetAttribute("physics:gravityDirection").Get()) print(" timeStepsPerSecond:", sc.GetAttribute("physxScene:timeStepsPerSecond").Get()) print(" enableCCD:", sc.GetAttribute("physxScene:enableCCD").Get()) name = "bottle" prim = stage.GetPrimAtPath(f"/World/Items/{name}") print(f"\n{name} prim valid:", prim.IsValid()) print(" applied schemas:", list(prim.GetAppliedSchemas())) print(" kinematicEnabled:", prim.GetAttribute("physics:kinematicEnabled").Get()) attr = prim.GetAttribute("xformOp:translate") print(" authored translate:", attr.Get()) rp = RigidPrim(paths=[f"/World/Items/{name}"]) print(" RigidPrim world pose (fabric):", rp.get_world_poses()[0].numpy()[0]) # check mass / collision on descendant meshes n_col = 0 for p in Usd.PrimRange(prim): if p.HasAPI(UsdPhysics.CollisionAPI) or p.HasAPI(UsdPhysics.MeshCollisionAPI): n_col += 1 print(" descendant prims with CollisionAPI:", n_col) print("\n=== stepping physics 60 more times, watching bottle's Z ===") if not tl.is_playing(): tl.play() for i in range(6): await app_utils.update_app_async(steps=10) p = rp.get_world_poses()[0].numpy()[0] print(f" step batch {i}: pos={p} playing={tl.is_playing()} time={tl.get_current_time():.3f}")