--- license: apache-2.0 tags: - robotics - isaaclab - isaac-lab-arena - lerobot - envhub - simulation - manipulation --- # env-assembly-bench [EnvHub](https://huggingface.co/docs/lerobot/en/envhub) package for the NIST taskboard **assembly** benchmark on [Isaac Lab Arena](https://github.com/isaac-sim/IsaacLab-Arena). Load with one line (executes Hub code — pin a commit in production): ```python from lerobot.envs import make_env from lerobot.envs.configs import IsaaclabArenaEnv cfg = IsaaclabArenaEnv( hub_path="lukasskellijs/env_assembly_bench", environment="assembly_bench", embodiment="droid_abs_joint_pos_softmimic", headless=True, enable_cameras=True, state_keys="joint_pos,gripper_pos,eef_pos,eef_quat", camera_keys="front_cam_rgb,wrist_camera_rgb", state_dim=15, action_dim=8, enable_pinocchio=False, kwargs={"variant": "peg_round_M1_loose", "reward": "none"}, ) suites = make_env(cfg, n_envs=1, trust_remote_code=True) env = next(iter(next(iter(suites.values())).values())) ``` `cfg.task` is the natural-language prompt (LeRobot convention). The Arena variant id is `kwargs.variant` (for example `peg_round_M1_loose`). ## Prerequisites Same stack as [Isaac Lab Arena + EnvHub](https://huggingface.co/docs/lerobot/en/envhub_isaaclab_arena): - NVIDIA GPU, Isaac Sim 6.x, Isaac Lab + Isaac Lab Arena installed locally - `pip install -r requirements.txt` (Hub glue only) - Optional: `pip install -e .` so `assembly_bench` imports without a Hub snapshot EULA (once per shell): ```bash export ACCEPT_EULA=Y PRIVACY_CONSENT=Y OMNI_KIT_ACCEPT_EULA=YES ``` ## Variants 15 loose-clearance tasks plus `debug` (apple→bowl). Peg sizes use suite codes `S/M1/M2/L` (4/8/12/16 mm): | family | examples | |---|---| | peg insert | `peg_round_M1_loose`, `peg_square_L_loose` | | gear mesh | `gear_small`, `gear_medium`, `gear_large` | | nut thread | `nut_M8`, `nut_M12`, `nut_M16`, `nut_M20` | Default embodiment: `droid_abs_joint_pos_softmimic` (Franka + Robotiq, 8-D absolute joint targets, DROID cameras). ## LeRobot eval ```bash lerobot-eval \ --env.type=isaaclab_arena \ --env.hub_path=lukasskellijs/env_assembly_bench \ --env.environment=assembly_bench \ --env.embodiment=droid_abs_joint_pos_softmimic \ --env.headless=true \ --env.enable_cameras=true \ --env.state_keys=joint_pos,gripper_pos,eef_pos,eef_quat \ --env.camera_keys=front_cam_rgb,wrist_camera_rgb \ --env.state_dim=15 \ --env.action_dim=8 \ --env.enable_pinocchio=false \ --env.kwargs='{"variant": "peg_round_M1_loose"}' \ --trust_remote_code=True \ --eval.batch_size=1 \ --policy.path= ``` ## HUD [`hud_env.py`](hud_env.py) is the standard HUD robot entry: it snapshot-downloads this Hub repo, calls `env.py:make_env`, and exposes the sim via `env.gym(...)`. ```bash OMNI_KIT_ACCEPT_EULA=YES ACCEPT_EULA=Y PRIVACY_CONSENT=Y \ python -m hud.environment.server hud_env.py --port 8765 ``` Point a `RobotAgent` / `Runtime("tcp://127.0.0.1:8765")` at that port as in the HUD robots guide. ## Layout ``` env_assembly_bench/ ├── env.py # EnvHub make_env ├── hud_env.py # HUD Environment (Hub download path) ├── isaaclab_env_wrapper.py ├── example_envs.yaml ├── contract.json # HUD obs/action contract └── assembly_bench/ # Arena package + USD/HDR assets ``` ## Security `trust_remote_code=True` runs Hub Python. Review `env.py`, pin `lukasskellijs/env_assembly_bench@`, and prefer this org only if you trust it.