File size: 2,373 Bytes
7399b6f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
"""Convert selected RobotWin (MIT) GLB objects to USD so they can be spawned in the YAM Isaac Lab env."""
import argparse, sys, os, json
from isaaclab.app import AppLauncher
p=argparse.ArgumentParser()
p.add_argument("--jobs", default="021_cup:base0,002_bowl:base0,001_bottle:base0,008_tray:base0")
# Containers (basket / bin / rack) must keep their concave cavity: a convex decomposition fills
# the inside, so objects land ON the container and roll off. Static containers can use the raw
# triangle mesh ("none"); dynamic graspable objects still need convexDecomposition.
p.add_argument("--collision", default="convexDecomposition",
               choices=["convexDecomposition","convexHull","meshSimplification","boundingCube","none"])
p.add_argument("--suffix", default="", help="append to the usd filename, e.g. _mesh for a mesh-collision variant")
AppLauncher.add_app_launcher_args(p); a=p.parse_args(); a.headless=True
app=AppLauncher(a).app
from isaaclab.sim.converters import MeshConverter, MeshConverterCfg
import isaaclab.sim as sim_utils
SRC=os.environ.get("ROBOTWIN_SRC", "/home/horde/xiaotong/robotwin_assets/objects")
OUT=os.environ.get("ROBOTWIN_USD", "/home/horde/xiaotong/robotwin_assets/usd")
os.makedirs(OUT, exist_ok=True)
for job in a.jobs.split(","):
    cat,inst=job.split(":")
    glb=f"{SRC}/{cat}/visual/{inst}.glb"
    if not os.path.exists(glb): print("[conv] MISSING", glb, flush=True); continue
    # scale from model_data (index = instance number)
    scale=None
    mdi=f"{SRC}/{cat}/model_data{inst.replace('base','')}.json"
    if os.path.exists(mdi):
        try: scale=json.load(open(mdi)).get("scale")
        except Exception: pass
    cfg=MeshConverterCfg(
        asset_path=glb, usd_dir=f"{OUT}/{cat}", usd_file_name=f"{inst}{a.suffix}.usd",
        force_usd_conversion=True, make_instanceable=False,
        rigid_props=sim_utils.RigidBodyPropertiesCfg(),          # bake RigidBodyAPI into the USD
        mass_props=sim_utils.MassPropertiesCfg(mass=0.10),
        collision_props=sim_utils.CollisionPropertiesCfg(),
        collision_approximation=a.collision,
    )
    try:
        conv=MeshConverter(cfg)
        print(f"[conv] OK {cat}:{inst} scale={scale} -> {conv.usd_path}", flush=True)
    except Exception as e:
        print(f"[conv] FAIL {cat}:{inst}: {e}", flush=True)
app.close(); print("CONVERT_DONE", flush=True)