"""Inspect USD asset dimensions using usd-core (no Isaac Lab needed). Usage: uv run --with usd-core python scripts/inspect_assets.py """ from pathlib import Path from pxr import Usd, UsdGeom REPO_ROOT = Path(__file__).resolve().parents[1] ASSETS = REPO_ROOT / "assets" / "toy_sorting" FILES = { "table": ASSETS / "Table049/Table049.usd", "tray": ASSETS / "InteractiveAsset/SM_P_Flavour_02/Collected_SM_P_Flavour_02/Props/SM_P_Tray_01.usd", "box": ASSETS / "Kitchen_Other/Kitchen_Box.usd", "disk": ASSETS / "Kitchen_Other/Kitchen_Disk001.usd", } for name, path in FILES.items(): if not path.exists(): print(f"{name}: NOT FOUND at {path}") continue stage = Usd.Stage.Open(str(path)) mpu = UsdGeom.GetStageMetersPerUnit(stage) up_axis = UsdGeom.GetStageUpAxis(stage) bbox_cache = UsdGeom.BBoxCache(Usd.TimeCode.Default(), [UsdGeom.Tokens.default_]) bbox = bbox_cache.ComputeWorldBound(stage.GetPseudoRoot()) rng = bbox.GetRange() mn, mx = rng.GetMin(), rng.GetMax() size = (mx[0]-mn[0], mx[1]-mn[1], mx[2]-mn[2]) # Isaac Sim is Z-up. If asset is Y-up, Isaac converts Y→Z (rotates -90° around X). # After conversion: asset_Y becomes world_Z (height), asset_Z becomes world_-Y. if up_axis == UsdGeom.Tokens.y: up_idx, up_label = 1, "Y (will be converted to Z by Isaac Sim)" else: up_idx, up_label = 2, "Z (matches Isaac Sim, no conversion needed)" height_in_usd = size[up_idx] surface_in_usd = mx[up_idx] # top of the bounding box in the up direction print(f"\n=== {name} ===") print(f" upAxis : {up_axis} → {up_label}") print(f" metersPerUnit : {mpu}") print(f" bbox min : ({mn[0]:.3f}, {mn[1]:.3f}, {mn[2]:.3f})") print(f" bbox max : ({mx[0]:.3f}, {mx[1]:.3f}, {mx[2]:.3f})") print(f" size (x,y,z) : ({size[0]:.3f}, {size[1]:.3f}, {size[2]:.3f})") print(f" HEIGHT axis : {'Y' if up_idx==1 else 'Z'} = {height_in_usd:.3f} USD units") print(f" surface (top) : {surface_in_usd:.3f} USD units") print(f" => at scale=1.0: surface at world_Z = {surface_in_usd * mpu:.4f} m") print(f" => REAL size (W x D x H): {size[0]*mpu:.3f} x {size[2 if up_idx==1 else 1]*mpu:.3f} x {height_in_usd*mpu:.3f} m")