fix: IS 4.5.0 -> 5.0.0 migration — USD metadata, DomeLight, scene reuse

- Fix USD metersPerUnit/upAxis for IS 5.0.0 (no longer auto-compensated)
- Batch fix all Aligned_obj.usd, table, and art USD files with backups
- Fix DomeLight rotation to Z-axis only (prevent tilted environment map)
- Fix scene reuse across episodes (arena_file caching, task clearing, prim guard)
- Add migration tools: scan_usd_metadata.py, fix_usd_metadata.py
- Add migration guide: migerate/migerate.md
- Add nvidia-curobo to .gitignore
- Fix sort_the_rubbish config: obj_0 -> obj_1 (obj_0 does not exist)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Tangger
2026-04-03 11:10:39 +08:00
parent f338199bcb
commit 03d9a5b909
65 changed files with 862 additions and 6 deletions

View File

@@ -159,13 +159,44 @@ class SimBoxDualWorkFlow(NimbusWorkFlow):
global_collision_paths,
)
self.world.reset()
# [RESET_DBG] Check object xformOps right after world.reset()
try:
from pxr import UsdGeom
for obj_name, obj in self.task.objects.items():
_xf = UsdGeom.Xformable(get_prim_at_path(obj.prim_path))
for _op in _xf.GetOrderedXformOps():
if 'translate' in _op.GetName().lower():
print(f"[RESET_DBG] {obj_name} after_world_reset: {_op.GetName()} = {_op.Get()}", flush=True)
except Exception as _e:
print(f"[RESET_DBG] after_world_reset error: {_e}", flush=True)
self.world.step(render=True)
# [RESET_DBG] Check after first world.step(render=True)
try:
for obj_name, obj in self.task.objects.items():
_xf = UsdGeom.Xformable(get_prim_at_path(obj.prim_path))
for _op in _xf.GetOrderedXformOps():
if 'translate' in _op.GetName().lower():
print(f"[RESET_DBG] {obj_name} after_first_step: {_op.GetName()} = {_op.Get()}", flush=True)
except Exception as _e:
print(f"[RESET_DBG] after_first_step error: {_e}", flush=True)
self.controllers = self._initialize_controllers(self.task, self.task_cfg, self.world)
self.skills = self._initialize_skills(self.task, self.task_cfg, self.controllers, self.world)
for _ in range(50):
for _i in range(50):
self._init_static_objects(self.task)
self.world.step(render=False)
# [RESET_DBG] Check at step 0, 1, 49
if _i in (0, 1, 49):
try:
for obj_name, obj in self.task.objects.items():
_xf = UsdGeom.Xformable(get_prim_at_path(obj.prim_path))
for _op in _xf.GetOrderedXformOps():
if 'translate' in _op.GetName().lower():
print(f"[RESET_DBG] {obj_name} after_warmup_step_{_i}: {_op.GetName()} = {_op.Get()}", flush=True)
except Exception as _e:
print(f"[RESET_DBG] after_warmup_step_{_i} error: {_e}", flush=True)
self.logger = LmdbLogger(
task_dir=self.task_cfg["data"]["task_dir"],