IsaacSim / Isaac Lab embodiment adapter for Inspect Robots — run Inspect Robots evals against an Isaac Lab simulation.
Project description
inspect-robots-isaacsim
An Isaac Lab (Isaac Sim) embodiment plugin for Inspect Robots — the "Inspect AI for robotics".
Inspect Robots factors a robotics eval into two swappable inputs: a Policy (the VLA
"brain") and an Embodiment (the "body + world"). This package supplies the
second one, backed by a real Isaac Lab physics simulation, so you can run any
compatible VLA against your Isaac Sim setup.
The default profile is a 7-DoF Franka Panda under joint-position control with
a binary gripper (action dimension = num_arm_joints + 1 = 8).
Install
This package installs and registers on any machine, but reset()/step() need
a working Isaac Lab environment (NVIDIA Omniverse + GPU) — Isaac Sim is not a
PyPI dependency and is imported lazily.
# inside the conda/venv that already has isaaclab + isaacsim available
pip install inspect-robots inspect-robots-isaacsim
Use it
The embodiment is discovered through the inspect_robots.embodiments entry point, so
it appears in the CLI without any import:
inspect-robots list embodiments # -> includes "isaacsim"
inspect-robots run \
--task my-benchmark \
--policy my-vla \
--embodiment isaacsim \
-E task_id=Isaac-Lift-Cube-Franka-v0 \
-E headless=true
Or programmatically:
from inspect_robots import eval
logs = eval("my-benchmark", "my-vla", "isaacsim")
print(logs[0].results.metrics)
Constructing directly (e.g. for a non-Franka arm or extra cameras):
from inspect_robots_isaacsim import IsaacSimEmbodiment
emb = IsaacSimEmbodiment(
task_id="Isaac-Open-Drawer-Franka-v0",
num_arm_joints=7,
cameras=[("base_rgb", 224, 224), ("wrist_rgb", 224, 224)],
control_hz=30.0,
headless=True,
)
Compatibility
Inspect Robots fail-fast-checks the (policy, embodiment) pair before any rollout. To
run against this embodiment your policy must emit 8-D joint_pos actions
(control_mode="joint_pos", gripper="binary") and require only observation
keys this task provides. The mock cubepick policies (2-D eef_delta_pos) are
intentionally incompatible — bring a Franka-trained VLA.
Mapping your task
Isaac Lab tasks vary in their observation-dict layout and success signal. The constructor exposes hooks so you don't edit the adapter:
| Argument | Purpose |
|---|---|
obs_group |
top-level obs-dict group to read (default "policy") |
image_keys / state_keys |
map Inspect Robots keys → your task's raw dict keys |
success_info_key |
where the task reports success in info (default "success") |
num_arm_joints |
arm DoF; action dim is this + 1 for the gripper |
Memory & GPU hygiene
Long unattended evals should not creep in RAM or VRAM. This adapter is built to hold nothing per step, but a few usage rules keep a full run leak-free:
-
Free the simulator when done.
eval()closes what it resolves: an embodiment looked up by registry name (e.g.embodiment="isaacsim") is closed when the run finishes. An embodiment object you construct is yours to close — an openSimulationAppholds GPU memory until the process exits, so use it as a context manager (orclose()in afinally):with IsaacSimEmbodiment() as emb: eval("my-bench", "my-vla", emb) # GPU + sim torn down here
close()is idempotent and safe to call before launch or twice. -
One simulator per process. Isaac Sim is a hard process singleton; if you construct several embodiments the adapter reuses the one live
SimulationApprather than launching (and leaking) a second. -
Stream frames to disk for long episodes. Inspect Robots keeps each step's observation — including camera frames — in the per-trial record. Pass
store_frames=Truetoeval()so frames go to disk side-cars instead of RAM. (Per-trial records are released after each scene is scored, so there is no cross-trial accumulation regardless.) -
Skip rendering you don't need. If your scorer is state/oracle based, build the embodiment with
cameras=()to avoid allocating images at all.
The adapter never stores tensors on self, and copies observations off Isaac's
reused buffers (.astype), so a step loop holds no growing references — a
tracemalloc regression test asserts flat RAM over thousands of steps.
Develop / test
The test suite runs without Isaac (it checks spaces, semantics, protocol conformance, compatibility, and registry wiring):
pip install -e ".[dev]"
pytest -q
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file inspect_robots_isaacsim-0.1.1.tar.gz.
File metadata
- Download URL: inspect_robots_isaacsim-0.1.1.tar.gz
- Upload date:
- Size: 14.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8c01ba1915ba987588ac23324562354d7eecd8379373c9db146a1c925abf64cd
|
|
| MD5 |
56c522f96cf456dbe0366cfd5e4cdd3a
|
|
| BLAKE2b-256 |
f284011df4f773c97123180d2638df245cd44deef14a2464bf247e0e31ce02f9
|
Provenance
The following attestation bundles were made for inspect_robots_isaacsim-0.1.1.tar.gz:
Publisher:
release.yml on robocurve/inspect-robots
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
inspect_robots_isaacsim-0.1.1.tar.gz -
Subject digest:
8c01ba1915ba987588ac23324562354d7eecd8379373c9db146a1c925abf64cd - Sigstore transparency entry: 2132394993
- Sigstore integration time:
-
Permalink:
robocurve/inspect-robots@4dff231a008f27e55f07a1b95cdd668b8166ba98 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/robocurve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4dff231a008f27e55f07a1b95cdd668b8166ba98 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file inspect_robots_isaacsim-0.1.1-py3-none-any.whl.
File metadata
- Download URL: inspect_robots_isaacsim-0.1.1-py3-none-any.whl
- Upload date:
- Size: 10.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a9fb32321c43f9b5f53419b51b7e6dc12b2a231ed2452045aa14c140a9964b8c
|
|
| MD5 |
92ce6954a5deba79812ccfbd444b9e7d
|
|
| BLAKE2b-256 |
cbe5a86c99ba261e92cc476ba34da01beec4a700610cd9d754baba5f25b85a30
|
Provenance
The following attestation bundles were made for inspect_robots_isaacsim-0.1.1-py3-none-any.whl:
Publisher:
release.yml on robocurve/inspect-robots
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
inspect_robots_isaacsim-0.1.1-py3-none-any.whl -
Subject digest:
a9fb32321c43f9b5f53419b51b7e6dc12b2a231ed2452045aa14c140a9964b8c - Sigstore transparency entry: 2132395206
- Sigstore integration time:
-
Permalink:
robocurve/inspect-robots@4dff231a008f27e55f07a1b95cdd668b8166ba98 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/robocurve
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4dff231a008f27e55f07a1b95cdd668b8166ba98 -
Trigger Event:
workflow_dispatch
-
Statement type: