Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
5d97a8f
Add CPU option to run policy closedloop (#254)
xyao-nv Dec 3, 2025
553d4ea
expose the env spacing parameter (#260)
viiik-inside Dec 4, 2025
6c305d4
Add comment to show that this is manual annotation (#257)
viiik-inside Dec 4, 2025
778177d
Add/ground plane anbd light (#253)
viiik-inside Dec 4, 2025
fdc26ac
Add env cfg callback to modify env cfg (#259)
viiik-inside Dec 4, 2025
0ed52f8
Move to public CI (#250)
alexmillane Dec 5, 2025
c7b7077
Update docs link in the README. (#270)
alexmillane Dec 8, 2025
e544861
Correct public CI tags. (#276)
alexmillane Dec 9, 2025
3c3c789
Move back to mapping the whole repo. (#275)
alexmillane Dec 10, 2025
4b94723
Reenable pre-commit. (#278)
alexmillane Dec 11, 2025
587600d
Policy consumes task description from Task (#280)
xyao-nv Dec 11, 2025
43ed13f
Package example_environments into isaaclab_arena_environments (#281)
xyao-nv Dec 11, 2025
e92e000
multi-versioned docs (#272)
alexmillane Dec 11, 2025
4c267fb
Refactor tear down func for persistent app (#282)
xyao-nv Dec 12, 2025
deb3913
Fix git ownership issues in deployment pipeline. (#284)
alexmillane Dec 12, 2025
dba0995
Update README.md (#288)
viiik-inside Dec 12, 2025
b4feca3
Update object library paths to use ISAAC_NUCLEUS_DIR prefix (#291)
peterd-NV Dec 15, 2025
415a327
Refactors mimic_env_cfg building logic in arena_env_builder (#273)
rebeccazhang0707 Dec 16, 2025
3bb3ede
add settings file to pick up packages for easier development (#294)
viiik-inside Dec 16, 2025
d2c40d9
Add RigidObjectSet class to enable multi-object spawning (#290)
xyao-nv Dec 16, 2025
3b1f31a
Add SequentialTaskBase class (#289)
peterd-NV Dec 17, 2025
cf797d0
Fix mis-named mimic eef in tasks (#297)
peterd-NV Dec 17, 2025
12a2e59
Refactor OpenDoor task and Introduce CloseDoor Task (#295)
xyao-nv Dec 18, 2025
518af83
Feature/teleop design (#286)
viiik-inside Dec 18, 2025
f6c9d91
Add warning in docs (#302)
viiik-inside Dec 18, 2025
d7be76b
First MVP in 2d using differential optimization
cvolkcvolk Dec 18, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 77 additions & 36 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,18 @@ env:


jobs:
test:
name: Run pre commit checks and tests
runs-on: [self-hosted, zurich]
timeout-minutes: 45

pre_commit:
name: Pre-commit
runs-on: [self-hosted, gpu]
timeout-minutes: 30

container:
image: nvcr.io/nvstaging/isaac-amr/isaaclab_arena:latest
credentials:
username: $oauthtoken
password: ${{ env.NGC_API_KEY }}
image: python:3.11-slim

env:
# We're getting issues with the markers on the checked out files.
SKIP: check-executables-have-shebangs

steps:
- &install_git_step
Expand All @@ -54,25 +56,23 @@ jobs:
name: Clean up symlinks in submodules directory
run: |
rm -f .git/modules/submodules/IsaacLab/index.lock || true
rm -rf submodules/IsaacLab || true
rm -rf submodules/* || true

# Fix "detected dubious ownership in repository" inside containers
- &mark_repo_safe_step
name: Mark repo as safe for git
run: git config --global --add safe.directory "$PWD"

# Checkout Code
- &checkout_step
name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
clean: true
submodules: true
# LFS checkout here somehow causes issues when LFS stuff changes over time.
# So I do LFS manually in a step after.
# lfs: true

# Fix "detected dubious ownership in repository" inside containers
- &mark_repo_safe_step
name: Mark repo as safe for git
run: git config --global --add safe.directory "$PWD"

# Pull LFS files explicitly (in case checkout didn't get them all)
- &git_lfs_step
name: Git LFS
Expand All @@ -81,77 +81,118 @@ jobs:
git lfs install --local
git lfs pull

- &setup_python_step
name: Setup Python
uses: actions/setup-python@v3
- name: git status
run: |
git status

- name: Run pre-commit
uses: pre-commit/[email protected]
with:
extra_args: --all-files --verbose

test:
name: Run tests
runs-on: [self-hosted, gpu]
timeout-minutes: 60
needs: [pre_commit]

container:
image: nvcr.io/nvstaging/isaac-amr/isaaclab_arena:latest
credentials:
username: $oauthtoken
password: ${{ env.NGC_API_KEY }}

steps:
# nvidia-smi
- &nvidia_smi
name: nvidia-smi
run: nvidia-smi

# Setup
- *install_git_step
- *cleanup_step
- *mark_repo_safe_step
- *checkout_step
- *git_lfs_step

- &install_project_step
name: Install project and link isaac-sim
run: |
pip install --no-cache-dir -e .
[ -e ./submodules/IsaacLab/_isaac_sim ] || ln -s /isaac-sim ./submodules/IsaacLab/_isaac_sim

- name: Run pre-commit
run: |
pip install --no-cache-dir --upgrade pip pre-commit
pre-commit run --all-files

# Run the tests (excluding the gr00t related tests)
- name: Run pytest excluding policy-related tests. First we run all tests without cameras.
run: /isaac-sim/python.sh -m pytest -sv -m "not with_cameras" isaaclab_arena/tests/ --ignore=isaaclab_arena/tests/policy/

- name: Run pytest excluding policy-related tests. Now we run all tests with cameras.
run: /isaac-sim/python.sh -m pytest -sv -m with_cameras isaaclab_arena/tests/ --ignore=isaaclab_arena/tests/policy/


test_policy:
name: Run policy-related tests with GR00T & cuda12_8 deps
runs-on: [self-hosted, zurich]
timeout-minutes: 30
runs-on: [self-hosted, gpu]
timeout-minutes: 60
needs: [pre_commit]

container:
image: nvcr.io/nvstaging/isaac-amr/isaaclab_arena:cuda_gr00t
credentials:
username: $oauthtoken
password: ${{ env.NGC_API_KEY }}
steps:
# nvidia-smi
- *nvidia_smi

# Setup.
- *install_git_step
- *cleanup_step
- *checkout_step
- *mark_repo_safe_step
- *checkout_step
- *git_lfs_step
- *setup_python_step
- *install_project_step

# Run the policy (GR00T) related tests.
- name: Run policy-related pytest
run: /isaac-sim/python.sh -m pytest -sv isaaclab_arena/tests/policy/


build_docs_pre_merge:
name: Build the docs (pre-merge)
runs-on: [self-hosted, zurich]
runs-on: [self-hosted, gpu]
timeout-minutes: 30
needs: [pre_commit]

container:
image: python:3.11-slim

steps:
# Setup.
- *install_git_step
- *mark_repo_safe_step
- *cleanup_step
- *checkout_step

# Checkout all branches, and tags, such that sphinx-multiversion can build the docs for all versions.
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
fetch-tags: true

# Build docs
- name: Build docs
working-directory: ./docs
run: |
cd docs
pip3 install -r requirements.txt
make SPHINXOPTS=-W html
touch ./_build/html/.nojekyll
make SPHINXOPTS=-W multi-docs
touch ./_build/.nojekyll


build_and_push_image_post_merge:
name: Build & push NGC image (post-merge)
runs-on: [self-hosted, zurich]
timeout-minutes: 60
needs: [test, test_policy, build_docs_pre_merge] # only push if tests passed
runs-on: [self-hosted, gpu]
timeout-minutes: 90
needs: [test, test_policy] # only push if tests passed
if: github.event_name == 'push' && github.ref == 'refs/heads/main'

container:
Expand Down
25 changes: 8 additions & 17 deletions .github/workflows/gh-pages.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ env:
jobs:
deploy_docs:
name: Deploy the docs
runs-on: [self-hosted, zurich]
runs-on: [self-hosted, gpu]
timeout-minutes: 30

container:
Expand All @@ -48,33 +48,24 @@ jobs:
with:
clean: true
fetch-depth: 0
fetch-tags: true

# Fix "detected dubious ownership in repository" inside containers
- name: Mark repo as safe for git
run: git config --global --add safe.directory "$PWD"

# Build docs
- name: Build docs
run: |
cd docs
pip3 install -r requirements.txt
make SPHINXOPTS=-W html
touch ./_build/html/.nojekyll
make SPHINXOPTS=-W multi-docs
touch ./_build/.nojekyll

- name: Copy redirect file
run: |
cp ./docs/_redirect/index.html ./docs/_build/index.html

# Upload docs artifact
- name: Upload docs artifact
uses: actions/upload-artifact@v4
with:
name: docs-html
path: ./docs/_build

# Download docs artifact
- name: Download docs artifact
uses: actions/download-artifact@v4
with:
name: docs-html
path: ./docs/_build

# Deploy to gh-pages
- name: Deploy to gh-pages
uses: peaceiris/actions-gh-pages@v3
Expand Down
18 changes: 18 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"python.analysis.extraPaths": [
"${workspaceFolder}",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_assets",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_rl",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_mimic",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_tasks",
],
"cursorpyright.analysis.extraPaths": [
"${workspaceFolder}",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_assets",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_rl",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_mimic",
"${workspaceFolder}/submodules/IsaacLab/source/isaaclab_tasks",
]
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

Isaac-Lab Arena is a comprehensive robotics simulation framework that enhances NVIDIA Isaac Lab by providing a composable, scalable system for creating diverse simulation environments and evaluating robot learning policies. The framework enables researchers and developers to rapidly prototype and test robotic tasks with various robot embodiments, objects, and environments.

To get started with Isaac-Lab Arena, see our [documentation site](https://fictional-disco-qm1zq12.pages.github.io/html/index.html).
To get started with Isaac-Lab Arena, see our [documentation site](https://isaac-sim.github.io/IsaacLab-Arena/main/index.html).

<div align="center">

Expand Down
1 change: 1 addition & 0 deletions docker/Dockerfile.isaaclab_arena
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ COPY *.* ${WORKDIR}/
COPY isaaclab_arena ${WORKDIR}/isaaclab_arena
COPY isaaclab_arena_g1 ${WORKDIR}/isaaclab_arena_g1
COPY isaaclab_arena_gr00t ${WORKDIR}/isaaclab_arena_gr00t
COPY isaaclab_arena_environments ${WORKDIR}/isaaclab_arena_environments
COPY docs ${WORKDIR}/docs

# Install IsaacLab Arena
Expand Down
6 changes: 1 addition & 5 deletions docker/run_docker.sh
Original file line number Diff line number Diff line change
Expand Up @@ -135,11 +135,7 @@ else
"--net=host"
"--runtime=nvidia"
"--gpus=all"
"-v" "./docs:${WORKDIR}/docs"
"-v" "./isaaclab_arena:${WORKDIR}/isaaclab_arena"
"-v" "./isaaclab_arena_g1:${WORKDIR}/isaaclab_arena_g1"
"-v" "./isaaclab_arena_gr00t:${WORKDIR}/isaaclab_arena_gr00t"
"-v" "./submodules/IsaacLab:${WORKDIR}/submodules/IsaacLab"
"-v" ".:${WORKDIR}"
$(add_volume_if_it_exists $DATASETS_HOST_MOUNT_DIRECTORY /datasets)
$(add_volume_if_it_exists $MODELS_HOST_MOUNT_DIRECTORY /models)
$(add_volume_if_it_exists $EVAL_HOST_MOUNT_DIRECTORY /eval)
Expand Down
10 changes: 8 additions & 2 deletions docs/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,18 @@ BUILDDIR = _build


# Put it first so that "make" without argument is like "make help".
.PHONY: help Makefile
help:
@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

.PHONY: help Makefile

.PHONY: multi-docs
multi-docs:
@sphinx-multiversion --verbose "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS)
@cp _redirect/index.html $(BUILDDIR)/index.html


# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)/current" $(SPHINXOPTS) $(O)
2 changes: 1 addition & 1 deletion docs/_redirect/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,6 @@
<head>
<title>Redirecting to the latest Isaac Lab Arena documentation</title>
<meta charset="utf-8">
<meta http-equiv="refresh" content="0; url=./html/index.html">
<meta http-equiv="refresh" content="0; url=./main/index.html">
</head>
</html>
21 changes: 21 additions & 0 deletions docs/_templates/versioning.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{% if versions %}
<nav class="bd-links bd-docs-nav">
<div class="bd-toc-item navbar-nav">
<ul class="nav bd-sidenav">
<li class="toctree-l1 has-children" style="display: flex; justify-content: center; align-items: center; flex-direction: column;">
<div style ="text-align:center;">
<label for="version-select" style="font-weight: bold; display: block;">Version</label>
</div>
<select id="version-select" class="version-dropdown" style="margin: 0 auto; display: block;" onchange="location = this.value;">
{%- for item in versions.branches %}
<option value="{{ item.url }}" {% if item == current_version %}selected{% endif %}>{{ item.name }}</option>
{%- endfor %}
{%- for item in versions.tags|reverse %}
<option value="{{ item.url }}" {% if item == current_version %}selected{% endif %}>{{ item.name }}</option>
{%- endfor %}
</select>
</li>
</ul>
</div>
</nav>
{% endif %}
16 changes: 8 additions & 8 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
"sphinx_tabs.tabs",
"sphinx_design",
"sphinx_copybutton",
"sphinx_multiversion",
"isaaclab_arena_doc_tools",
]

Expand All @@ -87,7 +88,7 @@
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store", "venv_docs"]
exclude_patterns = ["_build", "_templates", "Thumbs.db", ".DS_Store", "venv_docs"]

# Be picky about missing references
nitpicky = True # warns on broken references
Expand Down Expand Up @@ -119,20 +120,19 @@
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
# html_static_path = []
html_static_path = ["_static"]
html_css_files = ["custom.css"]

# Versioning
smv_remote_whitelist = r"^.*$"
smv_branch_whitelist = r"^(main|release/.*)$"
smv_tag_whitelist = r"^v.*$"
html_sidebars = {"**": ["versioning.html", "sidebar-nav-bs"]}
# Todos
todo_include_todos = True

# Linkcheck
# NOTE(alexmillane, 2025-05-09): The links in the main example page are relative links
# which are only valid post-build. linkcheck doesn't like this. So here we ignore
# links to the example pages via html.
linkcheck_ignore = [
# r'pages/torch_examples_.*\.html', # Ignore all pages/torch_examples_*.html links
]
linkcheck_ignore = []

temporary_linkcheck_ignore = [
# TemporaryLinkcheckIgnore(
Expand Down
Loading