Installation¶
ManiGuard runs in the behavior conda env — OmniGibson simulation, BDDL,
teleop, task generation, scripted data generation, and eval. Policy training/serving
runs in each model's own environment (openpi / GR00T / SmolVLA — see the
Fine-Tuning pages).
1. Clone with submodules¶
git clone --recursive https://github.com/NU-IDEAS-Lab/ManiGuard.git
cd ManiGuard
# or, if already cloned:
git submodule update --init --recursive
2. Install BEHAVIOR-1K + dataset¶
This runs upstream's setup.sh from inside the submodule. --dataset downloads
the encrypted assets into behavior-1k/datasets/, which matches OmniGibson's
default resolver — no env var needed afterwards.
Available flags: --omnigibson, --bddl, --joylo, --dataset, --eval,
--asset-pipeline, --primitives, --dev.
Dependencies: --omnigibson requires --bddl; --primitives and --dataset require
--omnigibson; --eval requires --omnigibson + --joylo.
3. Install ManiGuard (editable)¶
conda activate behavior
pip install -e . # base
pip install -e ".[serve]" # with policy-server extras
4. ManiGuard-Bench + robot asset¶
To run the benchmark you need two ManiGuard-owned artifacts (both separate from the Stanford-licensed BEHAVIOR asset bundle, both hosted on HuggingFace).
4a. Robot asset (required). The benchmark uses a Franka Panda with extended
fin-ray fingers — not part of the stock OmniGibson robot set. Drop it into the
robot-assets tree so the runtime patch (maniguard._omnigibson_patches) finds it.
It must land at <data_root>/omnigibson-robot-assets/models/franka/franka_panda_longfinger/,
where <data_root> is behavior-1k/datasets/ (or $OMNIGIBSON_DATA_PATH):
hf download IDEAS-Lab-Northwestern/franka-panda-longfinger --repo-type dataset \
--local-dir behavior-1k/datasets/omnigibson-robot-assets/models/franka/franka_panda_longfinger
On import maniguard, FrankaPanda.usd_path is auto-redirected to this bundle when
present (it ships the OmniGibson runtime USD + cuRobo description; no URDF needed at
runtime). Set MANIGUARD_SKIP_LONGFINGER=1 to keep the stock Franka instead.
A missing bundle fails silently
If the directory is absent, the stock Franka hand loads with no error — and policies trained on ManiGuard data will approach objects but never quite grasp them. Verify the path above exists before your first eval or datagen run.
4b. Benchmark scenes. The frozen benchmark (per-task scene_ep1.json +
diagnostics.jsonl + review videos) lives at
IDEAS-Lab-Northwestern/ManiGuard-Bench.
maniguard.eval.benchmark accepts the HF repo id directly (snapshot-downloaded into
the HF cache) or a local directory:
# A) let eval pull it (run `hf auth login` first)
python -m maniguard.eval.benchmark --benchmark-root IDEAS-Lab-Northwestern/ManiGuard-Bench ...
# B) or download once to the family runner's default location
hf download IDEAS-Lab-Northwestern/ManiGuard-Bench --repo-type dataset \
--local-dir outputs/lerobot_datasets/maniguard-bench
Option B's target is where scripts/eval_family.sh looks by default (any other
path works via BENCH_ROOT=...). Next step:
Run the benchmark.
Optional: override the dataset path¶
Only needed if you keep BEHAVIOR assets outside the repo (e.g. HPC shared storage).
Default resolves to behavior-1k/datasets/.
Other environment variables¶
For headless deployment:
| Variable | Purpose |
|---|---|
ISAAC_PATH |
Path to Isaac Sim package |
OMNIGIBSON_DATA_PATH |
Path to BEHAVIOR datasets (override only) |
BEHAVIOR_PATH |
Path to ManiGuard root |
OMNIGIBSON_HEADLESS=1 |
Required for server / headless rendering |
VK_ICD_FILENAMES |
Vulkan ICD config for headless GPU rendering |
CUDA_VISIBLE_DEVICES |
GPU selection (esp. when transitioning between multi-GPU tasks) |
Common issues¶
PhysX CUDA error 700
Set CUDA_VISIBLE_DEVICES=0 to pin a single GPU.
typing_extensions errors with torch 2.6.0
Remove the outdated typing_extensions from Isaac Sim so conda's version is used.
Vulkan ERROR_INCOMPATIBLE_DRIVER
Fix VK_ICD_FILENAMES to point to a valid local ICD JSON.
CUDA OOM
The simulator wants most of a GPU. Put the policy server on a second GPU
(CUDA_VISIBLE_DEVICES), or lower camera_resolution in the eval config.