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
File size: 4,064 Bytes
c2c0566 d9123b7 c2c0566 d9123b7 c2c0566 d9123b7 1b5c78c d9123b7 c2c0566 d9123b7 c2c0566 d9123b7 c2c0566 1b5c78c d9123b7 c2c0566 d9123b7 c2c0566 1b5c78c c2c0566 1b5c78c c2c0566 1b5c78c c2c0566 1b5c78c c2c0566 0240e37 1b5c78c c2c0566 0240e37 d9123b7 | 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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | """HUD integration smoke: Hub → make_env → ``hud.environment.robot.wrap`` → step.
This is the loop-owning HUD path (traces stream when HUD_API_KEY is set).
For the served path, run::
python -m hud.environment.server hud_env.py --port 8765
Usage (isaac conda, free GPU)::
ACCEPT_EULA=Y PRIVACY_CONSENT=Y OMNI_KIT_ACCEPT_EULA=YES \\
ASSEMBLY_BENCH_HUB=lukasskellijs/env_assembly_bench \\
python scripts/smoke_hud.py --steps 3
"""
from __future__ import annotations
import argparse
import importlib.util
import logging
import os
import sys
import tempfile
from pathlib import Path
from types import SimpleNamespace
ROOT = Path(__file__).resolve().parents[1]
def _hub_make_env(variant: str, num_envs: int):
from huggingface_hub import snapshot_download
hub = os.environ.get("ASSEMBLY_BENCH_HUB", "lukasskellijs/env_assembly_bench")
root = snapshot_download(repo_id=hub)
if root in sys.path:
sys.path.remove(root)
sys.path.insert(0, root)
for name in list(sys.modules):
if name == "assembly_bench" or name.startswith("assembly_bench."):
del sys.modules[name]
env_py = Path(root) / "env.py"
spec = importlib.util.spec_from_file_location("env_assembly_bench_hub_env", env_py)
module = importlib.util.module_from_spec(spec)
assert spec.loader is not None
spec.loader.exec_module(module)
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=variant,
reward="none",
hdr="asm_machine_shop",
light_intensity=1500.0,
)
suites = module.make_env(n_envs=num_envs, use_async_envs=False, cfg=cfg)
env = next(iter(next(iter(suites.values())).values()))
return env, Path(root)
def main() -> None:
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(message)s")
p = argparse.ArgumentParser()
p.add_argument("--variant", default="peg_round_M1_loose")
p.add_argument("--steps", type=int, default=3)
p.add_argument("--num-envs", type=int, default=1)
args = p.parse_args()
from hud.environment.robot import wrap
logging.info("loading EnvHub package + building Arena env...")
raw, hub_root = _hub_make_env(args.variant, args.num_envs)
# Writable contract path (cwd may be read-only in containers).
contract = Path(tempfile.gettempdir()) / "env_assembly_bench_hud_contract.json"
if not contract.is_file():
bundled = hub_root / "contract.json"
if bundled.is_file():
contract.write_text(bundled.read_text())
# HUD wrap: contract probe + optional telemetry job for the rollout.
env = wrap(raw, job="envhub-assembly-smoke", contract=str(contract))
obs, info = env.reset(seed=0)
print("HUD reset ok", flush=True)
logging.info("HUD reset ok; obs type=%s", type(obs))
for i in range(args.steps):
action = env.action_space.sample()
obs, reward, terminated, truncated, info = env.step(action)
print(f"HUD step {i}", flush=True)
logging.info("HUD step %d reward=%s", i, reward)
if getattr(terminated, "any", lambda: bool(terminated))() or getattr(
truncated, "any", lambda: bool(truncated)
)():
obs, info = env.reset()
# Kit's SimulationApp.close() terminates the process — log success first.
print("HUD smoke ok", flush=True)
logging.info("HUD smoke ok")
env.close()
if __name__ == "__main__":
main()
|