Instructions to use lukasskellijs/env_assembly_bench with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- LeRobot
How to use lukasskellijs/env_assembly_bench with LeRobot:
- Notebooks
- Google Colab
- Kaggle
| """Smoke-test: load make_env from a Hub snapshot (or local checkout) and step. | |
| Usage (isaac conda, GPU):: | |
| ASSEMBLY_BENCH_HUB=lukasskellijs/env_assembly_bench \\ | |
| ACCEPT_EULA=Y PRIVACY_CONSENT=Y OMNI_KIT_ACCEPT_EULA=YES \\ | |
| python scripts/smoke_hub_load.py --from-hub --steps 5 | |
| # Local checkout (no Hub round-trip): | |
| python scripts/smoke_hub_load.py --local --steps 5 | |
| """ | |
| from __future__ import annotations | |
| import argparse | |
| import importlib.util | |
| import logging | |
| import os | |
| import sys | |
| from pathlib import Path | |
| from types import SimpleNamespace | |
| ROOT = Path(__file__).resolve().parents[1] | |
| def _load_env_module(root: Path): | |
| env_py = root / "env.py" | |
| root_str = str(root) | |
| # Hub package must win over any editable/local assembly_bench install. | |
| if root_str in sys.path: | |
| sys.path.remove(root_str) | |
| sys.path.insert(0, root_str) | |
| for name in list(sys.modules): | |
| if name == "assembly_bench" or name.startswith("assembly_bench."): | |
| del sys.modules[name] | |
| spec = importlib.util.spec_from_file_location("env_assembly_bench_env", env_py) | |
| module = importlib.util.module_from_spec(spec) | |
| assert spec.loader is not None | |
| spec.loader.exec_module(module) | |
| return module | |
| def main() -> None: | |
| logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s") | |
| p = argparse.ArgumentParser() | |
| p.add_argument("--from-hub", action="store_true", help="snapshot_download from Hub") | |
| p.add_argument("--local", action="store_true", help="use this checkout") | |
| p.add_argument("--steps", type=int, default=5) | |
| p.add_argument("--variant", default="peg_round_M1_loose") | |
| p.add_argument("--num-envs", type=int, default=1) | |
| args = p.parse_args() | |
| if args.from_hub == args.local: | |
| p.error("pass exactly one of --from-hub or --local") | |
| if args.from_hub: | |
| from huggingface_hub import snapshot_download | |
| hub = os.environ.get("ASSEMBLY_BENCH_HUB", "lukasskellijs/env_assembly_bench") | |
| # Force a re-fetch when HF_HUB_FORCE_DOWNLOAD is set; otherwise use cache. | |
| root = Path( | |
| snapshot_download( | |
| repo_id=hub, | |
| force_download=os.environ.get("HF_HUB_FORCE_DOWNLOAD", "") == "1", | |
| ) | |
| ) | |
| logging.info("Hub snapshot at %s", root) | |
| else: | |
| root = ROOT | |
| logging.info("Local checkout at %s", root) | |
| module = _load_env_module(root) | |
| cfg = SimpleNamespace( | |
| environment="assembly_bench", | |
| embodiment="droid_abs_joint_pos_softmimic", | |
| object=None, | |
| mimic=False, | |
| teleop_device=None, | |
| seed=0, | |
| device="cuda:0", | |
| disable_fabric=False, | |
| enable_cameras=True, | |
| headless=True, | |
| enable_pinocchio=False, | |
| episode_length=50, | |
| state_dim=15, | |
| action_dim=8, | |
| camera_height=720, | |
| camera_width=1280, | |
| video=False, | |
| video_length=10, | |
| video_interval=15, | |
| state_keys="joint_pos,gripper_pos,eef_pos,eef_quat", | |
| camera_keys="front_cam_rgb,wrist_camera_rgb", | |
| task=None, | |
| variant=args.variant, | |
| reward="none", | |
| hdr="asm_machine_shop", | |
| light_intensity=1500.0, | |
| ) | |
| suites = module.make_env(n_envs=args.num_envs, use_async_envs=False, cfg=cfg) | |
| env = next(iter(next(iter(suites.values())).values())) | |
| obs, info = env.reset(seed=0) | |
| logging.info("reset ok; task=%r keys=%s", env.task, list(obs.keys()) if isinstance(obs, dict) else type(obs)) | |
| for i in range(args.steps): | |
| action = env.action_space.sample() | |
| obs, reward, terminated, truncated, info = env.step(action) | |
| logging.info( | |
| "step %d reward=%s term=%s trunc=%s", | |
| i, | |
| getattr(reward, "mean", lambda: reward)(), | |
| terminated, | |
| truncated, | |
| ) | |
| if terminated.any() or truncated.any(): | |
| obs, info = env.reset() | |
| # Kit's SimulationApp.close() terminates the process — log success first. | |
| print("smoke ok", flush=True) | |
| logging.info("smoke ok") | |
| env.close() | |
| if __name__ == "__main__": | |
| main() | |