Upload UWLab (code, datasets, checkpoints, eval outputs)
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .dockerignore +33 -0
- .flake8 +23 -0
- .gitattributes +196 -34
- .github/CODEOWNERS +49 -0
- .github/ISSUE_TEMPLATE/bug.md +54 -0
- .github/ISSUE_TEMPLATE/proposal.md +45 -0
- .github/ISSUE_TEMPLATE/question.md +21 -0
- .github/LICENSE_HEADER.md +4 -0
- .github/LICENSE_HEADER.txt +4 -0
- .github/PULL_REQUEST_TEMPLATE.md +59 -0
- .github/actions/combine-results/action.yml +103 -0
- .github/actions/docker-build/action.yml +78 -0
- .github/actions/run-tests/action.yml +157 -0
- .github/labeler.yml +59 -0
- .github/stale.yml +67 -0
- .github/workflows/build.yml +242 -0
- .github/workflows/check-links.yml +120 -0
- .github/workflows/docs.yaml +89 -0
- .github/workflows/labeler.yml +17 -0
- .github/workflows/license-check.yaml +127 -0
- .github/workflows/license-exceptions.json +479 -0
- .github/workflows/pre-commit.yaml +20 -0
- .gitignore +73 -0
- .pre-commit-config.yaml +87 -0
- .vscode/.gitignore +11 -0
- .vscode/extensions.json +16 -0
- .vscode/launch.json +61 -0
- .vscode/settings.json +126 -0
- .vscode/tasks.json +26 -0
- .vscode/tools/launch.template.json +57 -0
- .vscode/tools/settings.template.json +108 -0
- .vscode/tools/setup_vscode.py +234 -0
- CONTRIBUTING.md +45 -0
- CONTRIBUTORS.md +27 -0
- Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectAnywhereEEAnywhere.pt +3 -0
- Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectAnywhereEEGrasped.pt +3 -0
- Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectPartiallyAssembledEEGrasped.pt +3 -0
- Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectRestingEEGrasped.pt +3 -0
- LICENCE +30 -0
- README.md +52 -0
- VERSION +1 -0
- _isaaclab/IsaacLab/.dockerignore +30 -0
- _isaaclab/IsaacLab/.gitattributes +14 -0
- _isaaclab/IsaacLab/.github/CODEOWNERS +101 -0
- _isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/bug.md +54 -0
- _isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/proposal.md +45 -0
- _isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/question.md +21 -0
- _isaaclab/IsaacLab/.github/LICENSE_HEADER.txt +4 -0
- _isaaclab/IsaacLab/.github/LICENSE_HEADER_MIMIC.txt +4 -0
- _isaaclab/IsaacLab/.github/PULL_REQUEST_TEMPLATE.md +59 -0
.dockerignore
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ignore .git related folders
|
| 2 |
+
.git/
|
| 3 |
+
.github/
|
| 4 |
+
.gitignore
|
| 5 |
+
# ignore docs
|
| 6 |
+
docs/
|
| 7 |
+
# copy in licenses folder to the container
|
| 8 |
+
!docs/licenses/
|
| 9 |
+
# ignore logs
|
| 10 |
+
**/logs/
|
| 11 |
+
**/runs/
|
| 12 |
+
**/output/*
|
| 13 |
+
**/outputs/*
|
| 14 |
+
**/videos/*
|
| 15 |
+
**/wandb/*
|
| 16 |
+
*.tmp
|
| 17 |
+
# ignore docker
|
| 18 |
+
docker/cluster/exports/
|
| 19 |
+
docker/.container.cfg
|
| 20 |
+
# ignore recordings
|
| 21 |
+
recordings/
|
| 22 |
+
# ignore __pycache__
|
| 23 |
+
**/__pycache__/
|
| 24 |
+
**/*.egg-info/
|
| 25 |
+
# ignore local virtual environments
|
| 26 |
+
env_uwlab/
|
| 27 |
+
# Note: _isaaclab/ is NOT ignored so it gets synced to cluster
|
| 28 |
+
# ignore isaac sim symlink
|
| 29 |
+
_isaac_sim?
|
| 30 |
+
# Docker history
|
| 31 |
+
docker/.uw-lab-docker-history
|
| 32 |
+
# datasets
|
| 33 |
+
/datasets/
|
.flake8
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[flake8]
|
| 2 |
+
show-source=True
|
| 3 |
+
statistics=True
|
| 4 |
+
per-file-ignores=*/__init__.py:F401
|
| 5 |
+
# E402: Module level import not at top of file
|
| 6 |
+
# E501: Line too long
|
| 7 |
+
# W503: Line break before binary operator
|
| 8 |
+
# E203: Whitespace before ':' -> conflicts with black
|
| 9 |
+
# D401: First line should be in imperative mood
|
| 10 |
+
# R504: Unnecessary variable assignment before return statement.
|
| 11 |
+
# R505: Unnecessary elif after return statement
|
| 12 |
+
# SIM102: Use a single if-statement instead of nested if-statements
|
| 13 |
+
# SIM117: Merge with statements for context managers that have same scope.
|
| 14 |
+
# SIM118: Checks for key-existence checks against dict.keys() calls.
|
| 15 |
+
ignore=E402,E501,W503,E203,D401,R504,R505,SIM102,SIM117,SIM118
|
| 16 |
+
max-line-length = 120
|
| 17 |
+
max-complexity = 30
|
| 18 |
+
exclude=_*,.vscode,.git,docs/**
|
| 19 |
+
# docstrings
|
| 20 |
+
docstring-convention=google
|
| 21 |
+
# annotations
|
| 22 |
+
suppress-none-returning=True
|
| 23 |
+
allow-star-arg-any=True
|
.gitattributes
CHANGED
|
@@ -1,35 +1,197 @@
|
|
| 1 |
-
*.
|
| 2 |
-
*.
|
| 3 |
-
*.
|
| 4 |
-
*.
|
| 5 |
-
*.
|
| 6 |
-
*.
|
| 7 |
-
*.
|
| 8 |
-
*.
|
| 9 |
-
*.
|
| 10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
| 11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
| 12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
| 13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
| 14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
| 15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
| 16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
| 17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
| 18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
| 19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
| 20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
| 21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
| 22 |
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 23 |
-
*.
|
| 24 |
-
*.
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.usd filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.usda filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.psd filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.hdr filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.dae filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.mtl filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.obj filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.gif filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.jit filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.hdf5 filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
|
| 14 |
+
*.bat text eol=crlf
|
| 15 |
+
_isaaclab/IsaacLab/docs/source/_static/NVIDIA-logo-white.png filter=lfs diff=lfs merge=lfs -text
|
| 16 |
+
_isaaclab/IsaacLab/docs/source/_static/benchmarks/cartpole.jpg filter=lfs diff=lfs merge=lfs -text
|
| 17 |
+
_isaaclab/IsaacLab/docs/source/_static/benchmarks/g1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 18 |
+
_isaaclab/IsaacLab/docs/source/_static/benchmarks/shadow.jpg filter=lfs diff=lfs merge=lfs -text
|
| 19 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/arms.jpg filter=lfs diff=lfs merge=lfs -text
|
| 20 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/bin_packing.jpg filter=lfs diff=lfs merge=lfs -text
|
| 21 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/bipeds.jpg filter=lfs diff=lfs merge=lfs -text
|
| 22 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/deformables.jpg filter=lfs diff=lfs merge=lfs -text
|
| 23 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/h1_locomotion.jpg filter=lfs diff=lfs merge=lfs -text
|
| 24 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/hands.jpg filter=lfs diff=lfs merge=lfs -text
|
| 25 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/haply_teleop_franka.jpg filter=lfs diff=lfs merge=lfs -text
|
| 26 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/markers.jpg filter=lfs diff=lfs merge=lfs -text
|
| 27 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/multi-mesh-raycast.jpg filter=lfs diff=lfs merge=lfs -text
|
| 28 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/multi_asset.jpg filter=lfs diff=lfs merge=lfs -text
|
| 29 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/pick_and_place.jpg filter=lfs diff=lfs merge=lfs -text
|
| 30 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/procedural_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 31 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/quadrupeds.jpg filter=lfs diff=lfs merge=lfs -text
|
| 32 |
+
_isaaclab/IsaacLab/docs/source/_static/demos/renderer_rtx_realtime.jpg filter=lfs diff=lfs merge=lfs -text
|
| 33 |
+
_isaaclab/IsaacLab/docs/source/_static/how-to/howto_rendering_example_balanced.jpg filter=lfs diff=lfs merge=lfs -text
|
| 34 |
+
_isaaclab/IsaacLab/docs/source/_static/how-to/howto_rendering_example_performance.jpg filter=lfs diff=lfs merge=lfs -text
|
| 35 |
+
_isaaclab/IsaacLab/docs/source/_static/how-to/howto_rendering_example_quality.jpg filter=lfs diff=lfs merge=lfs -text
|
| 36 |
+
_isaaclab/IsaacLab/docs/source/_static/isaaclab.jpg filter=lfs diff=lfs merge=lfs -text
|
| 37 |
+
_isaaclab/IsaacLab/docs/source/_static/migration/ovd_pvd_comparison.jpg filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/contact_diagram.jpg filter=lfs diff=lfs merge=lfs -text
|
| 39 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/contact_visualization.jpg filter=lfs diff=lfs merge=lfs -text
|
| 40 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/frame_transformer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 41 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/imu_diagram.jpg filter=lfs diff=lfs merge=lfs -text
|
| 42 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/raycaster_patterns.jpg filter=lfs diff=lfs merge=lfs -text
|
| 43 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/raycaster_visualizer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 44 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/tacsl_diagram.jpg filter=lfs diff=lfs merge=lfs -text
|
| 45 |
+
_isaaclab/IsaacLab/docs/source/_static/overview/sensors/tacsl_force_field_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 46 |
+
_isaaclab/IsaacLab/docs/source/_static/policy_deployment/00_hover/hover_stable_wave.png filter=lfs diff=lfs merge=lfs -text
|
| 47 |
+
_isaaclab/IsaacLab/docs/source/_static/policy_deployment/00_hover/hover_training_robots.png filter=lfs diff=lfs merge=lfs -text
|
| 48 |
+
_isaaclab/IsaacLab/docs/source/_static/policy_deployment/02_gear_assembly/gear_assembly_sim_real.webm filter=lfs diff=lfs merge=lfs -text
|
| 49 |
+
_isaaclab/IsaacLab/docs/source/_static/policy_deployment/02_gear_assembly/sim_real_gear_assembly_train.jpg filter=lfs diff=lfs merge=lfs -text
|
| 50 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/asset_caching.jpg filter=lfs diff=lfs merge=lfs -text
|
| 51 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/cloudxr_avp_ik_error.jpg filter=lfs diff=lfs merge=lfs -text
|
| 52 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/cloudxr_viewport.jpg filter=lfs diff=lfs merge=lfs -text
|
| 53 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/ecosystem-dark.jpg filter=lfs diff=lfs merge=lfs -text
|
| 54 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/ecosystem-light.jpg filter=lfs diff=lfs merge=lfs -text
|
| 55 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/isaac_ants_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 56 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/verify_install.jpg filter=lfs diff=lfs merge=lfs -text
|
| 57 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/walkthrough_1_1_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 58 |
+
_isaaclab/IsaacLab/docs/source/_static/setup/walkthrough_1_2_arrows.jpg filter=lfs diff=lfs merge=lfs -text
|
| 59 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/classic/ant.jpg filter=lfs diff=lfs merge=lfs -text
|
| 60 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/classic/cart_double_pendulum.jpg filter=lfs diff=lfs merge=lfs -text
|
| 61 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/classic/cartpole.jpg filter=lfs diff=lfs merge=lfs -text
|
| 62 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/classic/humanoid.jpg filter=lfs diff=lfs merge=lfs -text
|
| 63 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/a1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 64 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/a1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 65 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/agility_digit_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 66 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/agility_digit_loco_manip.jpg filter=lfs diff=lfs merge=lfs -text
|
| 67 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/agility_digit_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 68 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_b_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 69 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_b_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 70 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_c_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 71 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_c_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 72 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_d_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 73 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/anymal_d_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 74 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/g1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 75 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/g1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 76 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/go1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 77 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/go1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 78 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/go2_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 79 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/go2_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 80 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/h1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 81 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/locomotion/h1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 82 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/allegro_cube.jpg filter=lfs diff=lfs merge=lfs -text
|
| 83 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/franka_lift.jpg filter=lfs diff=lfs merge=lfs -text
|
| 84 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/franka_open_drawer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 85 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/franka_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 86 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/franka_stack.jpg filter=lfs diff=lfs merge=lfs -text
|
| 87 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/g1_pick_place.jpg filter=lfs diff=lfs merge=lfs -text
|
| 88 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/g1_pick_place_fixed_base.jpg filter=lfs diff=lfs merge=lfs -text
|
| 89 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/gr-1_pick_place.jpg filter=lfs diff=lfs merge=lfs -text
|
| 90 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/shadow_cube.jpg filter=lfs diff=lfs merge=lfs -text
|
| 91 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/shadow_hand_over.jpg filter=lfs diff=lfs merge=lfs -text
|
| 92 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/ur10_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 93 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/manipulation/ur10e_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 94 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/navigation/anymal_c_nav.jpg filter=lfs diff=lfs merge=lfs -text
|
| 95 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks/others/humanoid_amp.jpg filter=lfs diff=lfs merge=lfs -text
|
| 96 |
+
_isaaclab/IsaacLab/docs/source/_static/tasks.jpg filter=lfs diff=lfs merge=lfs -text
|
| 97 |
+
_isaaclab/IsaacLab/docs/source/_static/teleop/hand_asset.jpg filter=lfs diff=lfs merge=lfs -text
|
| 98 |
+
_isaaclab/IsaacLab/docs/source/_static/teleop/teleop_diagram.jpg filter=lfs diff=lfs merge=lfs -text
|
| 99 |
+
_isaaclab/IsaacLab/docs/source/_static/terrains/height_field/inverted_pyramid_sloped_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 100 |
+
_isaaclab/IsaacLab/docs/source/_static/terrains/height_field/pyramid_sloped_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 101 |
+
_isaaclab/IsaacLab/docs/source/_static/terrains/height_field/random_uniform_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 102 |
+
_isaaclab/IsaacLab/docs/source/_static/terrains/height_field/stepping_stones_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 103 |
+
_isaaclab/IsaacLab/docs/source/_static/terrains/height_field/wave_terrain.jpg filter=lfs diff=lfs merge=lfs -text
|
| 104 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_add_new_robot_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 105 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_add_sensors.jpg filter=lfs diff=lfs merge=lfs -text
|
| 106 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_create_direct_workflow.jpg filter=lfs diff=lfs merge=lfs -text
|
| 107 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_create_manager_base.jpg filter=lfs diff=lfs merge=lfs -text
|
| 108 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_create_manager_rl_env.jpg filter=lfs diff=lfs merge=lfs -text
|
| 109 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_creating_a_scene.jpg filter=lfs diff=lfs merge=lfs -text
|
| 110 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_launch_app.jpg filter=lfs diff=lfs merge=lfs -text
|
| 111 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_modify_direct_rl_env.jpg filter=lfs diff=lfs merge=lfs -text
|
| 112 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_operational_space_controller.jpg filter=lfs diff=lfs merge=lfs -text
|
| 113 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_register_environment.jpg filter=lfs diff=lfs merge=lfs -text
|
| 114 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_run_articulation.jpg filter=lfs diff=lfs merge=lfs -text
|
| 115 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_run_deformable_object.jpg filter=lfs diff=lfs merge=lfs -text
|
| 116 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_run_rigid_object.jpg filter=lfs diff=lfs merge=lfs -text
|
| 117 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_run_surface_gripper.jpg filter=lfs diff=lfs merge=lfs -text
|
| 118 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_spawn_prims.jpg filter=lfs diff=lfs merge=lfs -text
|
| 119 |
+
_isaaclab/IsaacLab/docs/source/_static/tutorials/tutorial_task_space_controller.jpg filter=lfs diff=lfs merge=lfs -text
|
| 120 |
+
_isaaclab/IsaacLab/docs/source/_static/visualizers/newton_viz.jpg filter=lfs diff=lfs merge=lfs -text
|
| 121 |
+
_isaaclab/IsaacLab/docs/source/_static/visualizers/ov_viz.jpg filter=lfs diff=lfs merge=lfs -text
|
| 122 |
+
_isaaclab/IsaacLab/docs/source/_static/visualizers/rerun_viz.jpg filter=lfs diff=lfs merge=lfs -text
|
| 123 |
+
_isaaclab/IsaacLab/docs/source/_static/vscode_tasks.png filter=lfs diff=lfs merge=lfs -text
|
| 124 |
+
_isaaclab/IsaacLab/source/isaaclab_tasks/isaaclab_tasks/direct/humanoid_amp/motions/humanoid_dance.npz filter=lfs diff=lfs merge=lfs -text
|
| 125 |
+
_isaaclab/IsaacLab/source/isaaclab_tasks/isaaclab_tasks/direct/humanoid_amp/motions/humanoid_run.npz filter=lfs diff=lfs merge=lfs -text
|
| 126 |
+
_isaaclab/IsaacLab/source/isaaclab_tasks/isaaclab_tasks/direct/humanoid_amp/motions/humanoid_walk.npz filter=lfs diff=lfs merge=lfs -text
|
| 127 |
+
docs/source/_static/UW-logo-black.png filter=lfs diff=lfs merge=lfs -text
|
| 128 |
+
docs/source/_static/UW-logo-white.png filter=lfs diff=lfs merge=lfs -text
|
| 129 |
+
docs/source/_static/publications/omnireset/camera_setup.jpg filter=lfs diff=lfs merge=lfs -text
|
| 130 |
+
docs/source/_static/publications/omnireset/example_blend_front_camera.png filter=lfs diff=lfs merge=lfs -text
|
| 131 |
+
docs/source/_static/publications/omnireset/example_blend_side_camera.png filter=lfs diff=lfs merge=lfs -text
|
| 132 |
+
docs/source/_static/publications/omnireset/example_blend_wrist_camera.png filter=lfs diff=lfs merge=lfs -text
|
| 133 |
+
docs/source/_static/publications/omnireset/example_calibration.jpg filter=lfs diff=lfs merge=lfs -text
|
| 134 |
+
docs/source/_static/publications/pg1/pg1.png filter=lfs diff=lfs merge=lfs -text
|
| 135 |
+
docs/source/_static/setup/asset_caching.jpg filter=lfs diff=lfs merge=lfs -text
|
| 136 |
+
docs/source/_static/setup/cloudxr_avp_ik_error.jpg filter=lfs diff=lfs merge=lfs -text
|
| 137 |
+
docs/source/_static/setup/cloudxr_viewport.jpg filter=lfs diff=lfs merge=lfs -text
|
| 138 |
+
docs/source/_static/setup/isaac_ants_example.jpg filter=lfs diff=lfs merge=lfs -text
|
| 139 |
+
docs/source/_static/setup/verify_install.jpg filter=lfs diff=lfs merge=lfs -text
|
| 140 |
+
docs/source/_static/setup/walkthrough_1_1_result.jpg filter=lfs diff=lfs merge=lfs -text
|
| 141 |
+
docs/source/_static/setup/walkthrough_1_2_arrows.jpg filter=lfs diff=lfs merge=lfs -text
|
| 142 |
+
docs/source/_static/tasks/classic/ant.jpg filter=lfs diff=lfs merge=lfs -text
|
| 143 |
+
docs/source/_static/tasks/classic/cart_double_pendulum.jpg filter=lfs diff=lfs merge=lfs -text
|
| 144 |
+
docs/source/_static/tasks/classic/cartpole.jpg filter=lfs diff=lfs merge=lfs -text
|
| 145 |
+
docs/source/_static/tasks/classic/humanoid.jpg filter=lfs diff=lfs merge=lfs -text
|
| 146 |
+
docs/source/_static/tasks/locomotion/a1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 147 |
+
docs/source/_static/tasks/locomotion/a1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 148 |
+
docs/source/_static/tasks/locomotion/agility_digit_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 149 |
+
docs/source/_static/tasks/locomotion/agility_digit_loco_manip.jpg filter=lfs diff=lfs merge=lfs -text
|
| 150 |
+
docs/source/_static/tasks/locomotion/agility_digit_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 151 |
+
docs/source/_static/tasks/locomotion/anymal_b_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 152 |
+
docs/source/_static/tasks/locomotion/anymal_b_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 153 |
+
docs/source/_static/tasks/locomotion/anymal_c_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 154 |
+
docs/source/_static/tasks/locomotion/anymal_c_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 155 |
+
docs/source/_static/tasks/locomotion/anymal_d_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 156 |
+
docs/source/_static/tasks/locomotion/anymal_d_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 157 |
+
docs/source/_static/tasks/locomotion/g1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 158 |
+
docs/source/_static/tasks/locomotion/g1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 159 |
+
docs/source/_static/tasks/locomotion/go1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 160 |
+
docs/source/_static/tasks/locomotion/go1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 161 |
+
docs/source/_static/tasks/locomotion/go2_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 162 |
+
docs/source/_static/tasks/locomotion/go2_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 163 |
+
docs/source/_static/tasks/locomotion/h1_flat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 164 |
+
docs/source/_static/tasks/locomotion/h1_rough.jpg filter=lfs diff=lfs merge=lfs -text
|
| 165 |
+
docs/source/_static/tasks/locomotion/spot_obstacle.jpg filter=lfs diff=lfs merge=lfs -text
|
| 166 |
+
docs/source/_static/tasks/locomotion/spot_slope.jpg filter=lfs diff=lfs merge=lfs -text
|
| 167 |
+
docs/source/_static/tasks/locomotion/spot_stepping_stone.jpg filter=lfs diff=lfs merge=lfs -text
|
| 168 |
+
docs/source/_static/tasks/manipulation/allegro_cube.jpg filter=lfs diff=lfs merge=lfs -text
|
| 169 |
+
docs/source/_static/tasks/manipulation/franka_lift.jpg filter=lfs diff=lfs merge=lfs -text
|
| 170 |
+
docs/source/_static/tasks/manipulation/franka_open_drawer.jpg filter=lfs diff=lfs merge=lfs -text
|
| 171 |
+
docs/source/_static/tasks/manipulation/franka_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 172 |
+
docs/source/_static/tasks/manipulation/franka_stack.jpg filter=lfs diff=lfs merge=lfs -text
|
| 173 |
+
docs/source/_static/tasks/manipulation/g1_pick_place.jpg filter=lfs diff=lfs merge=lfs -text
|
| 174 |
+
docs/source/_static/tasks/manipulation/g1_pick_place_fixed_base.jpg filter=lfs diff=lfs merge=lfs -text
|
| 175 |
+
docs/source/_static/tasks/manipulation/gr-1_pick_place.jpg filter=lfs diff=lfs merge=lfs -text
|
| 176 |
+
docs/source/_static/tasks/manipulation/omnireset_drawer_assemble.jpg filter=lfs diff=lfs merge=lfs -text
|
| 177 |
+
docs/source/_static/tasks/manipulation/shadow_cube.jpg filter=lfs diff=lfs merge=lfs -text
|
| 178 |
+
docs/source/_static/tasks/manipulation/shadow_hand_over.jpg filter=lfs diff=lfs merge=lfs -text
|
| 179 |
+
docs/source/_static/tasks/manipulation/tycho_track_goal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 180 |
+
docs/source/_static/tasks/manipulation/ur10_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 181 |
+
docs/source/_static/tasks/manipulation/ur10e_reach.jpg filter=lfs diff=lfs merge=lfs -text
|
| 182 |
+
docs/source/_static/tasks/manipulation/ur5_track_goal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 183 |
+
docs/source/_static/tasks/manipulation/xarm_leap_track_goal.jpg filter=lfs diff=lfs merge=lfs -text
|
| 184 |
+
docs/source/_static/tasks/navigation/anymal_c_nav.jpg filter=lfs diff=lfs merge=lfs -text
|
| 185 |
+
docs/source/_static/tasks/others/humanoid_amp.jpg filter=lfs diff=lfs merge=lfs -text
|
| 186 |
+
docs/source/_static/tasks.jpg filter=lfs diff=lfs merge=lfs -text
|
| 187 |
+
docs/source/_static/teleop/hand_asset.jpg filter=lfs diff=lfs merge=lfs -text
|
| 188 |
+
docs/source/_static/teleop/teleop_diagram.jpg filter=lfs diff=lfs merge=lfs -text
|
| 189 |
+
docs/source/_static/uwlab.jpg filter=lfs diff=lfs merge=lfs -text
|
| 190 |
+
docs/source/_static/vscode_tasks.png filter=lfs diff=lfs merge=lfs -text
|
| 191 |
+
eval_baseline_rerun/samples.npy filter=lfs diff=lfs merge=lfs -text
|
| 192 |
+
eval_grid_out/success_rate.npy filter=lfs diff=lfs merge=lfs -text
|
| 193 |
+
eval_sample4d_finetuned/samples.npy filter=lfs diff=lfs merge=lfs -text
|
| 194 |
+
eval_sample4d_out/samples.npy filter=lfs diff=lfs merge=lfs -text
|
| 195 |
+
exported/policy.onnx filter=lfs diff=lfs merge=lfs -text
|
| 196 |
+
logs/rsl_rl/ant/2026-06-24_19-58-15/events.out.tfevents.1782345500.grail-jupiter-exp.19988.0 filter=lfs diff=lfs merge=lfs -text
|
| 197 |
+
logs/rsl_rl/ur5e_robotiq_2f85_omnireset_agent/2026-06-25_18-18-32/events.out.tfevents.1782426006.grail-jupiter-exp.242640.0 filter=lfs diff=lfs merge=lfs -text
|
.github/CODEOWNERS
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2025, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
# Codeowners are designated by their GitHub username. They are
|
| 7 |
+
# the people who are responsible for reviewing and approving PRs
|
| 8 |
+
# that modify the files that match the pattern.
|
| 9 |
+
#
|
| 10 |
+
# Codeowners are not the same as contributors. They are not
|
| 11 |
+
# automatically added to the PR, but they will be requested to
|
| 12 |
+
# review the PR when it is created.
|
| 13 |
+
#
|
| 14 |
+
# As a general rule, the codeowners are the people who are
|
| 15 |
+
# most familiar with the code that the PR is modifying. If you
|
| 16 |
+
# are not sure who to add, ask in the issue or in the PR itself.
|
| 17 |
+
#
|
| 18 |
+
# The format of the file is as follows:
|
| 19 |
+
# <file pattern> <codeowners>
|
| 20 |
+
|
| 21 |
+
# Core Framework
|
| 22 |
+
/source/uwlab @zoctipus
|
| 23 |
+
|
| 24 |
+
# RL Environment
|
| 25 |
+
/source/uwlab_tasks @zoctipus
|
| 26 |
+
|
| 27 |
+
# Assets
|
| 28 |
+
/source/uwlab_assets @zoctipus
|
| 29 |
+
|
| 30 |
+
# RL
|
| 31 |
+
/source/uwlab_rl @zoctipus @patrickhaoy
|
| 32 |
+
|
| 33 |
+
# Application
|
| 34 |
+
/source/uwlab_apps @zoctipus @patrickhaoy
|
| 35 |
+
|
| 36 |
+
# Standalone Scripts
|
| 37 |
+
/scripts @zoctipus
|
| 38 |
+
/scripts_v2 @zoctipus
|
| 39 |
+
|
| 40 |
+
# Github Actions
|
| 41 |
+
/.github/ @zoctipus
|
| 42 |
+
|
| 43 |
+
# Visual Studio Code
|
| 44 |
+
/.vscode/ @zoctipus
|
| 45 |
+
|
| 46 |
+
# Infrastructure (Docker, Docs, Tools)
|
| 47 |
+
/docker/ @zoctipus
|
| 48 |
+
/docs/ @zoctipus
|
| 49 |
+
/tools/ @zoctipus
|
.github/ISSUE_TEMPLATE/bug.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Bug Report
|
| 3 |
+
about: Submit a bug report
|
| 4 |
+
title: "[Bug Report] Bug title"
|
| 5 |
+
|
| 6 |
+
---
|
| 7 |
+
|
| 8 |
+
If you are submitting a bug report, please fill in the following details and use the tag [bug].
|
| 9 |
+
|
| 10 |
+
### Describe the bug
|
| 11 |
+
|
| 12 |
+
A clear and concise description of what the bug is.
|
| 13 |
+
|
| 14 |
+
### Steps to reproduce
|
| 15 |
+
|
| 16 |
+
Please try to provide a minimal example to reproduce the bug. Error messages and stack traces are also helpful.
|
| 17 |
+
|
| 18 |
+
<!-- Please post terminal logs, minimal example to reproduce, or command to run under three backticks (```) to allow code formatting.
|
| 19 |
+
|
| 20 |
+
```
|
| 21 |
+
Paste your error here
|
| 22 |
+
```
|
| 23 |
+
|
| 24 |
+
For more information on this, check: https://www.markdownguide.org/extended-syntax/#fenced-code-blocks
|
| 25 |
+
|
| 26 |
+
-->
|
| 27 |
+
|
| 28 |
+
### System Info
|
| 29 |
+
|
| 30 |
+
Describe the characteristic of your environment:
|
| 31 |
+
|
| 32 |
+
<!-- Please complete the following description. -->
|
| 33 |
+
- Commit: [e.g. 8f3b9ca]
|
| 34 |
+
- Isaac Sim Version: [e.g. 5.0, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
| 35 |
+
- OS: [e.g. Ubuntu 22.04]
|
| 36 |
+
- GPU: [e.g. RTX 5090]
|
| 37 |
+
- CUDA: [e.g. 12.8]
|
| 38 |
+
- GPU Driver: [e.g. 553.05, this can be seen by using `nvidia-smi` command.]
|
| 39 |
+
|
| 40 |
+
### Additional context
|
| 41 |
+
|
| 42 |
+
Add any other context about the problem here.
|
| 43 |
+
|
| 44 |
+
### Checklist
|
| 45 |
+
|
| 46 |
+
- [ ] I have checked that there is no similar issue in the repo (**required**)
|
| 47 |
+
- [ ] I have checked that the issue is not in running Isaac Sim itself and is related to the repo
|
| 48 |
+
|
| 49 |
+
### Acceptance Criteria
|
| 50 |
+
|
| 51 |
+
Add the criteria for which this task is considered **done**. If not known at issue creation time, you can add this once the issue is assigned.
|
| 52 |
+
|
| 53 |
+
- [ ] Criteria 1
|
| 54 |
+
- [ ] Criteria 2
|
.github/ISSUE_TEMPLATE/proposal.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Proposal
|
| 3 |
+
about: Propose changes that are not bug fixes
|
| 4 |
+
title: "[Proposal] Proposal title"
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
### Proposal
|
| 9 |
+
|
| 10 |
+
A clear and concise description of the proposal. In a few sentences, describe the feature and its core capabilities.
|
| 11 |
+
|
| 12 |
+
### Motivation
|
| 13 |
+
|
| 14 |
+
Please outline the motivation for the proposal. Summarize the core use cases and user problems and needs you are trying to solve.
|
| 15 |
+
|
| 16 |
+
Is your feature request related to a problem? e.g.,"I'm always frustrated when [...]".
|
| 17 |
+
|
| 18 |
+
If this is related to another GitHub issue, please link here too.
|
| 19 |
+
|
| 20 |
+
### Alternatives
|
| 21 |
+
|
| 22 |
+
A clear and concise description of any alternative solutions or features you've considered, if any.
|
| 23 |
+
|
| 24 |
+
### Build Info
|
| 25 |
+
|
| 26 |
+
Describe the versions where you are observing the missing feature in:
|
| 27 |
+
|
| 28 |
+
<!-- Please complete the following description. -->
|
| 29 |
+
- UW Lab Version: [e.g. 2.3.0]
|
| 30 |
+
- Isaac Sim Version: [e.g. 5.1, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
| 31 |
+
|
| 32 |
+
### Additional context
|
| 33 |
+
|
| 34 |
+
Add any other context or screenshots about the feature request here.
|
| 35 |
+
|
| 36 |
+
### Checklist
|
| 37 |
+
|
| 38 |
+
- [ ] I have checked that there is no similar issue in the repo (**required**)
|
| 39 |
+
|
| 40 |
+
### Acceptance Criteria
|
| 41 |
+
|
| 42 |
+
Add the criteria for which this task is considered **done**. If not known at issue creation time, you can add this once the issue is assigned.
|
| 43 |
+
|
| 44 |
+
- [ ] Criteria 1
|
| 45 |
+
- [ ] Criteria 2
|
.github/ISSUE_TEMPLATE/question.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Question
|
| 3 |
+
about: Ask a question
|
| 4 |
+
title: "[Question] Question title"
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
### Question
|
| 8 |
+
|
| 9 |
+
Basic questions, related to robot learning, that are not bugs or feature requests will be closed without reply, because GitHub issues are not an appropriate venue for these.
|
| 10 |
+
|
| 11 |
+
Advanced/nontrivial questions, especially in areas where documentation is lacking, are very much welcome.
|
| 12 |
+
|
| 13 |
+
For questions that are related to running and understanding Isaac Sim, please post them at the official [Isaac Sim forums](https://forums.developer.nvidia.com/c/omniverse/simulation/69).
|
| 14 |
+
|
| 15 |
+
### Build Info
|
| 16 |
+
|
| 17 |
+
Describe the versions that you are currently using:
|
| 18 |
+
|
| 19 |
+
<!-- Please complete the following description. -->
|
| 20 |
+
- UW Lab Version: [e.g. 2.3.0]
|
| 21 |
+
- Isaac Sim Version: [e.g. 5.1, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
.github/LICENSE_HEADER.md
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2024-2025, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
All Rights Reserved.
|
| 3 |
+
|
| 4 |
+
SPDX-License-Identifier: BSD-3-Clause
|
.github/LICENSE_HEADER.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2024-2025, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
All Rights Reserved.
|
| 3 |
+
|
| 4 |
+
SPDX-License-Identifier: BSD-3-Clause
|
.github/PULL_REQUEST_TEMPLATE.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Description
|
| 2 |
+
|
| 3 |
+
<!--
|
| 4 |
+
Thank you for your interest in sending a pull request. Please make sure to check the contribution guidelines.
|
| 5 |
+
|
| 6 |
+
Link: https://uw-lab.github.io/UWLab/main/source/refs/contributing.html
|
| 7 |
+
|
| 8 |
+
💡 Please try to keep PRs small and focused. Large PRs are harder to review and merge.
|
| 9 |
+
-->
|
| 10 |
+
|
| 11 |
+
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
|
| 12 |
+
List any dependencies that are required for this change.
|
| 13 |
+
|
| 14 |
+
Fixes # (issue)
|
| 15 |
+
|
| 16 |
+
<!-- As a practice, it is recommended to open an issue to have discussions on the proposed pull request.
|
| 17 |
+
This makes it easier for the community to keep track of what is being developed or added, and if a given feature
|
| 18 |
+
is demanded by more than one party. -->
|
| 19 |
+
|
| 20 |
+
## Type of change
|
| 21 |
+
|
| 22 |
+
<!-- As you go through the list, delete the ones that are not applicable. -->
|
| 23 |
+
|
| 24 |
+
- Bug fix (non-breaking change which fixes an issue)
|
| 25 |
+
- New feature (non-breaking change which adds functionality)
|
| 26 |
+
- Breaking change (existing functionality will not work without user modification)
|
| 27 |
+
- Documentation update
|
| 28 |
+
|
| 29 |
+
## Screenshots
|
| 30 |
+
|
| 31 |
+
Please attach before and after screenshots of the change if applicable.
|
| 32 |
+
|
| 33 |
+
<!--
|
| 34 |
+
Example:
|
| 35 |
+
|
| 36 |
+
| Before | After |
|
| 37 |
+
| ------ | ----- |
|
| 38 |
+
| _gif/png before_ | _gif/png after_ |
|
| 39 |
+
|
| 40 |
+
To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections.
|
| 41 |
+
-->
|
| 42 |
+
|
| 43 |
+
## Checklist
|
| 44 |
+
|
| 45 |
+
- [ ] I have read and understood the [contribution guidelines](https://uw-lab.github.io/UWLab/main/source/refs/contributing.html)
|
| 46 |
+
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./uwlab.sh --format`
|
| 47 |
+
- [ ] I have made corresponding changes to the documentation
|
| 48 |
+
- [ ] My changes generate no new warnings
|
| 49 |
+
- [ ] I have added tests that prove my fix is effective or that my feature works
|
| 50 |
+
- [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file
|
| 51 |
+
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
|
| 52 |
+
|
| 53 |
+
<!--
|
| 54 |
+
As you go through the checklist above, you can mark something as done by putting an x character in it
|
| 55 |
+
|
| 56 |
+
For example,
|
| 57 |
+
- [x] I have done this task
|
| 58 |
+
- [ ] I have not done this task
|
| 59 |
+
-->
|
.github/actions/combine-results/action.yml
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: 'Combine XML Test Results'
|
| 7 |
+
description: 'Combines multiple XML test result files into a single file'
|
| 8 |
+
|
| 9 |
+
inputs:
|
| 10 |
+
tests-dir:
|
| 11 |
+
description: 'Directory containing test result files'
|
| 12 |
+
default: 'tests'
|
| 13 |
+
required: false
|
| 14 |
+
output-file:
|
| 15 |
+
description: 'Output combined XML file path'
|
| 16 |
+
required: true
|
| 17 |
+
reports-dir:
|
| 18 |
+
description: 'Directory to store the combined results'
|
| 19 |
+
default: 'reports'
|
| 20 |
+
required: false
|
| 21 |
+
|
| 22 |
+
runs:
|
| 23 |
+
using: composite
|
| 24 |
+
steps:
|
| 25 |
+
- name: Combine XML Test Results
|
| 26 |
+
shell: sh
|
| 27 |
+
run: |
|
| 28 |
+
# Function to combine multiple XML test results
|
| 29 |
+
combine_xml_results() {
|
| 30 |
+
local tests_dir="$1"
|
| 31 |
+
local output_file="$2"
|
| 32 |
+
local reports_dir="$3"
|
| 33 |
+
|
| 34 |
+
echo "Combining test results from: $tests_dir"
|
| 35 |
+
echo "Output file: $output_file"
|
| 36 |
+
echo "Reports directory: $reports_dir"
|
| 37 |
+
|
| 38 |
+
# Check if reports directory exists
|
| 39 |
+
if [ ! -d "$reports_dir" ]; then
|
| 40 |
+
echo "⚠️ Reports directory does not exist: $reports_dir"
|
| 41 |
+
mkdir -p "$reports_dir"
|
| 42 |
+
fi
|
| 43 |
+
|
| 44 |
+
# Check if tests directory exists
|
| 45 |
+
if [ ! -d "$tests_dir" ]; then
|
| 46 |
+
echo "⚠️ Tests directory does not exist: $tests_dir"
|
| 47 |
+
echo "Creating fallback XML..."
|
| 48 |
+
echo '<?xml version="1.0" encoding="utf-8"?><testsuite name="combined" tests="0" failures="0" errors="1" time="0"><testcase classname="setup" name="no_tests_dir"><error message="Tests directory not found">Tests directory was not found</error></testcase></testsuite>' > "$output_file"
|
| 49 |
+
return
|
| 50 |
+
fi
|
| 51 |
+
|
| 52 |
+
# Find all XML files in the tests directory
|
| 53 |
+
echo "Searching for XML files in: $tests_dir"
|
| 54 |
+
xml_files=$(find "$tests_dir" -name "*.xml" -type f 2>/dev/null | sort)
|
| 55 |
+
|
| 56 |
+
if [ -z "$xml_files" ]; then
|
| 57 |
+
echo "⚠️ No XML files found in: $tests_dir"
|
| 58 |
+
echo "Creating fallback XML..."
|
| 59 |
+
echo '<?xml version="1.0" encoding="utf-8"?><testsuite name="combined" tests="0" failures="0" errors="1" time="0"><testcase classname="setup" name="no_xml_files"><error message="No XML files found">No XML test result files were found</error></testcase></testsuite>' > "$output_file"
|
| 60 |
+
return
|
| 61 |
+
fi
|
| 62 |
+
|
| 63 |
+
# Count XML files found
|
| 64 |
+
file_count=$(echo "$xml_files" | wc -l)
|
| 65 |
+
echo "✅ Found $file_count XML file(s):"
|
| 66 |
+
echo "$xml_files" | while read -r file; do
|
| 67 |
+
echo " - $file ($(wc -c < "$file") bytes)"
|
| 68 |
+
done
|
| 69 |
+
|
| 70 |
+
# Create combined XML
|
| 71 |
+
echo "🔄 Combining $file_count XML files..."
|
| 72 |
+
echo '<?xml version="1.0" encoding="utf-8"?>' > "$output_file"
|
| 73 |
+
echo '<testsuites>' >> "$output_file"
|
| 74 |
+
|
| 75 |
+
# Process each XML file
|
| 76 |
+
combined_count=0
|
| 77 |
+
echo "$xml_files" | while read -r file; do
|
| 78 |
+
if [ -f "$file" ]; then
|
| 79 |
+
echo " Processing: $file"
|
| 80 |
+
# Remove XML declaration and outer testsuites wrapper from each file
|
| 81 |
+
# Remove first line (XML declaration) and strip outer <testsuites>/</testsuites> tags
|
| 82 |
+
sed '1d; s/^<testsuites>//; s/<\/testsuites>$//' "$file" >> "$output_file" 2>/dev/null || {
|
| 83 |
+
echo " ⚠️ Warning: Could not process $file, skipping..."
|
| 84 |
+
}
|
| 85 |
+
combined_count=$((combined_count + 1))
|
| 86 |
+
fi
|
| 87 |
+
done
|
| 88 |
+
|
| 89 |
+
echo '</testsuites>' >> "$output_file"
|
| 90 |
+
echo "✅ Successfully combined $combined_count files into: $output_file"
|
| 91 |
+
|
| 92 |
+
# Verify output file was created
|
| 93 |
+
if [ -f "$output_file" ]; then
|
| 94 |
+
echo "✅ Final output file created: $output_file"
|
| 95 |
+
echo "📊 Output file size: $(wc -c < "$output_file") bytes"
|
| 96 |
+
else
|
| 97 |
+
echo "❌ Failed to create output file: $output_file"
|
| 98 |
+
exit 1
|
| 99 |
+
fi
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
# Call the function with provided parameters
|
| 103 |
+
combine_xml_results "${{ inputs.tests-dir }}" "${{ inputs.output-file }}" "${{ inputs.reports-dir }}"
|
.github/actions/docker-build/action.yml
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: 'Build Docker Image'
|
| 7 |
+
description: 'Builds a Docker image with IsaacSim and UWLab dependencies'
|
| 8 |
+
|
| 9 |
+
inputs:
|
| 10 |
+
image-tag:
|
| 11 |
+
description: 'Docker image tag to use'
|
| 12 |
+
required: true
|
| 13 |
+
isaacsim-base-image:
|
| 14 |
+
description: 'IsaacSim base image'
|
| 15 |
+
required: true
|
| 16 |
+
isaacsim-version:
|
| 17 |
+
description: 'IsaacSim version'
|
| 18 |
+
required: true
|
| 19 |
+
dockerfile-path:
|
| 20 |
+
description: 'Path to Dockerfile'
|
| 21 |
+
default: 'docker/Dockerfile.base'
|
| 22 |
+
required: false
|
| 23 |
+
context-path:
|
| 24 |
+
description: 'Build context path'
|
| 25 |
+
default: '.'
|
| 26 |
+
required: false
|
| 27 |
+
|
| 28 |
+
runs:
|
| 29 |
+
using: composite
|
| 30 |
+
steps:
|
| 31 |
+
- name: NGC Login
|
| 32 |
+
shell: sh
|
| 33 |
+
run: |
|
| 34 |
+
# Only attempt NGC login if API key is available
|
| 35 |
+
if [ -n "${{ env.NGC_API_KEY }}" ]; then
|
| 36 |
+
echo "Logging into NGC registry..."
|
| 37 |
+
docker login -u \$oauthtoken -p ${{ env.NGC_API_KEY }} nvcr.io
|
| 38 |
+
echo "✅ Successfully logged into NGC registry"
|
| 39 |
+
else
|
| 40 |
+
echo "⚠️ NGC_API_KEY not available - skipping NGC login"
|
| 41 |
+
echo "This is normal for PRs from forks or when secrets are not configured"
|
| 42 |
+
fi
|
| 43 |
+
|
| 44 |
+
- name: Build Docker Image
|
| 45 |
+
shell: sh
|
| 46 |
+
run: |
|
| 47 |
+
# Function to build Docker image
|
| 48 |
+
build_docker_image() {
|
| 49 |
+
local image_tag="$1"
|
| 50 |
+
local isaacsim_base_image="$2"
|
| 51 |
+
local isaacsim_version="$3"
|
| 52 |
+
local dockerfile_path="$4"
|
| 53 |
+
local context_path="$5"
|
| 54 |
+
|
| 55 |
+
echo "Building Docker image: $image_tag"
|
| 56 |
+
echo "Using Dockerfile: $dockerfile_path"
|
| 57 |
+
echo "Build context: $context_path"
|
| 58 |
+
|
| 59 |
+
# Build Docker image
|
| 60 |
+
docker buildx build --progress=plain --platform linux/amd64 \
|
| 61 |
+
-t uw-lab-dev \
|
| 62 |
+
-t $image_tag \
|
| 63 |
+
--build-arg ISAACSIM_BASE_IMAGE_ARG="$isaacsim_base_image" \
|
| 64 |
+
--build-arg ISAACSIM_VERSION_ARG="$isaacsim_version" \
|
| 65 |
+
--build-arg ISAACSIM_ROOT_PATH_ARG=/isaac-sim \
|
| 66 |
+
--build-arg UWLAB_PATH_ARG=/workspace/uwlab \
|
| 67 |
+
--build-arg DOCKER_USER_HOME_ARG=/root \
|
| 68 |
+
--cache-from type=gha \
|
| 69 |
+
--cache-to type=gha,mode=max \
|
| 70 |
+
-f $dockerfile_path \
|
| 71 |
+
--load $context_path
|
| 72 |
+
|
| 73 |
+
echo "✅ Docker image built successfully: $image_tag"
|
| 74 |
+
docker images | grep uw-lab-dev
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
# Call the function with provided parameters
|
| 78 |
+
build_docker_image "${{ inputs.image-tag }}" "${{ inputs.isaacsim-base-image }}" "${{ inputs.isaacsim-version }}" "${{ inputs.dockerfile-path }}" "${{ inputs.context-path }}"
|
.github/actions/run-tests/action.yml
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: 'Run Tests in Docker Container'
|
| 7 |
+
description: 'Runs pytest tests in a Docker container with GPU support and result collection'
|
| 8 |
+
|
| 9 |
+
inputs:
|
| 10 |
+
test-path:
|
| 11 |
+
description: 'Path to test directory or pytest arguments'
|
| 12 |
+
required: true
|
| 13 |
+
result-file:
|
| 14 |
+
description: 'Name of the result XML file'
|
| 15 |
+
required: true
|
| 16 |
+
container-name:
|
| 17 |
+
description: 'Name for the Docker container'
|
| 18 |
+
required: true
|
| 19 |
+
image-tag:
|
| 20 |
+
description: 'Docker image tag to use'
|
| 21 |
+
required: true
|
| 22 |
+
reports-dir:
|
| 23 |
+
description: 'Directory to store test results'
|
| 24 |
+
default: 'reports'
|
| 25 |
+
required: false
|
| 26 |
+
pytest-options:
|
| 27 |
+
description: 'Additional pytest options (e.g., -k filter)'
|
| 28 |
+
default: ''
|
| 29 |
+
required: false
|
| 30 |
+
filter-pattern:
|
| 31 |
+
description: 'Pattern to filter test files (e.g., uwlab_tasks)'
|
| 32 |
+
default: ''
|
| 33 |
+
required: false
|
| 34 |
+
|
| 35 |
+
runs:
|
| 36 |
+
using: composite
|
| 37 |
+
steps:
|
| 38 |
+
- name: Run Tests in Docker Container
|
| 39 |
+
shell: bash
|
| 40 |
+
run: |
|
| 41 |
+
# Function to run tests in Docker container
|
| 42 |
+
run_tests() {
|
| 43 |
+
local test_path="$1"
|
| 44 |
+
local result_file="$2"
|
| 45 |
+
local container_name="$3"
|
| 46 |
+
local image_tag="$4"
|
| 47 |
+
local reports_dir="$5"
|
| 48 |
+
local pytest_options="$6"
|
| 49 |
+
local filter_pattern="$7"
|
| 50 |
+
|
| 51 |
+
echo "Running tests in: $test_path"
|
| 52 |
+
if [ -n "$pytest_options" ]; then
|
| 53 |
+
echo "With pytest options: $pytest_options"
|
| 54 |
+
fi
|
| 55 |
+
if [ -n "$filter_pattern" ]; then
|
| 56 |
+
echo "With filter pattern: $filter_pattern"
|
| 57 |
+
fi
|
| 58 |
+
|
| 59 |
+
# Create reports directory
|
| 60 |
+
mkdir -p "$reports_dir"
|
| 61 |
+
|
| 62 |
+
# Clean up any existing container
|
| 63 |
+
docker rm -f $container_name 2>/dev/null || true
|
| 64 |
+
|
| 65 |
+
# Build Docker environment variables
|
| 66 |
+
docker_env_vars="\
|
| 67 |
+
-e OMNI_KIT_ACCEPT_EULA=yes \
|
| 68 |
+
-e ACCEPT_EULA=Y \
|
| 69 |
+
-e OMNI_KIT_DISABLE_CUP=1 \
|
| 70 |
+
-e ISAAC_SIM_HEADLESS=1 \
|
| 71 |
+
-e ISAAC_SIM_LOW_MEMORY=1 \
|
| 72 |
+
-e PYTHONUNBUFFERED=1 \
|
| 73 |
+
-e PYTHONIOENCODING=utf-8 \
|
| 74 |
+
-e TEST_RESULT_FILE=$result_file"
|
| 75 |
+
|
| 76 |
+
if [ -n "$filter_pattern" ]; then
|
| 77 |
+
if [[ "$filter_pattern" == not* ]]; then
|
| 78 |
+
# Handle "not pattern" case
|
| 79 |
+
exclude_pattern="${filter_pattern#not }"
|
| 80 |
+
docker_env_vars="$docker_env_vars -e TEST_EXCLUDE_PATTERN=$exclude_pattern"
|
| 81 |
+
echo "Setting exclude pattern: $exclude_pattern"
|
| 82 |
+
else
|
| 83 |
+
# Handle positive pattern case
|
| 84 |
+
docker_env_vars="$docker_env_vars -e TEST_FILTER_PATTERN=$filter_pattern"
|
| 85 |
+
echo "Setting include pattern: $filter_pattern"
|
| 86 |
+
fi
|
| 87 |
+
else
|
| 88 |
+
echo "No filter pattern provided"
|
| 89 |
+
fi
|
| 90 |
+
|
| 91 |
+
echo "Docker environment variables: '$docker_env_vars'"
|
| 92 |
+
|
| 93 |
+
# Run tests in container with error handling
|
| 94 |
+
echo "🚀 Starting Docker container for tests..."
|
| 95 |
+
if docker run --name $container_name \
|
| 96 |
+
--entrypoint bash --gpus all --network=host \
|
| 97 |
+
--security-opt=no-new-privileges:true \
|
| 98 |
+
--memory=$(echo "$(free -m | awk '/^Mem:/{print $2}') * 0.9 / 1" | bc)m \
|
| 99 |
+
--cpus=$(echo "$(nproc) * 0.9" | bc) \
|
| 100 |
+
--oom-kill-disable=false \
|
| 101 |
+
--ulimit nofile=65536:65536 \
|
| 102 |
+
--ulimit nproc=4096:4096 \
|
| 103 |
+
$docker_env_vars \
|
| 104 |
+
$image_tag \
|
| 105 |
+
-c "
|
| 106 |
+
set -e
|
| 107 |
+
cd /workspace/uwlab
|
| 108 |
+
mkdir -p tests
|
| 109 |
+
echo 'Starting pytest with path: $test_path'
|
| 110 |
+
/isaac-sim/python.sh -m pytest --ignore=tools/conftest.py $test_path $pytest_options -v --junitxml=tests/$result_file || echo 'Pytest completed with exit code: $?'
|
| 111 |
+
"; then
|
| 112 |
+
echo "✅ Docker container completed successfully"
|
| 113 |
+
else
|
| 114 |
+
echo "⚠️ Docker container failed, but continuing to copy results..."
|
| 115 |
+
fi
|
| 116 |
+
|
| 117 |
+
# Copy test results with error handling
|
| 118 |
+
echo "📋 Attempting to copy test results..."
|
| 119 |
+
if docker cp $container_name:/workspace/uwlab/tests/$result_file "$reports_dir/$result_file" 2>/dev/null; then
|
| 120 |
+
echo "✅ Test results copied successfully"
|
| 121 |
+
else
|
| 122 |
+
echo "❌ Failed to copy specific result file, trying to copy all test results..."
|
| 123 |
+
if docker cp $container_name:/workspace/uwlab/tests/ "$reports_dir/" 2>/dev/null; then
|
| 124 |
+
echo "✅ All test results copied successfully"
|
| 125 |
+
# Look for any XML files and use the first one found
|
| 126 |
+
if [ -f "$reports_dir/full_report.xml" ]; then
|
| 127 |
+
mv "$reports_dir/full_report.xml" "$reports_dir/$result_file"
|
| 128 |
+
echo "✅ Found and renamed full_report.xml to $result_file"
|
| 129 |
+
elif [ -f "$reports_dir/test-reports-"*".xml" ]; then
|
| 130 |
+
# Combine individual test reports if no full report exists
|
| 131 |
+
echo "📊 Combining individual test reports..."
|
| 132 |
+
echo '<?xml version="1.0" encoding="utf-8"?><testsuites>' > "$reports_dir/$result_file"
|
| 133 |
+
for xml_file in "$reports_dir"/test-reports-*.xml; do
|
| 134 |
+
if [ -f "$xml_file" ]; then
|
| 135 |
+
echo " Processing: $xml_file"
|
| 136 |
+
sed '1d; /^<testsuite/d; /^<\/testsuite/d' "$xml_file" >> "$reports_dir/$result_file" 2>/dev/null || true
|
| 137 |
+
fi
|
| 138 |
+
done
|
| 139 |
+
echo '</testsuites>' >> "$reports_dir/$result_file"
|
| 140 |
+
echo "✅ Combined individual test reports into $result_file"
|
| 141 |
+
else
|
| 142 |
+
echo "❌ No test result files found, creating fallback"
|
| 143 |
+
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuite name=\"$container_name\" tests=\"0\" failures=\"0\" errors=\"1\" time=\"0\"><testcase classname=\"setup\" name=\"no_results_found\"><error message=\"No test results found\">Container may have failed to generate any results</error></testcase></testsuite>" > "$reports_dir/$result_file"
|
| 144 |
+
fi
|
| 145 |
+
else
|
| 146 |
+
echo "❌ Failed to copy any test results, creating fallback"
|
| 147 |
+
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?><testsuite name=\"$container_name\" tests=\"0\" failures=\"0\" errors=\"1\" time=\"0\"><testcase classname=\"setup\" name=\"copy_failed\"><error message=\"Failed to copy test results\">Container may have failed to generate results</error></testcase></testsuite>" > "$reports_dir/$result_file"
|
| 148 |
+
fi
|
| 149 |
+
fi
|
| 150 |
+
|
| 151 |
+
# Clean up container
|
| 152 |
+
echo "🧹 Cleaning up Docker container..."
|
| 153 |
+
docker rm $container_name 2>/dev/null || echo "⚠️ Container cleanup failed, but continuing..."
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
# Call the function with provided parameters
|
| 157 |
+
run_tests "${{ inputs.test-path }}" "${{ inputs.result-file }}" "${{ inputs.container-name }}" "${{ inputs.image-tag }}" "${{ inputs.reports-dir }}" "${{ inputs.pytest-options }}" "${{ inputs.filter-pattern }}"
|
.github/labeler.yml
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
# Documentation-related changes
|
| 7 |
+
documentation:
|
| 8 |
+
- all:
|
| 9 |
+
- changed-files:
|
| 10 |
+
- any-glob-to-any-file:
|
| 11 |
+
- 'docs/**'
|
| 12 |
+
- '**/README.md'
|
| 13 |
+
- all-globs-to-all-files:
|
| 14 |
+
- '!docs/licenses/**'
|
| 15 |
+
|
| 16 |
+
# Infrastructure changes
|
| 17 |
+
infrastructure:
|
| 18 |
+
- changed-files:
|
| 19 |
+
- any-glob-to-any-file:
|
| 20 |
+
- .github/**
|
| 21 |
+
- docker/**
|
| 22 |
+
- .dockerignore
|
| 23 |
+
- tools/**
|
| 24 |
+
- .vscode/**
|
| 25 |
+
- environment.yml
|
| 26 |
+
- setup.py
|
| 27 |
+
- pyproject.toml
|
| 28 |
+
- .pre-commit-config.yaml
|
| 29 |
+
- .flake8
|
| 30 |
+
- uwlab.sh
|
| 31 |
+
- uwlab.bat
|
| 32 |
+
- docs/licenses/**
|
| 33 |
+
|
| 34 |
+
# Assets (USD, glTF, etc.) related changes.
|
| 35 |
+
asset:
|
| 36 |
+
- changed-files:
|
| 37 |
+
- any-glob-to-any-file:
|
| 38 |
+
- source/uwlab_assets/**
|
| 39 |
+
|
| 40 |
+
# Core related changes.
|
| 41 |
+
core:
|
| 42 |
+
- all:
|
| 43 |
+
- changed-files:
|
| 44 |
+
- any-glob-to-any-file:
|
| 45 |
+
- source/**
|
| 46 |
+
- scripts/**
|
| 47 |
+
- scripts_v2/**
|
| 48 |
+
- all-globs-to-all-files:
|
| 49 |
+
- '!source/uwlab_assets/**'
|
| 50 |
+
|
| 51 |
+
# Add 'enhancement' label to any PR where the head branch name
|
| 52 |
+
# starts with `feature` or has a `feature` section in the name
|
| 53 |
+
enhancement:
|
| 54 |
+
- head-branch: ['^feature', 'feature']
|
| 55 |
+
|
| 56 |
+
# Add 'bug' label to any PR where the head branch name
|
| 57 |
+
# starts with `fix`/`bug` or has a `fix`/`bug` section in the name
|
| 58 |
+
bug:
|
| 59 |
+
- head-branch: ['^fix', 'fix', '^bug', 'bug']
|
.github/stale.yml
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
# Configuration for probot-stale - https://github.com/probot/stale
|
| 7 |
+
|
| 8 |
+
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
| 9 |
+
daysUntilStale: 60
|
| 10 |
+
|
| 11 |
+
# Number of days of inactivity before an Issue or Pull Request with the stale label is closed.
|
| 12 |
+
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
| 13 |
+
daysUntilClose: 14
|
| 14 |
+
|
| 15 |
+
# Only issues or pull requests with all of these labels are check if stale. Defaults to `[]` (disabled)
|
| 16 |
+
onlyLabels:
|
| 17 |
+
- more-information-needed
|
| 18 |
+
|
| 19 |
+
# Issues or Pull Requests with these labels will never be considered stale. Set to `[]` to disable
|
| 20 |
+
exemptLabels:
|
| 21 |
+
- pinned
|
| 22 |
+
- security
|
| 23 |
+
- "[Status] Maybe Later"
|
| 24 |
+
|
| 25 |
+
# Set to true to ignore issues in a project (defaults to false)
|
| 26 |
+
exemptProjects: true
|
| 27 |
+
|
| 28 |
+
# Set to true to ignore issues in a milestone (defaults to false)
|
| 29 |
+
exemptMilestones: true
|
| 30 |
+
|
| 31 |
+
# Set to true to ignore issues with an assignee (defaults to false)
|
| 32 |
+
exemptAssignees: true
|
| 33 |
+
|
| 34 |
+
# Label to use when marking as stale
|
| 35 |
+
staleLabel: stale
|
| 36 |
+
|
| 37 |
+
# Comment to post when marking as stale. Set to `false` to disable
|
| 38 |
+
markComment: >
|
| 39 |
+
This issue has been automatically marked as stale because it has not had
|
| 40 |
+
recent activity. It will be closed if no further activity occurs. Thank you
|
| 41 |
+
for your contributions.
|
| 42 |
+
|
| 43 |
+
# Comment to post when removing the stale label.
|
| 44 |
+
# unmarkComment: >
|
| 45 |
+
# Your comment here.
|
| 46 |
+
|
| 47 |
+
# Comment to post when closing a stale Issue or Pull Request.
|
| 48 |
+
# closeComment: >
|
| 49 |
+
# Your comment here.
|
| 50 |
+
|
| 51 |
+
# Limit the number of actions per hour, from 1-30. Default is 30
|
| 52 |
+
limitPerRun: 30
|
| 53 |
+
|
| 54 |
+
# Limit to only `issues` or `pulls`
|
| 55 |
+
only: issues
|
| 56 |
+
|
| 57 |
+
# Optionally, specify configuration settings that are specific to just 'issues' or 'pulls':
|
| 58 |
+
# pulls:
|
| 59 |
+
# daysUntilStale: 30
|
| 60 |
+
# markComment: >
|
| 61 |
+
# This pull request has been automatically marked as stale because it has not had
|
| 62 |
+
# recent activity. It will be closed if no further activity occurs. Thank you
|
| 63 |
+
# for your contributions.
|
| 64 |
+
|
| 65 |
+
# issues:
|
| 66 |
+
# exemptLabels:
|
| 67 |
+
# - confirmed
|
.github/workflows/build.yml
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: Build and Test
|
| 7 |
+
|
| 8 |
+
on:
|
| 9 |
+
pull_request:
|
| 10 |
+
branches:
|
| 11 |
+
- devel
|
| 12 |
+
- main
|
| 13 |
+
- 'release/**'
|
| 14 |
+
|
| 15 |
+
# Concurrency control to prevent parallel runs on the same PR
|
| 16 |
+
concurrency:
|
| 17 |
+
group: ${{ github.workflow }}-${{ github.ref }}
|
| 18 |
+
cancel-in-progress: true
|
| 19 |
+
|
| 20 |
+
permissions:
|
| 21 |
+
contents: read
|
| 22 |
+
pull-requests: write
|
| 23 |
+
checks: write
|
| 24 |
+
issues: read
|
| 25 |
+
|
| 26 |
+
env:
|
| 27 |
+
NGC_API_KEY: ${{ secrets.NGC_API_KEY }}
|
| 28 |
+
ISAACSIM_BASE_IMAGE: ${{ vars.ISAACSIM_BASE_IMAGE || 'nvcr.io/nvidia/isaac-sim' }}
|
| 29 |
+
ISAACSIM_BASE_VERSION: ${{ vars.ISAACSIM_BASE_VERSION || '5.1.0' }}
|
| 30 |
+
DOCKER_IMAGE_TAG: uw-lab-dev:${{ github.event_name == 'pull_request' && format('pr-{0}', github.event.pull_request.number) || github.ref_name }}-${{ github.sha }}
|
| 31 |
+
|
| 32 |
+
jobs:
|
| 33 |
+
test-uwlab-tasks:
|
| 34 |
+
runs-on: [self-hosted, gpu, 24g]
|
| 35 |
+
timeout-minutes: 180
|
| 36 |
+
continue-on-error: true
|
| 37 |
+
|
| 38 |
+
steps:
|
| 39 |
+
- name: Checkout Code
|
| 40 |
+
uses: actions/checkout@v4
|
| 41 |
+
with:
|
| 42 |
+
fetch-depth: 0
|
| 43 |
+
lfs: true
|
| 44 |
+
|
| 45 |
+
- name: Remove previous uw-lab-dev images
|
| 46 |
+
run: |
|
| 47 |
+
IDS=$(docker image ls -q uw-lab-dev 2>/dev/null || true)
|
| 48 |
+
if [ -n "$IDS" ]; then
|
| 49 |
+
echo "Removing existing uw-lab-dev images: $IDS"
|
| 50 |
+
docker image rm -f $IDS || true
|
| 51 |
+
else
|
| 52 |
+
echo "No existing uw-lab-dev images to remove."
|
| 53 |
+
fi
|
| 54 |
+
|
| 55 |
+
- name: Build Docker Image
|
| 56 |
+
uses: ./.github/actions/docker-build
|
| 57 |
+
with:
|
| 58 |
+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
|
| 59 |
+
isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
|
| 60 |
+
isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
|
| 61 |
+
|
| 62 |
+
- name: Run UWLab Tasks Tests
|
| 63 |
+
uses: ./.github/actions/run-tests
|
| 64 |
+
with:
|
| 65 |
+
test-path: "tools"
|
| 66 |
+
result-file: "uwlab-tasks-report.xml"
|
| 67 |
+
container-name: "uw-lab-tasks-test-$$"
|
| 68 |
+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
|
| 69 |
+
pytest-options: ""
|
| 70 |
+
filter-pattern: "uwlab_tasks"
|
| 71 |
+
|
| 72 |
+
- name: Copy Test Results from UWLab Tasks Container
|
| 73 |
+
run: |
|
| 74 |
+
CONTAINER_NAME="uw-lab-tasks-test-$$"
|
| 75 |
+
if docker ps -a | grep -q $CONTAINER_NAME; then
|
| 76 |
+
echo "Copying test results from UWLab Tasks container..."
|
| 77 |
+
docker cp $CONTAINER_NAME:/workspace/uwlab/tests/uwlab-tasks-report.xml reports/ 2>/dev/null || echo "No test results to copy from UWLab Tasks container"
|
| 78 |
+
fi
|
| 79 |
+
|
| 80 |
+
- name: Upload UWLab Tasks Test Results
|
| 81 |
+
uses: actions/upload-artifact@v4
|
| 82 |
+
if: always()
|
| 83 |
+
with:
|
| 84 |
+
name: uwlab-tasks-test-results
|
| 85 |
+
path: reports/uwlab-tasks-report.xml
|
| 86 |
+
retention-days: 1
|
| 87 |
+
compression-level: 9
|
| 88 |
+
|
| 89 |
+
- name: Check Test Results for Fork PRs
|
| 90 |
+
if: github.event.pull_request.head.repo.full_name != github.repository
|
| 91 |
+
run: |
|
| 92 |
+
if [ -f "reports/uwlab-tasks-report.xml" ]; then
|
| 93 |
+
# Check if the test results contain any failures
|
| 94 |
+
if grep -q 'failures="[1-9]' reports/uwlab-tasks-report.xml || grep -q 'errors="[1-9]' reports/uwlab-tasks-report.xml; then
|
| 95 |
+
echo "Tests failed for PR from fork. The test report is in the logs. Failing the job."
|
| 96 |
+
exit 1
|
| 97 |
+
fi
|
| 98 |
+
else
|
| 99 |
+
echo "No test results file found. This might indicate test execution failed."
|
| 100 |
+
exit 1
|
| 101 |
+
fi
|
| 102 |
+
|
| 103 |
+
test-general:
|
| 104 |
+
runs-on: [self-hosted, gpu]
|
| 105 |
+
timeout-minutes: 180
|
| 106 |
+
|
| 107 |
+
steps:
|
| 108 |
+
- name: Checkout Code
|
| 109 |
+
uses: actions/checkout@v4
|
| 110 |
+
with:
|
| 111 |
+
fetch-depth: 0
|
| 112 |
+
lfs: true
|
| 113 |
+
|
| 114 |
+
- name: Remove previous uw-lab-dev images
|
| 115 |
+
run: |
|
| 116 |
+
IDS=$(docker image ls -q uw-lab-dev 2>/dev/null || true)
|
| 117 |
+
if [ -n "$IDS" ]; then
|
| 118 |
+
echo "Removing existing uw-lab-dev images: $IDS"
|
| 119 |
+
docker image rm -f $IDS || true
|
| 120 |
+
else
|
| 121 |
+
echo "No existing uw-lab-dev images to remove."
|
| 122 |
+
fi
|
| 123 |
+
|
| 124 |
+
- name: Build Docker Image
|
| 125 |
+
uses: ./.github/actions/docker-build
|
| 126 |
+
with:
|
| 127 |
+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
|
| 128 |
+
isaacsim-base-image: ${{ env.ISAACSIM_BASE_IMAGE }}
|
| 129 |
+
isaacsim-version: ${{ env.ISAACSIM_BASE_VERSION }}
|
| 130 |
+
|
| 131 |
+
- name: Run General Tests
|
| 132 |
+
id: run-general-tests
|
| 133 |
+
uses: ./.github/actions/run-tests
|
| 134 |
+
with:
|
| 135 |
+
test-path: "tools"
|
| 136 |
+
result-file: "general-tests-report.xml"
|
| 137 |
+
container-name: "uw-lab-general-test-$$"
|
| 138 |
+
image-tag: ${{ env.DOCKER_IMAGE_TAG }}
|
| 139 |
+
pytest-options: ""
|
| 140 |
+
filter-pattern: "not uwlab_tasks"
|
| 141 |
+
|
| 142 |
+
- name: Copy Test Results from General Tests Container
|
| 143 |
+
run: |
|
| 144 |
+
CONTAINER_NAME="uw-lab-general-test-$$"
|
| 145 |
+
if docker ps -a | grep -q $CONTAINER_NAME; then
|
| 146 |
+
echo "Copying test results from General Tests container..."
|
| 147 |
+
docker cp $CONTAINER_NAME:/workspace/uwlab/tests/general-tests-report.xml reports/ 2>/dev/null || echo "No test results to copy from General Tests container"
|
| 148 |
+
fi
|
| 149 |
+
|
| 150 |
+
- name: Upload General Test Results
|
| 151 |
+
uses: actions/upload-artifact@v4
|
| 152 |
+
if: always()
|
| 153 |
+
with:
|
| 154 |
+
name: general-test-results
|
| 155 |
+
path: reports/general-tests-report.xml
|
| 156 |
+
retention-days: 1
|
| 157 |
+
compression-level: 9
|
| 158 |
+
|
| 159 |
+
- name: Check Test Results for Fork PRs
|
| 160 |
+
if: github.event.pull_request.head.repo.full_name != github.repository
|
| 161 |
+
run: |
|
| 162 |
+
if [ -f "reports/general-tests-report.xml" ]; then
|
| 163 |
+
# Check if the test results contain any failures
|
| 164 |
+
if grep -q 'failures="[1-9]' reports/general-tests-report.xml || grep -q 'errors="[1-9]' reports/general-tests-report.xml; then
|
| 165 |
+
echo "Tests failed for PR from fork. The test report is in the logs. Failing the job."
|
| 166 |
+
exit 1
|
| 167 |
+
fi
|
| 168 |
+
else
|
| 169 |
+
echo "No test results file found. This might indicate test execution failed."
|
| 170 |
+
exit 1
|
| 171 |
+
fi
|
| 172 |
+
|
| 173 |
+
combine-results:
|
| 174 |
+
needs: [test-uwlab-tasks, test-general]
|
| 175 |
+
runs-on: [self-hosted, gpu]
|
| 176 |
+
if: always()
|
| 177 |
+
|
| 178 |
+
steps:
|
| 179 |
+
- name: Checkout Code
|
| 180 |
+
uses: actions/checkout@v4
|
| 181 |
+
with:
|
| 182 |
+
fetch-depth: 0
|
| 183 |
+
lfs: false
|
| 184 |
+
|
| 185 |
+
- name: Create Reports Directory
|
| 186 |
+
run: |
|
| 187 |
+
mkdir -p reports
|
| 188 |
+
|
| 189 |
+
- name: Download Test Results
|
| 190 |
+
uses: actions/download-artifact@v4
|
| 191 |
+
with:
|
| 192 |
+
name: uwlab-tasks-test-results
|
| 193 |
+
path: reports/
|
| 194 |
+
continue-on-error: true
|
| 195 |
+
|
| 196 |
+
- name: Download General Test Results
|
| 197 |
+
uses: actions/download-artifact@v4
|
| 198 |
+
with:
|
| 199 |
+
name: general-test-results
|
| 200 |
+
path: reports/
|
| 201 |
+
|
| 202 |
+
- name: Combine All Test Results
|
| 203 |
+
uses: ./.github/actions/combine-results
|
| 204 |
+
with:
|
| 205 |
+
tests-dir: "reports"
|
| 206 |
+
output-file: "reports/combined-results.xml"
|
| 207 |
+
|
| 208 |
+
- name: Upload Combined Test Results
|
| 209 |
+
uses: actions/upload-artifact@v4
|
| 210 |
+
if: always()
|
| 211 |
+
with:
|
| 212 |
+
name: pr-${{ github.event.pull_request.number }}-combined-test-results
|
| 213 |
+
path: reports/combined-results.xml
|
| 214 |
+
retention-days: 7
|
| 215 |
+
compression-level: 9
|
| 216 |
+
|
| 217 |
+
- name: Comment on Test Results
|
| 218 |
+
id: test-reporter
|
| 219 |
+
if: github.event.pull_request.head.repo.full_name == github.repository
|
| 220 |
+
uses: EnricoMi/publish-unit-test-result-action@v2
|
| 221 |
+
with:
|
| 222 |
+
files: "reports/combined-results.xml"
|
| 223 |
+
check_name: "Tests Summary"
|
| 224 |
+
comment_mode: changes
|
| 225 |
+
comment_title: "Test Results Summary"
|
| 226 |
+
report_individual_runs: false
|
| 227 |
+
deduplicate_classes_by_file_name: true
|
| 228 |
+
compare_to_earlier_commit: true
|
| 229 |
+
fail_on: errors
|
| 230 |
+
action_fail_on_inconclusive: true
|
| 231 |
+
|
| 232 |
+
- name: Report Test Results
|
| 233 |
+
if: github.event.pull_request.head.repo.full_name == github.repository
|
| 234 |
+
uses: dorny/test-reporter@v1
|
| 235 |
+
with:
|
| 236 |
+
name: UWLab Build and Test Results
|
| 237 |
+
path: reports/combined-results.xml
|
| 238 |
+
reporter: java-junit
|
| 239 |
+
fail-on-error: true
|
| 240 |
+
only-summary: false
|
| 241 |
+
max-annotations: '50'
|
| 242 |
+
report-title: "UWLab Test Results - ${{ github.workflow }}"
|
.github/workflows/check-links.yml
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: Check Documentation Links
|
| 7 |
+
|
| 8 |
+
on:
|
| 9 |
+
# Run on pull requests that modify documentation
|
| 10 |
+
pull_request:
|
| 11 |
+
paths:
|
| 12 |
+
- 'docs/**'
|
| 13 |
+
- '**.md'
|
| 14 |
+
- '.github/workflows/check-links.yml'
|
| 15 |
+
# Run on pushes to main branches
|
| 16 |
+
push:
|
| 17 |
+
branches:
|
| 18 |
+
- main
|
| 19 |
+
- devel
|
| 20 |
+
- 'release/**'
|
| 21 |
+
paths:
|
| 22 |
+
- 'docs/**'
|
| 23 |
+
- '**.md'
|
| 24 |
+
- '.github/workflows/check-links.yml'
|
| 25 |
+
# Allow manual trigger
|
| 26 |
+
workflow_dispatch:
|
| 27 |
+
# Run weekly to catch external links that break over time
|
| 28 |
+
schedule:
|
| 29 |
+
- cron: '0 0 * * 0' # Every Sunday at midnight UTC
|
| 30 |
+
|
| 31 |
+
concurrency:
|
| 32 |
+
group: ${{ github.workflow }}-${{ github.ref }}
|
| 33 |
+
cancel-in-progress: true
|
| 34 |
+
|
| 35 |
+
jobs:
|
| 36 |
+
check-links:
|
| 37 |
+
name: Check for Broken Links
|
| 38 |
+
runs-on: ubuntu-latest
|
| 39 |
+
|
| 40 |
+
steps:
|
| 41 |
+
- name: Checkout code
|
| 42 |
+
uses: actions/checkout@v4
|
| 43 |
+
with:
|
| 44 |
+
fetch-depth: 0
|
| 45 |
+
|
| 46 |
+
- name: Restore lychee cache
|
| 47 |
+
uses: actions/cache@v4
|
| 48 |
+
with:
|
| 49 |
+
path: .lycheecache
|
| 50 |
+
key: cache-lychee-${{ github.sha }}
|
| 51 |
+
restore-keys: cache-lychee-
|
| 52 |
+
|
| 53 |
+
- name: Run Link Checker
|
| 54 |
+
uses: lycheeverse/lychee-action@v2
|
| 55 |
+
with:
|
| 56 |
+
# Check all markdown files and documentation
|
| 57 |
+
args: >-
|
| 58 |
+
--verbose
|
| 59 |
+
--no-progress
|
| 60 |
+
--cache
|
| 61 |
+
--max-cache-age 1d
|
| 62 |
+
--exclude-path './docs/_build'
|
| 63 |
+
--exclude-path './apps/warp-*'
|
| 64 |
+
--exclude-path './logs'
|
| 65 |
+
--exclude-path './outputs'
|
| 66 |
+
--exclude-loopback
|
| 67 |
+
--exclude '^file://'
|
| 68 |
+
--exclude '^mailto:'
|
| 69 |
+
--exclude 'localhost'
|
| 70 |
+
--exclude '127\.0\.0\.1'
|
| 71 |
+
--exclude 'example\.com'
|
| 72 |
+
--exclude 'your-organization'
|
| 73 |
+
--exclude 'YOUR_'
|
| 74 |
+
--exclude 'yourdomain'
|
| 75 |
+
--exclude 'user@'
|
| 76 |
+
--exclude 'helm\.ngc\.nvidia\.com'
|
| 77 |
+
--exclude 'slurm\.schedmd\.com'
|
| 78 |
+
--max-retries 3
|
| 79 |
+
--retry-wait-time 5
|
| 80 |
+
--timeout 30
|
| 81 |
+
--accept 200,201,202,203,204,206,301,302,303,307,308,429
|
| 82 |
+
--scheme https
|
| 83 |
+
--scheme http
|
| 84 |
+
'*.md'
|
| 85 |
+
'**/*.md'
|
| 86 |
+
'docs/**/*.rst'
|
| 87 |
+
'docs/**/*.html'
|
| 88 |
+
# Output results to a file
|
| 89 |
+
output: ./lychee-output.md
|
| 90 |
+
# Fail action on broken links
|
| 91 |
+
fail: true
|
| 92 |
+
# Optional: Use GitHub token for authenticated requests (higher rate limit)
|
| 93 |
+
token: ${{ secrets.GITHUB_TOKEN }}
|
| 94 |
+
|
| 95 |
+
- name: Print results to logs
|
| 96 |
+
if: always()
|
| 97 |
+
run: |
|
| 98 |
+
echo "========================================"
|
| 99 |
+
echo "Link Checker Results:"
|
| 100 |
+
echo "========================================"
|
| 101 |
+
if [ -f ./lychee-output.md ]; then
|
| 102 |
+
cat ./lychee-output.md
|
| 103 |
+
echo ""
|
| 104 |
+
echo "========================================"
|
| 105 |
+
|
| 106 |
+
# Also add to GitHub step summary for easy viewing
|
| 107 |
+
echo "## Link Checker Results" >> $GITHUB_STEP_SUMMARY
|
| 108 |
+
echo "" >> $GITHUB_STEP_SUMMARY
|
| 109 |
+
cat ./lychee-output.md >> $GITHUB_STEP_SUMMARY
|
| 110 |
+
else
|
| 111 |
+
echo "No output file generated"
|
| 112 |
+
echo "========================================"
|
| 113 |
+
fi
|
| 114 |
+
|
| 115 |
+
- name: Fail job if broken links found
|
| 116 |
+
if: failure()
|
| 117 |
+
run: |
|
| 118 |
+
echo "❌ Broken links were found in the documentation!"
|
| 119 |
+
echo "Please review the link checker report above and fix all broken links."
|
| 120 |
+
exit 1
|
.github/workflows/docs.yaml
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: Build & deploy docs
|
| 7 |
+
|
| 8 |
+
on:
|
| 9 |
+
push:
|
| 10 |
+
branches:
|
| 11 |
+
- main
|
| 12 |
+
- devel
|
| 13 |
+
- 'release/**'
|
| 14 |
+
pull_request:
|
| 15 |
+
types: [opened, synchronize, reopened]
|
| 16 |
+
|
| 17 |
+
concurrency:
|
| 18 |
+
group: ${{ github.workflow }}-${{ github.ref }}
|
| 19 |
+
cancel-in-progress: true
|
| 20 |
+
|
| 21 |
+
jobs:
|
| 22 |
+
check-secrets:
|
| 23 |
+
name: Check secrets
|
| 24 |
+
runs-on: ubuntu-latest
|
| 25 |
+
outputs:
|
| 26 |
+
trigger-deploy: ${{ steps.trigger-deploy.outputs.defined }}
|
| 27 |
+
steps:
|
| 28 |
+
- id: trigger-deploy
|
| 29 |
+
env:
|
| 30 |
+
REPO_NAME: ${{ secrets.REPO_NAME }}
|
| 31 |
+
if: "${{ github.repository == env.REPO_NAME && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/devel' || startsWith(github.ref, 'refs/heads/release/')) }}"
|
| 32 |
+
run: echo "defined=true" >> "$GITHUB_OUTPUT"
|
| 33 |
+
|
| 34 |
+
build-docs:
|
| 35 |
+
name: Build Docs
|
| 36 |
+
runs-on: ubuntu-latest
|
| 37 |
+
needs: [check-secrets]
|
| 38 |
+
|
| 39 |
+
steps:
|
| 40 |
+
- name: Checkout code
|
| 41 |
+
uses: actions/checkout@v2
|
| 42 |
+
with:
|
| 43 |
+
lfs: true
|
| 44 |
+
|
| 45 |
+
- name: Setup python
|
| 46 |
+
uses: actions/setup-python@v2
|
| 47 |
+
with:
|
| 48 |
+
python-version: "3.11"
|
| 49 |
+
architecture: x64
|
| 50 |
+
|
| 51 |
+
- name: Install dev requirements
|
| 52 |
+
working-directory: ./docs
|
| 53 |
+
run: pip install -r requirements.txt
|
| 54 |
+
|
| 55 |
+
- name: Check branch docs building
|
| 56 |
+
working-directory: ./docs
|
| 57 |
+
if: needs.check-secrets.outputs.trigger-deploy != 'true'
|
| 58 |
+
run: make current-docs
|
| 59 |
+
|
| 60 |
+
- name: Generate multi-version docs
|
| 61 |
+
working-directory: ./docs
|
| 62 |
+
run: |
|
| 63 |
+
git fetch --prune --unshallow --tags
|
| 64 |
+
make multi-docs
|
| 65 |
+
|
| 66 |
+
- name: Upload docs artifact
|
| 67 |
+
uses: actions/upload-artifact@v4
|
| 68 |
+
with:
|
| 69 |
+
name: docs-html
|
| 70 |
+
path: ./docs/_build
|
| 71 |
+
|
| 72 |
+
deploy-docs:
|
| 73 |
+
name: Deploy Docs
|
| 74 |
+
runs-on: ubuntu-latest
|
| 75 |
+
needs: [check-secrets, build-docs]
|
| 76 |
+
if: needs.check-secrets.outputs.trigger-deploy == 'true'
|
| 77 |
+
|
| 78 |
+
steps:
|
| 79 |
+
- name: Download docs artifact
|
| 80 |
+
uses: actions/download-artifact@v4
|
| 81 |
+
with:
|
| 82 |
+
name: docs-html
|
| 83 |
+
path: ./docs/_build
|
| 84 |
+
|
| 85 |
+
- name: Deploy to gh-pages
|
| 86 |
+
uses: peaceiris/actions-gh-pages@v3
|
| 87 |
+
with:
|
| 88 |
+
github_token: ${{ secrets.GITHUB_TOKEN }}
|
| 89 |
+
publish_dir: ./docs/_build
|
.github/workflows/labeler.yml
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: "Pull Request Labeler"
|
| 7 |
+
on:
|
| 8 |
+
- pull_request_target
|
| 9 |
+
|
| 10 |
+
jobs:
|
| 11 |
+
labeler:
|
| 12 |
+
permissions:
|
| 13 |
+
contents: read
|
| 14 |
+
pull-requests: write
|
| 15 |
+
runs-on: ubuntu-latest
|
| 16 |
+
steps:
|
| 17 |
+
- uses: actions/labeler@v6
|
.github/workflows/license-check.yaml
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: Check Python Dependency Licenses
|
| 7 |
+
|
| 8 |
+
on:
|
| 9 |
+
pull_request:
|
| 10 |
+
types: [opened, synchronize, reopened]
|
| 11 |
+
|
| 12 |
+
concurrency:
|
| 13 |
+
group: ${{ github.workflow }}-${{ github.ref }}
|
| 14 |
+
cancel-in-progress: true
|
| 15 |
+
|
| 16 |
+
jobs:
|
| 17 |
+
license-check:
|
| 18 |
+
runs-on: [self-hosted]
|
| 19 |
+
|
| 20 |
+
steps:
|
| 21 |
+
- name: Checkout code
|
| 22 |
+
uses: actions/checkout@v3
|
| 23 |
+
|
| 24 |
+
# - name: Install jq
|
| 25 |
+
# run: sudo apt-get update && sudo apt-get install -y jq
|
| 26 |
+
|
| 27 |
+
- name: Clean up disk space
|
| 28 |
+
run: |
|
| 29 |
+
rm -rf /opt/hostedtoolcache
|
| 30 |
+
|
| 31 |
+
- name: Set up Python
|
| 32 |
+
uses: actions/setup-python@v4
|
| 33 |
+
with:
|
| 34 |
+
python-version: '3.11' # Adjust as needed
|
| 35 |
+
|
| 36 |
+
- name: Install dependencies using ./uwlab.sh -i
|
| 37 |
+
run: |
|
| 38 |
+
# first install isaac sim
|
| 39 |
+
pip install --upgrade pip
|
| 40 |
+
pip install 'isaacsim[all,extscache]==${{ vars.ISAACSIM_BASE_VERSION || '5.0.0' }}' --extra-index-url https://pypi.nvidia.com
|
| 41 |
+
chmod +x ./uwlab.sh # Make sure the script is executable
|
| 42 |
+
# install all lab dependencies
|
| 43 |
+
./uwlab.sh -i
|
| 44 |
+
|
| 45 |
+
- name: Install pip-licenses
|
| 46 |
+
run: |
|
| 47 |
+
pip install pip-licenses
|
| 48 |
+
pip install -r tools/template/requirements.txt
|
| 49 |
+
pip install -r docs/requirements.txt
|
| 50 |
+
|
| 51 |
+
# Optional: Print the license report for visibility
|
| 52 |
+
- name: Print License Report
|
| 53 |
+
run: pip-licenses --from=mixed --format=markdown
|
| 54 |
+
|
| 55 |
+
# Print pipdeptree
|
| 56 |
+
- name: Print pipdeptree
|
| 57 |
+
run: |
|
| 58 |
+
pip install pipdeptree
|
| 59 |
+
pipdeptree
|
| 60 |
+
|
| 61 |
+
- name: Check licenses against whitelist and exceptions
|
| 62 |
+
run: |
|
| 63 |
+
# Generate licenses report and validate using concise Python
|
| 64 |
+
pip-licenses --from=mixed --format=json > licenses.json
|
| 65 |
+
python - <<'PY'
|
| 66 |
+
import json, sys
|
| 67 |
+
|
| 68 |
+
# Substring-based allowlist (case-insensitive)
|
| 69 |
+
ALLOWED = ("mit", "apache", "bsd", "isc", "zlib", "psfl", "bsl", "boost", "mpl")
|
| 70 |
+
|
| 71 |
+
def _norm(s: str) -> str:
|
| 72 |
+
return (s or "").strip().lower()
|
| 73 |
+
|
| 74 |
+
def _is_allowed(license_str: str) -> bool:
|
| 75 |
+
ln = _norm(license_str)
|
| 76 |
+
return any(tok in ln for tok in ALLOWED)
|
| 77 |
+
|
| 78 |
+
EXCEPTIONS_FILE = ".github/workflows/license-exceptions.json"
|
| 79 |
+
|
| 80 |
+
# Load report (defensive)
|
| 81 |
+
try:
|
| 82 |
+
with open("licenses.json", encoding="utf-8") as f:
|
| 83 |
+
packages = json.load(f)
|
| 84 |
+
except Exception as e:
|
| 85 |
+
print(f"ERROR: Failed to parse licenses.json: {e}")
|
| 86 |
+
sys.exit(1)
|
| 87 |
+
|
| 88 |
+
# Load exceptions (optional)
|
| 89 |
+
try:
|
| 90 |
+
with open(EXCEPTIONS_FILE, encoding="utf-8") as f:
|
| 91 |
+
exc_entries = json.load(f)
|
| 92 |
+
except FileNotFoundError:
|
| 93 |
+
exc_entries = []
|
| 94 |
+
exc_map = { (e.get("package") or ""): e.get("license") for e in exc_entries if e.get("package") }
|
| 95 |
+
|
| 96 |
+
failed = 0
|
| 97 |
+
for rec in packages:
|
| 98 |
+
name = (rec.get("Name") or "").strip()
|
| 99 |
+
lic = (rec.get("License") or "").strip()
|
| 100 |
+
if not name or name.startswith("uwlab"):
|
| 101 |
+
continue
|
| 102 |
+
if _is_allowed(lic):
|
| 103 |
+
continue
|
| 104 |
+
if name in exc_map:
|
| 105 |
+
exc_lic = exc_map[name]
|
| 106 |
+
exc_norm = _norm(exc_lic)
|
| 107 |
+
lic_norm = _norm(lic)
|
| 108 |
+
# NEW: if detected license is unknown/blank, accept when an exception exists
|
| 109 |
+
if lic_norm in ("", "unknown"):
|
| 110 |
+
continue
|
| 111 |
+
# Treat blank/unknown exception license as wildcard (accept any)
|
| 112 |
+
if exc_norm in ("", "null", "unknown", "unspecified", "n/a", "na", "none"):
|
| 113 |
+
continue
|
| 114 |
+
# Flexible match to avoid churn on formatting differences
|
| 115 |
+
if exc_norm in lic_norm or lic_norm in exc_norm:
|
| 116 |
+
continue
|
| 117 |
+
print(f"ERROR: {name} has license: {lic}")
|
| 118 |
+
failed += 1
|
| 119 |
+
continue
|
| 120 |
+
print(f"ERROR: {name} has license: {lic}")
|
| 121 |
+
failed += 1
|
| 122 |
+
|
| 123 |
+
if failed:
|
| 124 |
+
print(f"ERROR: {failed} packages were flagged.")
|
| 125 |
+
sys.exit(1)
|
| 126 |
+
print("All packages were checked.")
|
| 127 |
+
PY
|
.github/workflows/license-exceptions.json
ADDED
|
@@ -0,0 +1,479 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[
|
| 2 |
+
{
|
| 3 |
+
"package": "uwlab",
|
| 4 |
+
"license": null,
|
| 5 |
+
"comment": "This Repo"
|
| 6 |
+
},
|
| 7 |
+
{
|
| 8 |
+
"package": "uwlab_assets",
|
| 9 |
+
"license": null,
|
| 10 |
+
"comment": "This Repo"
|
| 11 |
+
},
|
| 12 |
+
{
|
| 13 |
+
"package": "uwlab_apps",
|
| 14 |
+
"license": null,
|
| 15 |
+
"comment": "This Repo"
|
| 16 |
+
},
|
| 17 |
+
{
|
| 18 |
+
"package": "uwlab_rl",
|
| 19 |
+
"license": null,
|
| 20 |
+
"comment": "This Repo"
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"package": "uwlab_tasks",
|
| 24 |
+
"license": null,
|
| 25 |
+
"comment": "This Repo"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"package": "pytorch3d",
|
| 29 |
+
"license": "UNKNOWN",
|
| 30 |
+
"comment": "BSD"
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"package": "aiobotocore",
|
| 34 |
+
"license": "UNKNOWN",
|
| 35 |
+
"comment": "Apache-2.0"
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"package": "isaaclab",
|
| 39 |
+
"license": null
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"package": "isaaclab_assets",
|
| 43 |
+
"license": null
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"package": "isaaclab_mimic",
|
| 47 |
+
"license": null
|
| 48 |
+
},
|
| 49 |
+
{
|
| 50 |
+
"package": "isaaclab_rl",
|
| 51 |
+
"license": null
|
| 52 |
+
},
|
| 53 |
+
{
|
| 54 |
+
"package": "isaaclab_tasks",
|
| 55 |
+
"license": null
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"package": "isaacsim",
|
| 59 |
+
"license": null
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
"package": "isaacsim-app",
|
| 63 |
+
"license": null
|
| 64 |
+
},
|
| 65 |
+
{
|
| 66 |
+
"package": "isaacsim-asset",
|
| 67 |
+
"license": null
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"package": "isaacsim-benchmark",
|
| 71 |
+
"license": null
|
| 72 |
+
},
|
| 73 |
+
{
|
| 74 |
+
"package": "isaacsim-code-editor",
|
| 75 |
+
"license": null
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"package": "isaacsim-core",
|
| 79 |
+
"license": null
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"package": "isaacsim-cortex",
|
| 83 |
+
"license": null
|
| 84 |
+
},
|
| 85 |
+
{
|
| 86 |
+
"package": "isaacsim-example",
|
| 87 |
+
"license": null
|
| 88 |
+
},
|
| 89 |
+
{
|
| 90 |
+
"package": "isaacsim-extscache-kit",
|
| 91 |
+
"license": null
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"package": "isaacsim-extscache-kit-sdk",
|
| 95 |
+
"license": null
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"package": "isaacsim-extscache-physics",
|
| 99 |
+
"license": null
|
| 100 |
+
},
|
| 101 |
+
{
|
| 102 |
+
"package": "isaacsim-gui",
|
| 103 |
+
"license": null
|
| 104 |
+
},
|
| 105 |
+
{
|
| 106 |
+
"package": "isaacsim-kernel",
|
| 107 |
+
"license": null
|
| 108 |
+
},
|
| 109 |
+
{
|
| 110 |
+
"package": "isaacsim-replicator",
|
| 111 |
+
"license": null
|
| 112 |
+
},
|
| 113 |
+
{
|
| 114 |
+
"package": "isaacsim-rl",
|
| 115 |
+
"license": null
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"package": "isaacsim-robot",
|
| 119 |
+
"license": null
|
| 120 |
+
},
|
| 121 |
+
{
|
| 122 |
+
"package": "isaacsim-robot-motion",
|
| 123 |
+
"license": null
|
| 124 |
+
},
|
| 125 |
+
{
|
| 126 |
+
"package": "isaacsim-robot-setup",
|
| 127 |
+
"license": null
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"package": "isaacsim-ros1",
|
| 131 |
+
"license": null
|
| 132 |
+
},
|
| 133 |
+
{
|
| 134 |
+
"package": "isaacsim-ros2",
|
| 135 |
+
"license": null
|
| 136 |
+
},
|
| 137 |
+
{
|
| 138 |
+
"package": "isaacsim-sensor",
|
| 139 |
+
"license": null
|
| 140 |
+
},
|
| 141 |
+
{
|
| 142 |
+
"package": "isaacsim-storage",
|
| 143 |
+
"license": null
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"package": "isaacsim-template",
|
| 147 |
+
"license": null
|
| 148 |
+
},
|
| 149 |
+
{
|
| 150 |
+
"package": "isaacsim-test",
|
| 151 |
+
"license": null
|
| 152 |
+
},
|
| 153 |
+
{
|
| 154 |
+
"package": "isaacsim-utils",
|
| 155 |
+
"license": null
|
| 156 |
+
},
|
| 157 |
+
{
|
| 158 |
+
"package": "nvidia-cublas-cu12",
|
| 159 |
+
"license": null
|
| 160 |
+
},
|
| 161 |
+
{
|
| 162 |
+
"package": "nvidia-cuda-cupti-cu12",
|
| 163 |
+
"license": null
|
| 164 |
+
},
|
| 165 |
+
{
|
| 166 |
+
"package": "nvidia-cuda-nvrtc-cu12",
|
| 167 |
+
"license": null
|
| 168 |
+
},
|
| 169 |
+
{
|
| 170 |
+
"package": "nvidia-cuda-runtime-cu12",
|
| 171 |
+
"license": null
|
| 172 |
+
},
|
| 173 |
+
{
|
| 174 |
+
"package": "nvidia-cudnn-cu12",
|
| 175 |
+
"license": null
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"package": "nvidia-cufft-cu12",
|
| 179 |
+
"license": null
|
| 180 |
+
},
|
| 181 |
+
{
|
| 182 |
+
"package": "nvidia-cufile-cu12",
|
| 183 |
+
"license": null
|
| 184 |
+
},
|
| 185 |
+
{
|
| 186 |
+
"package": "nvidia-curand-cu12",
|
| 187 |
+
"license": null
|
| 188 |
+
},
|
| 189 |
+
{
|
| 190 |
+
"package": "nvidia-cusolver-cu12",
|
| 191 |
+
"license": null
|
| 192 |
+
},
|
| 193 |
+
{
|
| 194 |
+
"package": "nvidia-cusparse-cu12",
|
| 195 |
+
"license": null
|
| 196 |
+
},
|
| 197 |
+
{
|
| 198 |
+
"package": "nvidia-cusparselt-cu12",
|
| 199 |
+
"license": null
|
| 200 |
+
},
|
| 201 |
+
{
|
| 202 |
+
"package": "nvidia-nccl-cu12",
|
| 203 |
+
"license": null
|
| 204 |
+
},
|
| 205 |
+
{
|
| 206 |
+
"package": "nvidia-nvjitlink-cu12",
|
| 207 |
+
"license": null
|
| 208 |
+
},
|
| 209 |
+
{
|
| 210 |
+
"package": "nvidia-nvtx-cu12",
|
| 211 |
+
"license": null
|
| 212 |
+
},
|
| 213 |
+
{
|
| 214 |
+
"package": "omniverse-kit",
|
| 215 |
+
"license": null
|
| 216 |
+
},
|
| 217 |
+
{
|
| 218 |
+
"package": "warp-lang",
|
| 219 |
+
"license": null
|
| 220 |
+
},
|
| 221 |
+
{
|
| 222 |
+
"package": "cmeel",
|
| 223 |
+
"license": "UNKNOWN",
|
| 224 |
+
"comment": "BSD"
|
| 225 |
+
},
|
| 226 |
+
{
|
| 227 |
+
"package": "cmeel-assimp",
|
| 228 |
+
"license": "UNKNOWN",
|
| 229 |
+
"comment": "BSD"
|
| 230 |
+
},
|
| 231 |
+
{
|
| 232 |
+
"package": "cmeel-boost",
|
| 233 |
+
"license": "BSL-1.0",
|
| 234 |
+
"comment": "BSL"
|
| 235 |
+
},
|
| 236 |
+
{
|
| 237 |
+
"package": "cmeel-console-bridge",
|
| 238 |
+
"license": "Zlib",
|
| 239 |
+
"comment": "ZLIBL"
|
| 240 |
+
},
|
| 241 |
+
{
|
| 242 |
+
"package": "cmeel-octomap",
|
| 243 |
+
"license": "UNKNOWN",
|
| 244 |
+
"comment": "BSD"
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"package": "cmeel-qhull",
|
| 248 |
+
"license": "UNKNOWN",
|
| 249 |
+
"comment": "custom / OSRB"
|
| 250 |
+
},
|
| 251 |
+
{
|
| 252 |
+
"package": "cmeel-tinyxml",
|
| 253 |
+
"license": "Zlib",
|
| 254 |
+
"comment": "ZLIBL"
|
| 255 |
+
},
|
| 256 |
+
{
|
| 257 |
+
"package": "cmeel-urdfdom",
|
| 258 |
+
"license": "UNKNOWN",
|
| 259 |
+
"comment": "BSD"
|
| 260 |
+
},
|
| 261 |
+
{
|
| 262 |
+
"package": "cmeel-zlib",
|
| 263 |
+
"license": "Zlib",
|
| 264 |
+
"comment": "ZLIBL"
|
| 265 |
+
},
|
| 266 |
+
{
|
| 267 |
+
"package": "matplotlib",
|
| 268 |
+
"license": "Python Software Foundation License"
|
| 269 |
+
},
|
| 270 |
+
{
|
| 271 |
+
"package": "certifi",
|
| 272 |
+
"license": "Mozilla Public License 2.0 (MPL 2.0)"
|
| 273 |
+
},
|
| 274 |
+
{
|
| 275 |
+
"package": "rl_games",
|
| 276 |
+
"license": "UNKNOWN",
|
| 277 |
+
"comment": "MIT"
|
| 278 |
+
},
|
| 279 |
+
{
|
| 280 |
+
"package": "robomimic",
|
| 281 |
+
"license": "UNKNOWN",
|
| 282 |
+
"comment": "MIT"
|
| 283 |
+
},
|
| 284 |
+
{
|
| 285 |
+
"package": "hpp-fcl",
|
| 286 |
+
"license": "UNKNOWN",
|
| 287 |
+
"comment": "BSD"
|
| 288 |
+
},
|
| 289 |
+
{
|
| 290 |
+
"package": "pin",
|
| 291 |
+
"license": "UNKNOWN",
|
| 292 |
+
"comment": "BSD"
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"package": "eigenpy",
|
| 296 |
+
"license": "UNKNOWN",
|
| 297 |
+
"comment": "BSD"
|
| 298 |
+
},
|
| 299 |
+
{
|
| 300 |
+
"package": "qpsolvers",
|
| 301 |
+
"license": "GNU Lesser General Public License v3 (LGPLv3)",
|
| 302 |
+
"comment": "OSRB"
|
| 303 |
+
},
|
| 304 |
+
{
|
| 305 |
+
"package": "quadprog",
|
| 306 |
+
"license": "GNU General Public License v2 or later (GPLv2+)",
|
| 307 |
+
"comment": "OSRB"
|
| 308 |
+
},
|
| 309 |
+
{
|
| 310 |
+
"package": "Markdown",
|
| 311 |
+
"license": "UNKNOWN",
|
| 312 |
+
"comment": "BSD"
|
| 313 |
+
},
|
| 314 |
+
{
|
| 315 |
+
"package": "anytree",
|
| 316 |
+
"license": "UNKNOWN",
|
| 317 |
+
"comment": "Apache"
|
| 318 |
+
},
|
| 319 |
+
{
|
| 320 |
+
"package": "click",
|
| 321 |
+
"license": "UNKNOWN",
|
| 322 |
+
"comment": "BSD"
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"package": "egl_probe",
|
| 326 |
+
"license": "UNKNOWN",
|
| 327 |
+
"comment": "MIT"
|
| 328 |
+
},
|
| 329 |
+
{
|
| 330 |
+
"package": "filelock",
|
| 331 |
+
"license": "Unlicense",
|
| 332 |
+
"comment": "no condition"
|
| 333 |
+
},
|
| 334 |
+
{
|
| 335 |
+
"package": "proglog",
|
| 336 |
+
"license": "UNKNOWN",
|
| 337 |
+
"comment": "MIT"
|
| 338 |
+
},
|
| 339 |
+
{
|
| 340 |
+
"package": "termcolor",
|
| 341 |
+
"license": "UNKNOWN",
|
| 342 |
+
"comment": "MIT"
|
| 343 |
+
},
|
| 344 |
+
{
|
| 345 |
+
"package": "typing_extensions",
|
| 346 |
+
"license": "Python Software Foundation License",
|
| 347 |
+
"comment": "PSFL / OSRB"
|
| 348 |
+
},
|
| 349 |
+
{
|
| 350 |
+
"package": "urllib3",
|
| 351 |
+
"license": "UNKNOWN",
|
| 352 |
+
"comment": "MIT"
|
| 353 |
+
},
|
| 354 |
+
{
|
| 355 |
+
"package": "h5py",
|
| 356 |
+
"license": "UNKNOWN",
|
| 357 |
+
"comment": "BSD"
|
| 358 |
+
},
|
| 359 |
+
{
|
| 360 |
+
"package": "pillow",
|
| 361 |
+
"license": "UNKNOWN",
|
| 362 |
+
"comment": "MIT"
|
| 363 |
+
},
|
| 364 |
+
{
|
| 365 |
+
"package": "pygame",
|
| 366 |
+
"license": "GNU Library or Lesser General Public License (LGPL)",
|
| 367 |
+
"comment": "OSRB"
|
| 368 |
+
},
|
| 369 |
+
{
|
| 370 |
+
"package": "scikit-learn",
|
| 371 |
+
"license": "UNKNOWN",
|
| 372 |
+
"comment": "BSD"
|
| 373 |
+
},
|
| 374 |
+
{
|
| 375 |
+
"package": "tensorboardX",
|
| 376 |
+
"license": "UNKNOWN",
|
| 377 |
+
"comment": "MIT"
|
| 378 |
+
},
|
| 379 |
+
{
|
| 380 |
+
"package": "attrs",
|
| 381 |
+
"license": "UNKNOWN",
|
| 382 |
+
"comment": "MIT"
|
| 383 |
+
},
|
| 384 |
+
{
|
| 385 |
+
"package": "jsonschema",
|
| 386 |
+
"license": "UNKNOWN",
|
| 387 |
+
"comment": "MIT"
|
| 388 |
+
},
|
| 389 |
+
{
|
| 390 |
+
"package": "jsonschema-specifications",
|
| 391 |
+
"license": "UNKNOWN",
|
| 392 |
+
"comment": "MIT"
|
| 393 |
+
},
|
| 394 |
+
{
|
| 395 |
+
"package": "referencing",
|
| 396 |
+
"license": "UNKNOWN",
|
| 397 |
+
"comment": "MIT"
|
| 398 |
+
},
|
| 399 |
+
{
|
| 400 |
+
"package": "regex",
|
| 401 |
+
"license": "UNKNOWN",
|
| 402 |
+
"comment": "Apache 2.0"
|
| 403 |
+
},
|
| 404 |
+
{
|
| 405 |
+
"package": "anyio",
|
| 406 |
+
"license": "UNKNOWN",
|
| 407 |
+
"comment": "MIT"
|
| 408 |
+
},
|
| 409 |
+
{
|
| 410 |
+
"package" : "hf-xet",
|
| 411 |
+
"license" : "UNKNOWN",
|
| 412 |
+
"comment": "Apache 2.0"
|
| 413 |
+
},
|
| 414 |
+
{
|
| 415 |
+
"package": "rpds-py",
|
| 416 |
+
"license" : "UNKNOWN",
|
| 417 |
+
"comment": "MIT"
|
| 418 |
+
},
|
| 419 |
+
{
|
| 420 |
+
"package": "typing-inspection",
|
| 421 |
+
"license" : "UNKNOWN",
|
| 422 |
+
"comment": "MIT"
|
| 423 |
+
},
|
| 424 |
+
{
|
| 425 |
+
"package": "ml_dtypes",
|
| 426 |
+
"license" : "UNKNOWN",
|
| 427 |
+
"comment": "Apache 2.0"
|
| 428 |
+
},
|
| 429 |
+
{
|
| 430 |
+
"package": "zipp",
|
| 431 |
+
"license" : "UNKNOWN",
|
| 432 |
+
"comment": "MIT"
|
| 433 |
+
},
|
| 434 |
+
{
|
| 435 |
+
"package": "fsspec",
|
| 436 |
+
"license" : "UNKNOWN",
|
| 437 |
+
"comment": "BSD"
|
| 438 |
+
},
|
| 439 |
+
{
|
| 440 |
+
"package": "numpy-quaternion",
|
| 441 |
+
"license": "UNKNOWN",
|
| 442 |
+
"comment": "MIT"
|
| 443 |
+
},
|
| 444 |
+
{
|
| 445 |
+
"package": "aiohappyeyeballs",
|
| 446 |
+
"license": "Other/Proprietary License; Python Software Foundation License",
|
| 447 |
+
"comment": "PSFL / OSRB"
|
| 448 |
+
},
|
| 449 |
+
{
|
| 450 |
+
"package": "cffi",
|
| 451 |
+
"license": "UNKNOWN",
|
| 452 |
+
"comment": "MIT"
|
| 453 |
+
},
|
| 454 |
+
{
|
| 455 |
+
"package": "trio",
|
| 456 |
+
"license": "UNKNOWN",
|
| 457 |
+
"comment": "MIT"
|
| 458 |
+
},
|
| 459 |
+
{
|
| 460 |
+
"package": "pipdeptree",
|
| 461 |
+
"license": "UNKNOWN",
|
| 462 |
+
"comment": "MIT"
|
| 463 |
+
},
|
| 464 |
+
{
|
| 465 |
+
"package": "msgpack",
|
| 466 |
+
"license": "UNKNOWN",
|
| 467 |
+
"comment": "Apache 2.0"
|
| 468 |
+
},
|
| 469 |
+
{
|
| 470 |
+
"package": "onnx-ir",
|
| 471 |
+
"license": "UNKNOWN",
|
| 472 |
+
"comment": "Apache 2.0"
|
| 473 |
+
},
|
| 474 |
+
{
|
| 475 |
+
"package": "matplotlib-inline",
|
| 476 |
+
"license": "UNKNOWN",
|
| 477 |
+
"comment": "BSD-3"
|
| 478 |
+
}
|
| 479 |
+
]
|
.github/workflows/pre-commit.yaml
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
name: Run linters using pre-commit
|
| 7 |
+
|
| 8 |
+
on:
|
| 9 |
+
pull_request:
|
| 10 |
+
types: [opened, synchronize, reopened]
|
| 11 |
+
|
| 12 |
+
jobs:
|
| 13 |
+
pre-commit:
|
| 14 |
+
runs-on: ubuntu-latest
|
| 15 |
+
steps:
|
| 16 |
+
- uses: actions/checkout@v3
|
| 17 |
+
- uses: actions/setup-python@v3
|
| 18 |
+
with:
|
| 19 |
+
python-version: "3.12"
|
| 20 |
+
- uses: pre-commit/action@v3.0.0
|
.gitignore
ADDED
|
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# C++
|
| 2 |
+
**/cmake-build*/
|
| 3 |
+
**/build*/
|
| 4 |
+
**/*.so
|
| 5 |
+
**/*.log*
|
| 6 |
+
|
| 7 |
+
# Omniverse
|
| 8 |
+
**/*.dmp
|
| 9 |
+
**/.thumbs
|
| 10 |
+
|
| 11 |
+
# No USD files allowed in the repo
|
| 12 |
+
**/*.usd
|
| 13 |
+
**/*.usda
|
| 14 |
+
**/*.usdc
|
| 15 |
+
**/*.usdz
|
| 16 |
+
|
| 17 |
+
# Python
|
| 18 |
+
.DS_Store
|
| 19 |
+
**/*.egg-info/
|
| 20 |
+
**/__pycache__/
|
| 21 |
+
**/.pytest_cache/
|
| 22 |
+
**/*.pyc
|
| 23 |
+
**/*.pb
|
| 24 |
+
|
| 25 |
+
# Docker/Singularity
|
| 26 |
+
**/*.sif
|
| 27 |
+
docker/cluster/exports/
|
| 28 |
+
docker/.container.cfg
|
| 29 |
+
|
| 30 |
+
# IDE
|
| 31 |
+
**/.idea/
|
| 32 |
+
**/.vscode/
|
| 33 |
+
# Don't ignore the top-level .vscode directory as it is
|
| 34 |
+
# used to configure VS Code settings
|
| 35 |
+
!.vscode
|
| 36 |
+
|
| 37 |
+
# Outputs
|
| 38 |
+
**/output/*
|
| 39 |
+
**/outputs/*
|
| 40 |
+
**/videos/*
|
| 41 |
+
**/wandb/*
|
| 42 |
+
**/.neptune/*
|
| 43 |
+
docker/artifacts/
|
| 44 |
+
*.tmp
|
| 45 |
+
|
| 46 |
+
# Doc Outputs
|
| 47 |
+
**/docs/_build/*
|
| 48 |
+
**/generated/*
|
| 49 |
+
|
| 50 |
+
# Isaac-Sim packman
|
| 51 |
+
/_isaaclab/
|
| 52 |
+
/_uwlab/
|
| 53 |
+
_isaac_sim*
|
| 54 |
+
_repo
|
| 55 |
+
_build
|
| 56 |
+
.lastformat
|
| 57 |
+
|
| 58 |
+
# RL-Games
|
| 59 |
+
**/runs/*
|
| 60 |
+
**/logs/*
|
| 61 |
+
**/recordings/*
|
| 62 |
+
|
| 63 |
+
# Pre-Trained Checkpoints
|
| 64 |
+
/.pretrained_checkpoints/
|
| 65 |
+
|
| 66 |
+
# Teleop Recorded Dataset
|
| 67 |
+
/datasets/
|
| 68 |
+
|
| 69 |
+
# Tests
|
| 70 |
+
tests/
|
| 71 |
+
|
| 72 |
+
# Docker history
|
| 73 |
+
.uw-lab-docker-history
|
.pre-commit-config.yaml
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
exclude: ^scripts/
|
| 7 |
+
repos:
|
| 8 |
+
- repo: https://github.com/python/black
|
| 9 |
+
rev: 24.3.0
|
| 10 |
+
hooks:
|
| 11 |
+
- id: black
|
| 12 |
+
args: ["--line-length", "120", "--unstable"]
|
| 13 |
+
- repo: https://github.com/pycqa/flake8
|
| 14 |
+
rev: 7.0.0
|
| 15 |
+
hooks:
|
| 16 |
+
- id: flake8
|
| 17 |
+
additional_dependencies: [flake8-simplify, flake8-return]
|
| 18 |
+
- repo: https://github.com/pre-commit/pre-commit-hooks
|
| 19 |
+
rev: v5.0.0
|
| 20 |
+
hooks:
|
| 21 |
+
- id: trailing-whitespace
|
| 22 |
+
- id: check-symlinks
|
| 23 |
+
- id: destroyed-symlinks
|
| 24 |
+
- id: check-added-large-files
|
| 25 |
+
args: ["--maxkb=2000"] # restrict files more than 2 MB. Should use git-lfs instead.
|
| 26 |
+
- id: check-yaml
|
| 27 |
+
- id: check-merge-conflict
|
| 28 |
+
- id: check-case-conflict
|
| 29 |
+
- id: check-executables-have-shebangs
|
| 30 |
+
- id: check-toml
|
| 31 |
+
- id: end-of-file-fixer
|
| 32 |
+
- id: check-shebang-scripts-are-executable
|
| 33 |
+
- id: detect-private-key
|
| 34 |
+
- id: debug-statements
|
| 35 |
+
- repo: https://github.com/pycqa/isort
|
| 36 |
+
rev: 5.13.2
|
| 37 |
+
hooks:
|
| 38 |
+
- id: isort
|
| 39 |
+
name: isort (python)
|
| 40 |
+
args: ["--profile", "black", "--filter-files"]
|
| 41 |
+
- repo: https://github.com/asottile/pyupgrade
|
| 42 |
+
rev: v3.15.1
|
| 43 |
+
hooks:
|
| 44 |
+
- id: pyupgrade
|
| 45 |
+
args: ["--py310-plus"]
|
| 46 |
+
# FIXME: This is a hack because Pytorch does not like: torch.Tensor | dict aliasing
|
| 47 |
+
exclude: "source/uwlab/uwlab/envs/common.py|source/uwlab/uwlab/ui/widgets/image_plot.py|source/uwlab_tasks/uwlab_tasks/direct/humanoid_amp/motions/motion_loader.py"
|
| 48 |
+
- repo: https://github.com/codespell-project/codespell
|
| 49 |
+
rev: v2.2.6
|
| 50 |
+
hooks:
|
| 51 |
+
- id: codespell
|
| 52 |
+
additional_dependencies:
|
| 53 |
+
- tomli
|
| 54 |
+
exclude: "CONTRIBUTORS.md|docs/source/setup/walkthrough/concepts_env_design.rst"
|
| 55 |
+
# FIXME: Figure out why this is getting stuck under VPN.
|
| 56 |
+
# - repo: https://github.com/RobertCraigie/pyright-python
|
| 57 |
+
# rev: v1.1.315
|
| 58 |
+
# hooks:
|
| 59 |
+
# - id: pyright
|
| 60 |
+
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
| 61 |
+
rev: v1.5.1
|
| 62 |
+
hooks:
|
| 63 |
+
- id: insert-license
|
| 64 |
+
files: \.(py|ya?ml)$
|
| 65 |
+
args:
|
| 66 |
+
# - --remove-header # Remove existing license headers. Useful when updating license.
|
| 67 |
+
- --license-filepath
|
| 68 |
+
- .github/LICENSE_HEADER.txt
|
| 69 |
+
- --use-current-year
|
| 70 |
+
exclude: "source/uwlab_mimic/|scripts/imitation_learning/uwlab_mimic/"
|
| 71 |
+
# Apache 2.0 license for mimic files
|
| 72 |
+
- repo: https://github.com/Lucas-C/pre-commit-hooks
|
| 73 |
+
rev: v1.5.1
|
| 74 |
+
hooks:
|
| 75 |
+
- id: insert-license
|
| 76 |
+
files: ^(source/uwlab_mimic|scripts/imitation_learning/uwlab_mimic)/.*\.py$
|
| 77 |
+
args:
|
| 78 |
+
# - --remove-header # Remove existing license headers. Useful when updating license.
|
| 79 |
+
- --license-filepath
|
| 80 |
+
- .github/LICENSE_HEADER_MIMIC.txt
|
| 81 |
+
- --use-current-year
|
| 82 |
+
- repo: https://github.com/pre-commit/pygrep-hooks
|
| 83 |
+
rev: v1.10.0
|
| 84 |
+
hooks:
|
| 85 |
+
- id: rst-backticks
|
| 86 |
+
- id: rst-directive-colons
|
| 87 |
+
- id: rst-inline-touching-normal
|
.vscode/.gitignore
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Ignore all other files
|
| 2 |
+
.python.env
|
| 3 |
+
*.json
|
| 4 |
+
|
| 5 |
+
# Note: These files are kept for development purposes only.
|
| 6 |
+
!tools/settings.template.json
|
| 7 |
+
!tools/launch.template.json
|
| 8 |
+
!tools/setup_vscode.py
|
| 9 |
+
!extensions.json
|
| 10 |
+
!launch.json
|
| 11 |
+
!tasks.json
|
.vscode/extensions.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
// See http://go.microsoft.com/fwlink/?LinkId=827846
|
| 3 |
+
// for the documentation about the extensions.json format
|
| 4 |
+
"recommendations": [
|
| 5 |
+
"ms-vscode.cpptools",
|
| 6 |
+
"ms-python.python",
|
| 7 |
+
"ms-python.vscode-pylance",
|
| 8 |
+
"ban.spellright",
|
| 9 |
+
"streetsidesoftware.code-spell-checker",
|
| 10 |
+
"ms-iot.vscode-ros",
|
| 11 |
+
"ExecutableBookProject.myst-highlight",
|
| 12 |
+
"ms-python.black-formatter",
|
| 13 |
+
"ms-python.flake8",
|
| 14 |
+
"njpwerner.autodocstring"
|
| 15 |
+
]
|
| 16 |
+
}
|
.vscode/launch.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// This file is a template and is automatically generated by the setup_vscode.py script.
|
| 2 |
+
// Do not edit this file directly.
|
| 3 |
+
//
|
| 4 |
+
// Generated from: /home/yu/UWLab/.vscode/tools/launch.template.json
|
| 5 |
+
{
|
| 6 |
+
// Use IntelliSense to learn about possible attributes.
|
| 7 |
+
// Hover to view descriptions of existing attributes.
|
| 8 |
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
| 9 |
+
"version": "0.2.0",
|
| 10 |
+
"configurations": [
|
| 11 |
+
{
|
| 12 |
+
"name": "Python: Current File",
|
| 13 |
+
"type": "python",
|
| 14 |
+
"request": "launch",
|
| 15 |
+
"program": "${file}",
|
| 16 |
+
"console": "integratedTerminal"
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"name": "Python: Attach (windows-x86_64/linux-x86_64)",
|
| 20 |
+
"type": "python",
|
| 21 |
+
"request": "attach",
|
| 22 |
+
"port": 3000,
|
| 23 |
+
"host": "localhost"
|
| 24 |
+
},
|
| 25 |
+
{
|
| 26 |
+
"name": "Python: Train Environment",
|
| 27 |
+
"type": "python",
|
| 28 |
+
"request": "launch",
|
| 29 |
+
"args" : ["--task", "Isaac-Reach-Franka-v0", "--headless"],
|
| 30 |
+
"program": "${workspaceFolder}/scripts/reinforcement_learning/rsl_rl/train.py",
|
| 31 |
+
"console": "integratedTerminal"
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"name": "Python: Play Environment",
|
| 35 |
+
"type": "python",
|
| 36 |
+
"request": "launch",
|
| 37 |
+
"args" : ["--task", "Isaac-Reach-Franka-v0", "--num_envs", "32"],
|
| 38 |
+
"program": "${workspaceFolder}/scripts/reinforcement_learning/rsl_rl/play.py",
|
| 39 |
+
"console": "integratedTerminal"
|
| 40 |
+
},
|
| 41 |
+
{
|
| 42 |
+
"name": "Python: SinglePytest",
|
| 43 |
+
"type": "python",
|
| 44 |
+
"request": "launch",
|
| 45 |
+
"module": "pytest",
|
| 46 |
+
"args": [
|
| 47 |
+
"${file}"
|
| 48 |
+
],
|
| 49 |
+
"console": "integratedTerminal"
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"name": "Python: ALL Pytest",
|
| 53 |
+
"type": "python",
|
| 54 |
+
"request": "launch",
|
| 55 |
+
"module": "pytest",
|
| 56 |
+
"args": ["source/isaaclab/test"],
|
| 57 |
+
"console": "integratedTerminal",
|
| 58 |
+
"justMyCode": false
|
| 59 |
+
}
|
| 60 |
+
]
|
| 61 |
+
}
|
.vscode/settings.json
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// This file is a template and is automatically generated by the setup_vscode.py script.
|
| 2 |
+
// Do not edit this file directly.
|
| 3 |
+
//
|
| 4 |
+
// Generated from: /home/yu/UWLab/.vscode/tools/settings.template.json
|
| 5 |
+
{
|
| 6 |
+
"files.exclude": {
|
| 7 |
+
"**/.mypy_cache": true,
|
| 8 |
+
"**/__pycache__": true,
|
| 9 |
+
"**/*.egg-info": true
|
| 10 |
+
},
|
| 11 |
+
"files.associations": {
|
| 12 |
+
"*.tpp": "cpp",
|
| 13 |
+
"*.kit": "toml",
|
| 14 |
+
"*.rst": "restructuredtext"
|
| 15 |
+
},
|
| 16 |
+
"editor.rulers": [120],
|
| 17 |
+
|
| 18 |
+
// files to be ignored by the linter
|
| 19 |
+
"files.watcherExclude": {
|
| 20 |
+
"**/.git/objects/**": true,
|
| 21 |
+
"**/.git/subtree-cache/**": true,
|
| 22 |
+
"**/node_modules/**": true,
|
| 23 |
+
"**/_isaac_sim/**": true,
|
| 24 |
+
"**/_compiler/**": true
|
| 25 |
+
},
|
| 26 |
+
// Configuration for spelling checker
|
| 27 |
+
"spellright.language": [
|
| 28 |
+
"en-US-10-1."
|
| 29 |
+
],
|
| 30 |
+
"spellright.documentTypes": [
|
| 31 |
+
"markdown",
|
| 32 |
+
"latex",
|
| 33 |
+
"plaintext",
|
| 34 |
+
"cpp",
|
| 35 |
+
"asciidoc",
|
| 36 |
+
"python",
|
| 37 |
+
"restructuredtext"
|
| 38 |
+
],
|
| 39 |
+
"cSpell.words": [
|
| 40 |
+
"literalinclude",
|
| 41 |
+
"linenos",
|
| 42 |
+
"instanceable",
|
| 43 |
+
"isaacSim",
|
| 44 |
+
"jacobians",
|
| 45 |
+
"pointcloud",
|
| 46 |
+
"ridgeback",
|
| 47 |
+
"rllib",
|
| 48 |
+
"robomimic",
|
| 49 |
+
"teleoperation",
|
| 50 |
+
"xform",
|
| 51 |
+
"numpy",
|
| 52 |
+
"flatcache",
|
| 53 |
+
"physx",
|
| 54 |
+
"dpad",
|
| 55 |
+
"gamepad",
|
| 56 |
+
"linspace",
|
| 57 |
+
"upsampled",
|
| 58 |
+
"downsampled",
|
| 59 |
+
"arange",
|
| 60 |
+
"discretization",
|
| 61 |
+
"trimesh",
|
| 62 |
+
"uninstanceable",
|
| 63 |
+
"***SUPPLIMENTARY_KEYWORDS***",
|
| 64 |
+
"configclass",
|
| 65 |
+
"isaaclab",
|
| 66 |
+
"***UWLAB_KEYWORDS***",
|
| 67 |
+
"teleop",
|
| 68 |
+
"octi",
|
| 69 |
+
"uwlab",
|
| 70 |
+
"realsense",
|
| 71 |
+
"rokoko",
|
| 72 |
+
"ikabsolute",
|
| 73 |
+
"ikabs",
|
| 74 |
+
"ikdelta",
|
| 75 |
+
"ikdel",
|
| 76 |
+
"***ROBOTS_KEYWORDS***",
|
| 77 |
+
"franka",
|
| 78 |
+
"tycho",
|
| 79 |
+
"hebi",
|
| 80 |
+
"xarm"
|
| 81 |
+
],
|
| 82 |
+
// This enables python language server. Seems to work slightly better than jedi:
|
| 83 |
+
"python.languageServer": "None",
|
| 84 |
+
// We use "black" as a formatter:
|
| 85 |
+
"python.formatting.provider": "black",
|
| 86 |
+
"python.formatting.blackArgs": ["--line-length", "120"],
|
| 87 |
+
// Use flake8 for linting
|
| 88 |
+
"python.linting.pylintEnabled": false,
|
| 89 |
+
"python.linting.flake8Enabled": true,
|
| 90 |
+
"python.linting.flake8Args": [
|
| 91 |
+
"--max-line-length=120"
|
| 92 |
+
],
|
| 93 |
+
// Use docstring generator
|
| 94 |
+
"autoDocstring.docstringFormat": "google",
|
| 95 |
+
"autoDocstring.guessTypes": true,
|
| 96 |
+
// Python environment path
|
| 97 |
+
// note: the default interpreter is overridden when user selects a workspace interpreter
|
| 98 |
+
// in the status bar. For example, the virtual environment python interpreter
|
| 99 |
+
"python.defaultInterpreterPath": "/home/yu/miniforge3/envs/env_uwlab/bin/python",
|
| 100 |
+
// ROS distribution
|
| 101 |
+
"ros.distro": "noetic",
|
| 102 |
+
// Language specific settings
|
| 103 |
+
"[python]": {
|
| 104 |
+
"editor.tabSize": 4
|
| 105 |
+
},
|
| 106 |
+
"[restructuredtext]": {
|
| 107 |
+
"editor.tabSize": 2
|
| 108 |
+
},
|
| 109 |
+
// Python extra paths
|
| 110 |
+
// Note: this is filled up when "./isaaclab.sh -i" is run
|
| 111 |
+
"python.analysis.extraPaths": [
|
| 112 |
+
"${workspaceFolder}/source/uwlab_assets",
|
| 113 |
+
"${workspaceFolder}/source/uwlab_tasks",
|
| 114 |
+
"${workspaceFolder}/source/uwlab",
|
| 115 |
+
"${workspaceFolder}/source/uwlab_rl",
|
| 116 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab",
|
| 117 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab_assets",
|
| 118 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab_contrib",
|
| 119 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab_mimic",
|
| 120 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab_rl",
|
| 121 |
+
"${workspaceFolder}/_isaaclab/IsaacLab/source/isaaclab_tasks"
|
| 122 |
+
],
|
| 123 |
+
"python-envs.defaultEnvManager": "ms-python.python:conda",
|
| 124 |
+
"python-envs.defaultPackageManager": "ms-python.python:conda",
|
| 125 |
+
"python-envs.pythonProjects": []
|
| 126 |
+
}
|
.vscode/tasks.json
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"version": "2.0.0",
|
| 3 |
+
"tasks": [
|
| 4 |
+
{
|
| 5 |
+
"label": "setup_python_env",
|
| 6 |
+
"type": "shell",
|
| 7 |
+
"linux": {
|
| 8 |
+
"command": "${workspaceFolder}/../IsaacLab/isaaclab.sh -p ${workspaceFolder}/.vscode/tools/setup_vscode.py"
|
| 9 |
+
},
|
| 10 |
+
"windows": {
|
| 11 |
+
"command": "${workspaceFolder}/../IsaacLab/isaaclab.bat -p ${workspaceFolder}/.vscode/tools/setup_vscode.py"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
// run formatter
|
| 16 |
+
"label": "run_formatter",
|
| 17 |
+
"type": "shell",
|
| 18 |
+
"linux": {
|
| 19 |
+
"command": "${workspaceFolder}/../IsaacLab/isaaclab.sh --format"
|
| 20 |
+
},
|
| 21 |
+
"windows": {
|
| 22 |
+
"command": "${workspaceFolder}/../IsaacLab/isaaclab.bat --format"
|
| 23 |
+
}
|
| 24 |
+
}
|
| 25 |
+
],
|
| 26 |
+
}
|
.vscode/tools/launch.template.json
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
// Use IntelliSense to learn about possible attributes.
|
| 3 |
+
// Hover to view descriptions of existing attributes.
|
| 4 |
+
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
| 5 |
+
"version": "0.2.0",
|
| 6 |
+
"configurations": [
|
| 7 |
+
{
|
| 8 |
+
"name": "Python: Current File",
|
| 9 |
+
"type": "python",
|
| 10 |
+
"request": "launch",
|
| 11 |
+
"program": "${file}",
|
| 12 |
+
"console": "integratedTerminal"
|
| 13 |
+
},
|
| 14 |
+
{
|
| 15 |
+
"name": "Python: Attach (windows-x86_64/linux-x86_64)",
|
| 16 |
+
"type": "python",
|
| 17 |
+
"request": "attach",
|
| 18 |
+
"port": 3000,
|
| 19 |
+
"host": "localhost"
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
"name": "Python: Train Environment",
|
| 23 |
+
"type": "python",
|
| 24 |
+
"request": "launch",
|
| 25 |
+
"args" : ["--task", "Isaac-Reach-Franka-v0", "--headless"],
|
| 26 |
+
"program": "${workspaceFolder}/scripts/reinforcement_learning/rsl_rl/train.py",
|
| 27 |
+
"console": "integratedTerminal"
|
| 28 |
+
},
|
| 29 |
+
{
|
| 30 |
+
"name": "Python: Play Environment",
|
| 31 |
+
"type": "python",
|
| 32 |
+
"request": "launch",
|
| 33 |
+
"args" : ["--task", "Isaac-Reach-Franka-v0", "--num_envs", "32"],
|
| 34 |
+
"program": "${workspaceFolder}/scripts/reinforcement_learning/rsl_rl/play.py",
|
| 35 |
+
"console": "integratedTerminal"
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"name": "Python: SinglePytest",
|
| 39 |
+
"type": "python",
|
| 40 |
+
"request": "launch",
|
| 41 |
+
"module": "pytest",
|
| 42 |
+
"args": [
|
| 43 |
+
"${file}"
|
| 44 |
+
],
|
| 45 |
+
"console": "integratedTerminal"
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"name": "Python: ALL Pytest",
|
| 49 |
+
"type": "python",
|
| 50 |
+
"request": "launch",
|
| 51 |
+
"module": "pytest",
|
| 52 |
+
"args": ["source/isaaclab/test"],
|
| 53 |
+
"console": "integratedTerminal",
|
| 54 |
+
"justMyCode": false
|
| 55 |
+
}
|
| 56 |
+
]
|
| 57 |
+
}
|
.vscode/tools/settings.template.json
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"files.exclude": {
|
| 3 |
+
"**/.mypy_cache": true,
|
| 4 |
+
"**/__pycache__": true,
|
| 5 |
+
"**/*.egg-info": true
|
| 6 |
+
},
|
| 7 |
+
"files.associations": {
|
| 8 |
+
"*.tpp": "cpp",
|
| 9 |
+
"*.kit": "toml",
|
| 10 |
+
"*.rst": "restructuredtext"
|
| 11 |
+
},
|
| 12 |
+
"editor.rulers": [120],
|
| 13 |
+
|
| 14 |
+
// files to be ignored by the linter
|
| 15 |
+
"files.watcherExclude": {
|
| 16 |
+
"**/.git/objects/**": true,
|
| 17 |
+
"**/.git/subtree-cache/**": true,
|
| 18 |
+
"**/node_modules/**": true,
|
| 19 |
+
"**/_isaac_sim/**": true,
|
| 20 |
+
"**/_compiler/**": true
|
| 21 |
+
},
|
| 22 |
+
// Configuration for spelling checker
|
| 23 |
+
"spellright.language": [
|
| 24 |
+
"en-US-10-1."
|
| 25 |
+
],
|
| 26 |
+
"spellright.documentTypes": [
|
| 27 |
+
"markdown",
|
| 28 |
+
"latex",
|
| 29 |
+
"plaintext",
|
| 30 |
+
"cpp",
|
| 31 |
+
"asciidoc",
|
| 32 |
+
"python",
|
| 33 |
+
"restructuredtext"
|
| 34 |
+
],
|
| 35 |
+
"cSpell.words": [
|
| 36 |
+
"literalinclude",
|
| 37 |
+
"linenos",
|
| 38 |
+
"instanceable",
|
| 39 |
+
"isaacSim",
|
| 40 |
+
"jacobians",
|
| 41 |
+
"pointcloud",
|
| 42 |
+
"ridgeback",
|
| 43 |
+
"rllib",
|
| 44 |
+
"robomimic",
|
| 45 |
+
"teleoperation",
|
| 46 |
+
"xform",
|
| 47 |
+
"numpy",
|
| 48 |
+
"flatcache",
|
| 49 |
+
"physx",
|
| 50 |
+
"dpad",
|
| 51 |
+
"gamepad",
|
| 52 |
+
"linspace",
|
| 53 |
+
"upsampled",
|
| 54 |
+
"downsampled",
|
| 55 |
+
"arange",
|
| 56 |
+
"discretization",
|
| 57 |
+
"trimesh",
|
| 58 |
+
"uninstanceable",
|
| 59 |
+
"***SUPPLIMENTARY_KEYWORDS***",
|
| 60 |
+
"configclass",
|
| 61 |
+
"isaaclab",
|
| 62 |
+
"***UWLAB_KEYWORDS***",
|
| 63 |
+
"teleop",
|
| 64 |
+
"octi",
|
| 65 |
+
"uwlab",
|
| 66 |
+
"realsense",
|
| 67 |
+
"rokoko",
|
| 68 |
+
"ikabsolute",
|
| 69 |
+
"ikabs",
|
| 70 |
+
"ikdelta",
|
| 71 |
+
"ikdel",
|
| 72 |
+
"***ROBOTS_KEYWORDS***",
|
| 73 |
+
"franka",
|
| 74 |
+
"tycho",
|
| 75 |
+
"hebi",
|
| 76 |
+
"xarm"
|
| 77 |
+
],
|
| 78 |
+
// This enables python language server. Seems to work slightly better than jedi:
|
| 79 |
+
"python.languageServer": "Pylance",
|
| 80 |
+
// We use "black" as a formatter:
|
| 81 |
+
"python.formatting.provider": "black",
|
| 82 |
+
"python.formatting.blackArgs": ["--line-length", "120"],
|
| 83 |
+
// Use flake8 for linting
|
| 84 |
+
"python.linting.pylintEnabled": false,
|
| 85 |
+
"python.linting.flake8Enabled": true,
|
| 86 |
+
"python.linting.flake8Args": [
|
| 87 |
+
"--max-line-length=120"
|
| 88 |
+
],
|
| 89 |
+
// Use docstring generator
|
| 90 |
+
"autoDocstring.docstringFormat": "google",
|
| 91 |
+
"autoDocstring.guessTypes": true,
|
| 92 |
+
// Python environment path
|
| 93 |
+
// note: the default interpreter is overridden when user selects a workspace interpreter
|
| 94 |
+
// in the status bar. For example, the virtual environment python interpreter
|
| 95 |
+
"python.defaultInterpreterPath": "${workspaceFolder}/_isaac_sim/python.sh",
|
| 96 |
+
// ROS distribution
|
| 97 |
+
"ros.distro": "noetic",
|
| 98 |
+
// Language specific settings
|
| 99 |
+
"[python]": {
|
| 100 |
+
"editor.tabSize": 4
|
| 101 |
+
},
|
| 102 |
+
"[restructuredtext]": {
|
| 103 |
+
"editor.tabSize": 2
|
| 104 |
+
},
|
| 105 |
+
// Python extra paths
|
| 106 |
+
// Note: this is filled up when "./isaaclab.sh -i" is run
|
| 107 |
+
"python.analysis.extraPaths": []
|
| 108 |
+
}
|
.vscode/tools/setup_vscode.py
ADDED
|
@@ -0,0 +1,234 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright (c) 2024-2026, The UW Lab Project Developers. (https://github.com/uw-lab/UWLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
# All Rights Reserved.
|
| 3 |
+
#
|
| 4 |
+
# SPDX-License-Identifier: BSD-3-Clause
|
| 5 |
+
|
| 6 |
+
"""This script sets up the vs-code settings for the Isaac Lab project.
|
| 7 |
+
|
| 8 |
+
This script merges the python.analysis.extraPaths from the "{ISAACSIM_DIR}/.vscode/settings.json" file into
|
| 9 |
+
the ".vscode/settings.json" file.
|
| 10 |
+
|
| 11 |
+
This is necessary because Isaac Sim 2022.2.1 onwards does not add the necessary python packages to the python path
|
| 12 |
+
when the "setup_python_env.sh" is run as part of the vs-code launch configuration.
|
| 13 |
+
"""
|
| 14 |
+
|
| 15 |
+
import re
|
| 16 |
+
import sys
|
| 17 |
+
import os
|
| 18 |
+
import pathlib
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
UWLAB_DIR = pathlib.Path(__file__).parents[2]
|
| 22 |
+
"""Path to the Isaac Lab directory."""
|
| 23 |
+
|
| 24 |
+
try:
|
| 25 |
+
import isaacsim # noqa: F401
|
| 26 |
+
|
| 27 |
+
isaacsim_dir = os.environ.get("ISAAC_PATH", "")
|
| 28 |
+
except ModuleNotFoundError or ImportError:
|
| 29 |
+
isaacsim_dir = os.path.join(UWLAB_DIR, "_isaac_sim")
|
| 30 |
+
except EOFError:
|
| 31 |
+
print("Unable to trigger EULA acceptance. This is likely due to the script being run in a non-interactive shell.")
|
| 32 |
+
print("Please run the script in an interactive shell to accept the EULA.")
|
| 33 |
+
print("Skipping the setup of the VSCode settings...")
|
| 34 |
+
sys.exit(0)
|
| 35 |
+
|
| 36 |
+
# check if the isaac-sim directory exists
|
| 37 |
+
if not os.path.exists(isaacsim_dir):
|
| 38 |
+
raise FileNotFoundError(
|
| 39 |
+
f"Could not find the isaac-sim directory: {isaacsim_dir}. There are two possible reasons for this:"
|
| 40 |
+
f"\n\t1. The Isaac Sim directory does not exist as a symlink at: {os.path.join(UWLAB_DIR, '_isaac_sim')}"
|
| 41 |
+
"\n\t2. The script could not import the 'isaacsim' package. This could be due to the 'isaacsim' package not "
|
| 42 |
+
"being installed in the Python environment.\n"
|
| 43 |
+
"\nPlease make sure that the Isaac Sim directory exists or that the 'isaacsim' package is installed."
|
| 44 |
+
)
|
| 45 |
+
|
| 46 |
+
ISAACSIM_DIR = isaacsim_dir
|
| 47 |
+
"""Path to the isaac-sim directory."""
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
def overwrite_python_analysis_extra_paths(uwlab_settings: str) -> str:
|
| 51 |
+
"""Overwrite the python.analysis.extraPaths in the Isaac Lab settings file.
|
| 52 |
+
|
| 53 |
+
The extraPaths are replaced with the path names from the isaac-sim settings file that exists in the
|
| 54 |
+
"{ISAACSIM_DIR}/.vscode/settings.json" file.
|
| 55 |
+
|
| 56 |
+
If the isaac-sim settings file does not exist, the extraPaths are not overwritten.
|
| 57 |
+
|
| 58 |
+
Args:
|
| 59 |
+
uwlab_settings: The settings string to use as template.
|
| 60 |
+
|
| 61 |
+
Returns:
|
| 62 |
+
The settings string with overwritten python analysis extra paths.
|
| 63 |
+
"""
|
| 64 |
+
# isaac-sim settings
|
| 65 |
+
isaacsim_vscode_filename = os.path.join(ISAACSIM_DIR, ".vscode", "settings.json")
|
| 66 |
+
|
| 67 |
+
# we use the isaac-sim settings file to get the python.analysis.extraPaths for kit extensions
|
| 68 |
+
# if this file does not exist, we will not add any extra paths
|
| 69 |
+
if os.path.exists(isaacsim_vscode_filename):
|
| 70 |
+
# read the path names from the isaac-sim settings file
|
| 71 |
+
with open(isaacsim_vscode_filename) as f:
|
| 72 |
+
vscode_settings = f.read()
|
| 73 |
+
# extract the path names
|
| 74 |
+
# search for the python.analysis.extraPaths section and extract the contents
|
| 75 |
+
settings = re.search(
|
| 76 |
+
r"\"python.analysis.extraPaths\": \[.*?\]", vscode_settings, flags=re.MULTILINE | re.DOTALL
|
| 77 |
+
)
|
| 78 |
+
settings = settings.group(0)
|
| 79 |
+
settings = settings.split('"python.analysis.extraPaths": [')[-1]
|
| 80 |
+
settings = settings.split("]")[0]
|
| 81 |
+
|
| 82 |
+
# read the path names from the isaac-sim settings file
|
| 83 |
+
path_names = settings.split(",")
|
| 84 |
+
path_names = [path_name.strip().strip('"') for path_name in path_names]
|
| 85 |
+
path_names = [path_name for path_name in path_names if len(path_name) > 0]
|
| 86 |
+
|
| 87 |
+
# change the path names to be relative to the Isaac Lab directory
|
| 88 |
+
rel_path = os.path.relpath(ISAACSIM_DIR, UWLAB_DIR)
|
| 89 |
+
path_names = ['"${workspaceFolder}/' + rel_path + "/" + path_name + '"' for path_name in path_names]
|
| 90 |
+
else:
|
| 91 |
+
path_names = []
|
| 92 |
+
print(
|
| 93 |
+
f"[WARN] Could not find Isaac Sim VSCode settings: {isaacsim_vscode_filename}."
|
| 94 |
+
"\n\tThis will result in missing 'python.analysis.extraPaths' in the VSCode"
|
| 95 |
+
"\n\tsettings, which limits the functionality of the Python language server."
|
| 96 |
+
"\n\tHowever, it does not affect the functionality of the Isaac Lab project."
|
| 97 |
+
"\n\tWe are working on a fix for this issue with the Isaac Sim team."
|
| 98 |
+
)
|
| 99 |
+
|
| 100 |
+
# add the path names that are in the Isaac Lab extensions directory
|
| 101 |
+
uwlab_extensions = os.listdir(os.path.join(UWLAB_DIR, "source"))
|
| 102 |
+
path_names.extend(['"${workspaceFolder}/source/' + ext + '"' for ext in uwlab_extensions])
|
| 103 |
+
|
| 104 |
+
# Add upstream IsaacLab siblings from .../source (editable or wheel)
|
| 105 |
+
try:
|
| 106 |
+
import isaaclab as _il # noqa: F401
|
| 107 |
+
|
| 108 |
+
pkg_file = pathlib.Path(_il.__file__).resolve()
|
| 109 |
+
|
| 110 |
+
# Two possibilities:
|
| 111 |
+
# 1) Editable: .../IsaacLab/source/isaaclab/isaaclab/__init__.py → parents[2] == .../source
|
| 112 |
+
# 2) Wheel: .../site-packages/isaaclab/__init__.py → parent/"source" == .../isaaclab/source
|
| 113 |
+
parent_source = pkg_file.parents[2]
|
| 114 |
+
child_source = pkg_file.parent / "source"
|
| 115 |
+
|
| 116 |
+
source_dir = child_source if child_source.is_dir() else parent_source
|
| 117 |
+
if not source_dir.is_dir():
|
| 118 |
+
raise RuntimeError(f"Could not find 'source' near {pkg_file}")
|
| 119 |
+
|
| 120 |
+
for p in sorted(source_dir.iterdir()):
|
| 121 |
+
if p.is_dir() and p.name.startswith("isaaclab"):
|
| 122 |
+
rel = os.path.relpath(p, UWLAB_DIR).replace("\\", "/")
|
| 123 |
+
path_names.append(f'"${{workspaceFolder}}/{rel}"')
|
| 124 |
+
except Exception as e:
|
| 125 |
+
print(f"[WARN] Could not resolve upstream 'isaaclab' paths: {e}")
|
| 126 |
+
|
| 127 |
+
# Append all top-level isaaclab* dirs as ${workspaceFolder}-relative paths
|
| 128 |
+
for p in sorted(source_dir.iterdir()):
|
| 129 |
+
if p.is_dir() and p.name.startswith("isaaclab"):
|
| 130 |
+
rel = os.path.relpath(p, UWLAB_DIR).replace("\\", "/")
|
| 131 |
+
path_names.append(f'"${{workspaceFolder}}/{rel}"')
|
| 132 |
+
|
| 133 |
+
# combine them into a single string
|
| 134 |
+
path_names = ",\n\t\t".expandtabs(4).join(path_names)
|
| 135 |
+
# deal with the path separator being different on Windows and Unix
|
| 136 |
+
path_names = path_names.replace("\\", "/")
|
| 137 |
+
|
| 138 |
+
# replace the path names in the Isaac Lab settings file with the path names parsed
|
| 139 |
+
uwlab_settings = re.sub(
|
| 140 |
+
r"\"python.analysis.extraPaths\": \[.*?\]",
|
| 141 |
+
'"python.analysis.extraPaths": [\n\t\t'.expandtabs(4) + path_names + "\n\t]".expandtabs(4),
|
| 142 |
+
uwlab_settings,
|
| 143 |
+
flags=re.DOTALL,
|
| 144 |
+
)
|
| 145 |
+
# return the Isaac Lab settings string
|
| 146 |
+
return uwlab_settings
|
| 147 |
+
|
| 148 |
+
|
| 149 |
+
def overwrite_default_python_interpreter(uwlab_settings: str) -> str:
|
| 150 |
+
"""Overwrite the default python interpreter in the Isaac Lab settings file.
|
| 151 |
+
|
| 152 |
+
The default python interpreter is replaced with the path to the python interpreter used by the
|
| 153 |
+
isaac-sim project. This is necessary because the default python interpreter is the one shipped with
|
| 154 |
+
isaac-sim.
|
| 155 |
+
|
| 156 |
+
Args:
|
| 157 |
+
uwlab_settings: The settings string to use as template.
|
| 158 |
+
|
| 159 |
+
Returns:
|
| 160 |
+
The settings string with overwritten default python interpreter.
|
| 161 |
+
"""
|
| 162 |
+
# read executable name
|
| 163 |
+
python_exe = sys.executable.replace("\\", "/")
|
| 164 |
+
|
| 165 |
+
# We make an exception for replacing the default interpreter if the
|
| 166 |
+
# path (/kit/python/bin/python3) indicates that we are using a local/container
|
| 167 |
+
# installation of IsaacSim. We will preserve the calling script as the default, python.sh.
|
| 168 |
+
# We want to use python.sh because it modifies LD_LIBRARY_PATH and PYTHONPATH
|
| 169 |
+
# (among other envars) that we need for all of our dependencies to be accessible.
|
| 170 |
+
if "kit/python/bin/python3" in python_exe:
|
| 171 |
+
return uwlab_settings
|
| 172 |
+
# replace the default python interpreter in the Isaac Lab settings file with the path to the
|
| 173 |
+
# python interpreter in the Isaac Lab directory
|
| 174 |
+
uwlab_settings = re.sub(
|
| 175 |
+
r"\"python.defaultInterpreterPath\": \".*?\"",
|
| 176 |
+
f'"python.defaultInterpreterPath": "{python_exe}"',
|
| 177 |
+
uwlab_settings,
|
| 178 |
+
flags=re.DOTALL,
|
| 179 |
+
)
|
| 180 |
+
# return the Isaac Lab settings file
|
| 181 |
+
return uwlab_settings
|
| 182 |
+
|
| 183 |
+
|
| 184 |
+
def main():
|
| 185 |
+
# Isaac Lab template settings
|
| 186 |
+
uwlab_vscode_template_filename = os.path.join(UWLAB_DIR, ".vscode", "tools", "settings.template.json")
|
| 187 |
+
# make sure the Isaac Lab template settings file exists
|
| 188 |
+
if not os.path.exists(uwlab_vscode_template_filename):
|
| 189 |
+
raise FileNotFoundError(
|
| 190 |
+
f"Could not find the Isaac Lab template settings file: {uwlab_vscode_template_filename}"
|
| 191 |
+
)
|
| 192 |
+
# read the Isaac Lab template settings file
|
| 193 |
+
with open(uwlab_vscode_template_filename) as f:
|
| 194 |
+
uwlab_template_settings = f.read()
|
| 195 |
+
|
| 196 |
+
# overwrite the python.analysis.extraPaths in the Isaac Lab settings file with the path names
|
| 197 |
+
uwlab_settings = overwrite_python_analysis_extra_paths(uwlab_template_settings)
|
| 198 |
+
# overwrite the default python interpreter in the Isaac Lab settings file with the path to the
|
| 199 |
+
# python interpreter used to call this script
|
| 200 |
+
uwlab_settings = overwrite_default_python_interpreter(uwlab_settings)
|
| 201 |
+
|
| 202 |
+
# add template notice to the top of the file
|
| 203 |
+
header_message = (
|
| 204 |
+
"// This file is a template and is automatically generated by the setup_vscode.py script.\n"
|
| 205 |
+
"// Do not edit this file directly.\n"
|
| 206 |
+
"// \n"
|
| 207 |
+
f"// Generated from: {uwlab_vscode_template_filename}\n"
|
| 208 |
+
)
|
| 209 |
+
uwlab_settings = header_message + uwlab_settings
|
| 210 |
+
|
| 211 |
+
# write the Isaac Lab settings file
|
| 212 |
+
uwlab_vscode_filename = os.path.join(UWLAB_DIR, ".vscode", "settings.json")
|
| 213 |
+
with open(uwlab_vscode_filename, "w") as f:
|
| 214 |
+
f.write(uwlab_settings)
|
| 215 |
+
|
| 216 |
+
# copy the launch.json file if it doesn't exist
|
| 217 |
+
uwlab_vscode_launch_filename = os.path.join(UWLAB_DIR, ".vscode", "launch.json")
|
| 218 |
+
uwlab_vscode_template_launch_filename = os.path.join(UWLAB_DIR, ".vscode", "tools", "launch.template.json")
|
| 219 |
+
if not os.path.exists(uwlab_vscode_launch_filename):
|
| 220 |
+
# read template launch settings
|
| 221 |
+
with open(uwlab_vscode_template_launch_filename) as f:
|
| 222 |
+
uwlab_template_launch_settings = f.read()
|
| 223 |
+
# add header
|
| 224 |
+
header_message = header_message.replace(
|
| 225 |
+
uwlab_vscode_template_filename, uwlab_vscode_template_launch_filename
|
| 226 |
+
)
|
| 227 |
+
uwlab_launch_settings = header_message + uwlab_template_launch_settings
|
| 228 |
+
# write the Isaac Lab launch settings file
|
| 229 |
+
with open(uwlab_vscode_launch_filename, "w") as f:
|
| 230 |
+
f.write(uwlab_launch_settings)
|
| 231 |
+
|
| 232 |
+
|
| 233 |
+
if __name__ == "__main__":
|
| 234 |
+
main()
|
CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Contribution Guidelines
|
| 2 |
+
|
| 3 |
+
UW Lab is a community maintained project. We wholeheartedly welcome contributions to the project to make
|
| 4 |
+
the framework more mature and useful for everyone. These may happen in forms of bug reports, feature requests,
|
| 5 |
+
design proposals and more.
|
| 6 |
+
|
| 7 |
+
For general information on how to contribute see
|
| 8 |
+
<https://uw-lab.github.io/UWLab/main/source/refs/contributing.html>.
|
| 9 |
+
|
| 10 |
+
---
|
| 11 |
+
|
| 12 |
+
Developer Certificate of Origin
|
| 13 |
+
Version 1.1
|
| 14 |
+
|
| 15 |
+
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
|
| 16 |
+
|
| 17 |
+
Everyone is permitted to copy and distribute verbatim copies of this
|
| 18 |
+
license document, but changing it is not allowed.
|
| 19 |
+
|
| 20 |
+
|
| 21 |
+
Developer's Certificate of Origin 1.1
|
| 22 |
+
|
| 23 |
+
By making a contribution to this project, I certify that:
|
| 24 |
+
|
| 25 |
+
(a) The contribution was created in whole or in part by me and I
|
| 26 |
+
have the right to submit it under the open source license
|
| 27 |
+
indicated in the file; or
|
| 28 |
+
|
| 29 |
+
(b) The contribution is based upon previous work that, to the best
|
| 30 |
+
of my knowledge, is covered under an appropriate open source
|
| 31 |
+
license and I have the right under that license to submit that
|
| 32 |
+
work with modifications, whether created in whole or in part
|
| 33 |
+
by me, under the same open source license (unless I am
|
| 34 |
+
permitted to submit under a different license), as indicated
|
| 35 |
+
in the file; or
|
| 36 |
+
|
| 37 |
+
(c) The contribution was provided directly to me by some other
|
| 38 |
+
person who certified (a), (b) or (c) and I have not modified
|
| 39 |
+
it.
|
| 40 |
+
|
| 41 |
+
(d) I understand and agree that this project and the contribution
|
| 42 |
+
are public and that a record of the contribution (including all
|
| 43 |
+
personal information I submit with it, including my sign-off) is
|
| 44 |
+
maintained indefinitely and may be redistributed consistent with
|
| 45 |
+
this project or the open source license(s) involved.
|
CONTRIBUTORS.md
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# UW Lab Developers and Contributors
|
| 2 |
+
|
| 3 |
+
This is the official list of UW Lab Project developers and contributors.
|
| 4 |
+
|
| 5 |
+
To see the full list of contributors, please check the revision history in the source control.
|
| 6 |
+
|
| 7 |
+
Guidelines for modifications:
|
| 8 |
+
|
| 9 |
+
* Please keep the **lists sorted alphabetically**.
|
| 10 |
+
* Names should be added to this file as: *individual names* or *organizations*.
|
| 11 |
+
* E-mail addresses are tracked elsewhere to avoid spam.
|
| 12 |
+
|
| 13 |
+
## Developers
|
| 14 |
+
|
| 15 |
+
* NVIDIA Corporation & Affiliates
|
| 16 |
+
* Shanghai Jiao Tong University
|
| 17 |
+
* University of Washington
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
---
|
| 21 |
+
|
| 22 |
+
* Feng Yu
|
| 23 |
+
* Mateo Guaman Castro
|
| 24 |
+
* Patrick Yin
|
| 25 |
+
* Quanquan Peng
|
| 26 |
+
* Rosario Scalise
|
| 27 |
+
* Zhengyu Zhang
|
Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectAnywhereEEAnywhere.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:154b29cfd510524c69a8500b334772809d8913697e3c4ca801b1dec85710b531
|
| 3 |
+
size 38246811
|
Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectAnywhereEEGrasped.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8992bf8f43be37fd2b1869157d899b329f32d43de6724ae1b8e2ab3d05c8444c
|
| 3 |
+
size 37659377
|
Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectPartiallyAssembledEEGrasped.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2cd2ab75ca7811dfd8bf67e2911772dc5e878eafc69f441d5649af8b105527c8
|
| 3 |
+
size 41423813
|
Datasets/OmniReset_failbias/Resets/InsertiveCube__ReceptiveCube/resets_ObjectRestingEEGrasped.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:771cbeaa688341a23a6fc6aa0a3ee8d5e5c78351aed5c4b910ac3391c03d8a90
|
| 3 |
+
size 37626231
|
LICENCE
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2022-2025, The UW Lab Project Developers.
|
| 2 |
+
|
| 3 |
+
All rights reserved.
|
| 4 |
+
|
| 5 |
+
SPDX-License-Identifier: BSD-3-Clause
|
| 6 |
+
|
| 7 |
+
Redistribution and use in source and binary forms, with or without modification,
|
| 8 |
+
are permitted provided that the following conditions are met:
|
| 9 |
+
|
| 10 |
+
1. Redistributions of source code must retain the above copyright notice,
|
| 11 |
+
this list of conditions and the following disclaimer.
|
| 12 |
+
|
| 13 |
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
| 14 |
+
this list of conditions and the following disclaimer in the documentation
|
| 15 |
+
and/or other materials provided with the distribution.
|
| 16 |
+
|
| 17 |
+
3. Neither the name of the copyright holder nor the names of its contributors
|
| 18 |
+
may be used to endorse or promote products derived from this software without
|
| 19 |
+
specific prior written permission.
|
| 20 |
+
|
| 21 |
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
| 22 |
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
| 23 |
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
| 24 |
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
| 25 |
+
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
| 26 |
+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
| 27 |
+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
| 28 |
+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| 29 |
+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
| 30 |
+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+

|
| 2 |
+
|
| 3 |
+
# UW Lab
|
| 4 |
+
|
| 5 |
+
[](https://docs.isaacsim.omniverse.nvidia.com/latest/index.html)
|
| 6 |
+
[](https://docs.python.org/3/whatsnew/3.11.html)
|
| 7 |
+
[](https://releases.ubuntu.com/20.04/)
|
| 8 |
+
[](https://www.microsoft.com/en-us/)
|
| 9 |
+
[](https://github.com/isaac-sim/IsaacLab/actions/workflows/pre-commit.yaml)
|
| 10 |
+
[](https://github.com/isaac-sim/IsaacLab/actions/workflows/docs.yaml)
|
| 11 |
+
[](https://opensource.org/licenses/BSD-3-Clause)
|
| 12 |
+
|
| 13 |
+
## Overview
|
| 14 |
+
|
| 15 |
+
UW Lab builds upon the robust foundation established by Isaac Lab and NVIDIA Isaac Sim, expanding its framework to integrate a wider range of robotics algorithms, platforms, and environments. Rooted in principles of modularity, agility, openness, and a battery-included design inspired from IsaacLab, our framework is crafted to meet the evolving demands of modern robotics research.
|
| 16 |
+
|
| 17 |
+
In the short term, our mission is to consolidate and streamline robotics research into one cohesive ecosystem, empowering researchers and developers with a unified platform. Looking ahead, UW Lab envisions a future where artificial intelligence and robotics coalesce seamlessly with physical systems—bridging the gap between simulation and real-world application. By embedding the laws of physics at its core, our framework provides a realistic, adaptable platform for developing next-generation robotic systems.
|
| 18 |
+
|
| 19 |
+
At UW Lab, we believe that the development journey is as significant as the outcome. Our commitment to creating principled, flexible, and extensible structures supports an environment where innovation thrives and every experiment contributes to advancing the field of robotics. Join us as we push the boundaries of what's possible, transforming ideas into tangible, intelligent robotic solutions.
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
## Key Features
|
| 23 |
+
|
| 24 |
+
In addition to what IsaacLab provides, UW Lab brings:
|
| 25 |
+
|
| 26 |
+
- **Environments**: Cleaned Implementation of reputable environments in Manager-Based format
|
| 27 |
+
- **Sim to Real**: Providing robots and configuration that has been tested in Lab and deliver the Simulation Setup that can directly transfer to reals
|
| 28 |
+
|
| 29 |
+
|
| 30 |
+
## Installation
|
| 31 |
+
|
| 32 |
+
Follow the [installation guide](https://uw-lab.github.io/UWLab/main/source/setup/installation/index.html).
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
## Getting Started
|
| 36 |
+
|
| 37 |
+
- **Train Your First Policy** — Train an ant to run in minutes → [Quickstart](https://uw-lab.github.io/UWLab/main/source/setup/installation/pip_installation.html#train-a-robot)
|
| 38 |
+
- **OmniReset** — RL for manipulation without reward engineering or demos → [Quickstart](https://uw-lab.github.io/UWLab/main/source/publications/omnireset/index.html#quick-start)
|
| 39 |
+
|
| 40 |
+
See [all available environments](https://uw-lab.github.io/UWLab/main/source/overview/uw_environments.html) and [full documentation](https://uw-lab.github.io/UWLab) for details.
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
## Support
|
| 44 |
+
|
| 45 |
+
* Please use GitHub [Discussions](https://github.com/uw-lab/UWLab/discussions) for discussing ideas, asking questions, and requests for new features.
|
| 46 |
+
* Github [Issues](https://github.com/uw-lab/UWLab/issues) should only be used to track executable pieces of work with a definite scope and a clear deliverable. These can be fixing bugs, documentation issues, new features, or general updates.
|
| 47 |
+
|
| 48 |
+
|
| 49 |
+
## License
|
| 50 |
+
|
| 51 |
+
UW Lab is released under [BSD-3 License](LICENSE)
|
| 52 |
+
The Isaac Lab framework is released under [BSD-3 License](LICENSE).
|
VERSION
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
|
|
|
| 1 |
+
1.0.0
|
_isaaclab/IsaacLab/.dockerignore
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# ignore .git related folders
|
| 2 |
+
.git/
|
| 3 |
+
.github/
|
| 4 |
+
.gitignore
|
| 5 |
+
# ignore docs
|
| 6 |
+
docs/
|
| 7 |
+
# copy in licenses folder to the container
|
| 8 |
+
!docs/licenses/
|
| 9 |
+
# ignore logs
|
| 10 |
+
**/logs/
|
| 11 |
+
**/runs/
|
| 12 |
+
**/output/*
|
| 13 |
+
**/outputs/*
|
| 14 |
+
**/videos/*
|
| 15 |
+
**/wandb/*
|
| 16 |
+
*.tmp
|
| 17 |
+
# ignore docker
|
| 18 |
+
docker/cluster/exports/
|
| 19 |
+
docker/.container.cfg
|
| 20 |
+
# ignore recordings
|
| 21 |
+
recordings/
|
| 22 |
+
# ignore __pycache__
|
| 23 |
+
**/__pycache__/
|
| 24 |
+
**/*.egg-info/
|
| 25 |
+
# ignore isaac sim symlink
|
| 26 |
+
_isaac_sim
|
| 27 |
+
# Docker history
|
| 28 |
+
docker/.isaac-lab-docker-history
|
| 29 |
+
# ignore uv environment
|
| 30 |
+
env_isaaclab
|
_isaaclab/IsaacLab/.gitattributes
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
*.usd filter=lfs diff=lfs merge=lfs -text
|
| 2 |
+
*.usda filter=lfs diff=lfs merge=lfs -text
|
| 3 |
+
*.psd filter=lfs diff=lfs merge=lfs -text
|
| 4 |
+
*.hdr filter=lfs diff=lfs merge=lfs -text
|
| 5 |
+
*.dae filter=lfs diff=lfs merge=lfs -text
|
| 6 |
+
*.mtl filter=lfs diff=lfs merge=lfs -text
|
| 7 |
+
*.obj filter=lfs diff=lfs merge=lfs -text
|
| 8 |
+
*.gif filter=lfs diff=lfs merge=lfs -text
|
| 9 |
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
| 10 |
+
*.pt filter=lfs diff=lfs merge=lfs -text
|
| 11 |
+
*.jit filter=lfs diff=lfs merge=lfs -text
|
| 12 |
+
*.hdf5 filter=lfs diff=lfs merge=lfs -text
|
| 13 |
+
|
| 14 |
+
*.bat text eol=crlf
|
_isaaclab/IsaacLab/.github/CODEOWNERS
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Codeowners are designated by their GitHub username. They are
|
| 2 |
+
# the people who are responsible for reviewing and approving PRs
|
| 3 |
+
# that modify the files that match the pattern.
|
| 4 |
+
#
|
| 5 |
+
# Codeowners are not the same as contributors. They are not
|
| 6 |
+
# automatically added to the PR, but they will be requested to
|
| 7 |
+
# review the PR when it is created.
|
| 8 |
+
#
|
| 9 |
+
# As a general rule, the codeowners are the people who are
|
| 10 |
+
# most familiar with the code that the PR is modifying. If you
|
| 11 |
+
# are not sure who to add, ask in the issue or in the PR itself.
|
| 12 |
+
#
|
| 13 |
+
# The format of the file is as follows:
|
| 14 |
+
# <file pattern> <codeowners>
|
| 15 |
+
|
| 16 |
+
|
| 17 |
+
# App experience files
|
| 18 |
+
# These are the files that are used to launch the app with the correct settings and configurations
|
| 19 |
+
/apps/ @kellyguo11 @hhansen-bdai @Mayankm96
|
| 20 |
+
|
| 21 |
+
# Core Framework
|
| 22 |
+
/source/isaaclab/isaaclab/actuators @Mayankm96 @jtigue-bdai
|
| 23 |
+
/source/isaaclab/isaaclab/app @hhansen-bdai @kellyguo11
|
| 24 |
+
/source/isaaclab/isaaclab/assets @kellyguo11 @Mayankm96 @jtigue-bdai
|
| 25 |
+
/source/isaaclab/isaaclab/assets/deformable_object @masoudmoghani @ooctipus
|
| 26 |
+
/source/isaaclab/isaaclab/controllers @Mayankm96
|
| 27 |
+
/source/isaaclab/isaaclab/envs/manager_based_* @Mayankm96 @jtigue-bdai @ooctipus
|
| 28 |
+
/source/isaaclab/isaaclab/envs/direct_* @kellyguo11
|
| 29 |
+
/source/isaaclab/isaaclab/envs/mdp @ooctipus
|
| 30 |
+
/source/isaaclab/isaaclab/envs/mimic_* @peterd-NV
|
| 31 |
+
/source/isaaclab/isaaclab/envs/ui @ooctipus @ossamaAhmed
|
| 32 |
+
/source/isaaclab/isaaclab/envs/utils @Toni-SM
|
| 33 |
+
/source/isaaclab/isaaclab/managers @jtigue-bdai @Mayankm96 @ooctipus
|
| 34 |
+
/source/isaaclab/isaaclab/sensors/sensor_base* @pascal-roth
|
| 35 |
+
/source/isaaclab/isaaclab/sensors/camera @kellyguo11 @pascal-roth
|
| 36 |
+
/source/isaaclab/isaaclab/sensors/contact_sensor @jtigue-bdai @ooctipus
|
| 37 |
+
/source/isaaclab/isaaclab/sensors/imu @jtigue-bdai @pascal-roth
|
| 38 |
+
/source/isaaclab/isaaclab/sensors/ray_caster @pascal-roth
|
| 39 |
+
/source/isaaclab/isaaclab/sensors/frame_transformer @jtigue-bdai
|
| 40 |
+
/source/isaaclab/isaaclab/sim/converters @Mayankm96 @jtigue-bdai @kellyguo11
|
| 41 |
+
/source/isaaclab/isaaclab/sim/schemas @Mayankm96 @jtigue-bdai @kellyguo11
|
| 42 |
+
/source/isaaclab/isaaclab/sim/spawners @Mayankm96 @jtigue-bdai @ooctipus
|
| 43 |
+
/source/isaaclab/isaaclab/sim/simulation_* @matthewtrepte @ossamaAhmed @kellyguo11
|
| 44 |
+
/source/isaaclab/isaaclab/terrains @Mayankm96
|
| 45 |
+
/source/isaaclab/isaaclab/ui @pascal-roth @jtigue-bdai
|
| 46 |
+
/source/isaaclab/isaaclab/utils/buffers @ooctipus @jtigue-bdai
|
| 47 |
+
/source/isaaclab/isaaclab/utils/datasets @Peter-NV
|
| 48 |
+
/source/isaaclab/isaaclab/utils/interpolation @jtigue-bdai
|
| 49 |
+
/source/isaaclab/isaaclab/utils/io @ooctipus
|
| 50 |
+
/source/isaaclab/isaaclab/utils/modifiers @jtigue-bdai
|
| 51 |
+
/source/isaaclab/isaaclab/utils/noise @jtigue-bdai @kellyguo11
|
| 52 |
+
/source/isaaclab/isaaclab/utils/warp @pascal-roth
|
| 53 |
+
/source/isaaclab/isaaclab/utils/assets.py @kellyguo11 @Mayankm96
|
| 54 |
+
/source/isaaclab/isaaclab/utils/math.py @jtigue-bdai @Mayankm96
|
| 55 |
+
/source/isaaclab/isaaclab/utils/configclass.py @Mayankm96
|
| 56 |
+
/source/isaaclab/isaaclab/utils/sensors.py @kellyguo11 @pascal-roth
|
| 57 |
+
|
| 58 |
+
# RL Environment
|
| 59 |
+
/source/isaaclab_tasks/isaaclab_tasks/direct @kellyguo11
|
| 60 |
+
/source/isaaclab_tasks/isaaclab_tasks/manager_based @Mayankm96
|
| 61 |
+
/source/isaaclab_tasks/isaaclab_tasks/utils @Mayankm96
|
| 62 |
+
|
| 63 |
+
# Assets
|
| 64 |
+
/source/isaaclab_assets/isaaclab_assets/ @pascal-roth
|
| 65 |
+
|
| 66 |
+
# Mimic
|
| 67 |
+
/source/isaaclab_mimic/isaaclab_mimic @peterd-NV
|
| 68 |
+
/source/isaaclab_mimic/isaaclab_mimic @njawale42
|
| 69 |
+
/source/isaaclab_mimic/isaaclab_mimic @michaellin6
|
| 70 |
+
/source/isaaclab_mimic/isaaclab_mimic @jaybdub
|
| 71 |
+
/source/isaaclab_mimic/isaaclab_mimic @huihuaNvidia2023
|
| 72 |
+
/source/isaaclab_mimic/isaaclab_mimic @xyao-nv
|
| 73 |
+
|
| 74 |
+
# RL
|
| 75 |
+
/source/isaaclab_rl/isaaclab_rl/rsl_rl @Mayankm96 @ClemensSchwarke
|
| 76 |
+
/source/isaaclab_rl/isaaclab_rl/rl_games @Toni-SM
|
| 77 |
+
/source/isaaclab_rl/isaaclab_rl/sb3 @Toni-SM
|
| 78 |
+
/source/isaaclab_rl/isaaclab_rl/skrl @Toni-SM
|
| 79 |
+
|
| 80 |
+
# Standalone Scripts
|
| 81 |
+
/scripts/benchmarks/ @ooctipus @kellyguo11
|
| 82 |
+
/scripts/demos/ @ooctipus
|
| 83 |
+
/scripts/environments/ @ooctipus
|
| 84 |
+
/scripts/imitation_learning/ @Peter-NV
|
| 85 |
+
/scripts/reinforcement_learning/ @ooctipus @Toni-NV
|
| 86 |
+
/scripts/tools/ @jtigue-bdai @Mayankm96
|
| 87 |
+
/scripts/tutorials/ @jtigue-bdai @pascal-roth
|
| 88 |
+
|
| 89 |
+
# Github Actions
|
| 90 |
+
# This list is for people wanting to be notified every time there's a change
|
| 91 |
+
# related to Github Actions
|
| 92 |
+
/.github/ @kellyguo11 @hhansen-bdai
|
| 93 |
+
|
| 94 |
+
# Visual Studio Code
|
| 95 |
+
/.vscode/ @hhansen-bdai @Mayankm96
|
| 96 |
+
|
| 97 |
+
# Infrastructure (Docker, Docs, Tools)
|
| 98 |
+
/docker/ @hhansen-bdai @pascal-roth
|
| 99 |
+
/docs/ @jtigue-bdai @kellyguo11 @Mayankm96
|
| 100 |
+
/tools/ @hhansen-bdai
|
| 101 |
+
/isaaclab.* @hhansen-bdai @Mayankm96 @kellyguo11
|
_isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/bug.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Bug Report
|
| 3 |
+
about: Submit a bug report
|
| 4 |
+
title: "[Bug Report] Bug title"
|
| 5 |
+
|
| 6 |
+
---
|
| 7 |
+
|
| 8 |
+
If you are submitting a bug report, please fill in the following details and use the tag [bug].
|
| 9 |
+
|
| 10 |
+
### Describe the bug
|
| 11 |
+
|
| 12 |
+
A clear and concise description of what the bug is.
|
| 13 |
+
|
| 14 |
+
### Steps to reproduce
|
| 15 |
+
|
| 16 |
+
Please try to provide a minimal example to reproduce the bug. Error messages and stack traces are also helpful.
|
| 17 |
+
|
| 18 |
+
<!-- Please post terminal logs, minimal example to reproduce, or command to run under three backticks (```) to allow code formatting.
|
| 19 |
+
|
| 20 |
+
```
|
| 21 |
+
Paste your error here
|
| 22 |
+
```
|
| 23 |
+
|
| 24 |
+
For more information on this, check: https://www.markdownguide.org/extended-syntax/#fenced-code-blocks
|
| 25 |
+
|
| 26 |
+
-->
|
| 27 |
+
|
| 28 |
+
### System Info
|
| 29 |
+
|
| 30 |
+
Describe the characteristic of your environment:
|
| 31 |
+
|
| 32 |
+
<!-- Please complete the following description. -->
|
| 33 |
+
- Commit: [e.g. 8f3b9ca]
|
| 34 |
+
- Isaac Sim Version: [e.g. 5.0, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
| 35 |
+
- OS: [e.g. Ubuntu 22.04]
|
| 36 |
+
- GPU: [e.g. RTX 5090]
|
| 37 |
+
- CUDA: [e.g. 12.8]
|
| 38 |
+
- GPU Driver: [e.g. 553.05, this can be seen by using `nvidia-smi` command.]
|
| 39 |
+
|
| 40 |
+
### Additional context
|
| 41 |
+
|
| 42 |
+
Add any other context about the problem here.
|
| 43 |
+
|
| 44 |
+
### Checklist
|
| 45 |
+
|
| 46 |
+
- [ ] I have checked that there is no similar issue in the repo (**required**)
|
| 47 |
+
- [ ] I have checked that the issue is not in running Isaac Sim itself and is related to the repo
|
| 48 |
+
|
| 49 |
+
### Acceptance Criteria
|
| 50 |
+
|
| 51 |
+
Add the criteria for which this task is considered **done**. If not known at issue creation time, you can add this once the issue is assigned.
|
| 52 |
+
|
| 53 |
+
- [ ] Criteria 1
|
| 54 |
+
- [ ] Criteria 2
|
_isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/proposal.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Proposal
|
| 3 |
+
about: Propose changes that are not bug fixes
|
| 4 |
+
title: "[Proposal] Proposal title"
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
|
| 8 |
+
### Proposal
|
| 9 |
+
|
| 10 |
+
A clear and concise description of the proposal. In a few sentences, describe the feature and its core capabilities.
|
| 11 |
+
|
| 12 |
+
### Motivation
|
| 13 |
+
|
| 14 |
+
Please outline the motivation for the proposal. Summarize the core use cases and user problems and needs you are trying to solve.
|
| 15 |
+
|
| 16 |
+
Is your feature request related to a problem? e.g.,"I'm always frustrated when [...]".
|
| 17 |
+
|
| 18 |
+
If this is related to another GitHub issue, please link here too.
|
| 19 |
+
|
| 20 |
+
### Alternatives
|
| 21 |
+
|
| 22 |
+
A clear and concise description of any alternative solutions or features you've considered, if any.
|
| 23 |
+
|
| 24 |
+
### Build Info
|
| 25 |
+
|
| 26 |
+
Describe the versions where you are observing the missing feature in:
|
| 27 |
+
|
| 28 |
+
<!-- Please complete the following description. -->
|
| 29 |
+
- Isaac Lab Version: [e.g. 2.3.2]
|
| 30 |
+
- Isaac Sim Version: [e.g. 5.1, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
| 31 |
+
|
| 32 |
+
### Additional context
|
| 33 |
+
|
| 34 |
+
Add any other context or screenshots about the feature request here.
|
| 35 |
+
|
| 36 |
+
### Checklist
|
| 37 |
+
|
| 38 |
+
- [ ] I have checked that there is no similar issue in the repo (**required**)
|
| 39 |
+
|
| 40 |
+
### Acceptance Criteria
|
| 41 |
+
|
| 42 |
+
Add the criteria for which this task is considered **done**. If not known at issue creation time, you can add this once the issue is assigned.
|
| 43 |
+
|
| 44 |
+
- [ ] Criteria 1
|
| 45 |
+
- [ ] Criteria 2
|
_isaaclab/IsaacLab/.github/ISSUE_TEMPLATE/question.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
name: Question
|
| 3 |
+
about: Ask a question
|
| 4 |
+
title: "[Question] Question title"
|
| 5 |
+
---
|
| 6 |
+
|
| 7 |
+
### Question
|
| 8 |
+
|
| 9 |
+
Basic questions, related to robot learning, that are not bugs or feature requests will be closed without reply, because GitHub issues are not an appropriate venue for these.
|
| 10 |
+
|
| 11 |
+
Advanced/nontrivial questions, especially in areas where documentation is lacking, are very much welcome.
|
| 12 |
+
|
| 13 |
+
For questions that are related to running and understanding Isaac Sim, please post them at the official [Isaac Sim forums](https://forums.developer.nvidia.com/c/omniverse/simulation/69).
|
| 14 |
+
|
| 15 |
+
### Build Info
|
| 16 |
+
|
| 17 |
+
Describe the versions that you are currently using:
|
| 18 |
+
|
| 19 |
+
<!-- Please complete the following description. -->
|
| 20 |
+
- Isaac Lab Version: [e.g. 2.3.2]
|
| 21 |
+
- Isaac Sim Version: [e.g. 5.1, this can be obtained by `cat ${ISAACSIM_PATH}/VERSION`]
|
_isaaclab/IsaacLab/.github/LICENSE_HEADER.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2022-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
All rights reserved.
|
| 3 |
+
|
| 4 |
+
SPDX-License-Identifier: BSD-3-Clause
|
_isaaclab/IsaacLab/.github/LICENSE_HEADER_MIMIC.txt
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Copyright (c) 2024-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
|
| 2 |
+
All rights reserved.
|
| 3 |
+
|
| 4 |
+
SPDX-License-Identifier: Apache-2.0
|
_isaaclab/IsaacLab/.github/PULL_REQUEST_TEMPLATE.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Description
|
| 2 |
+
|
| 3 |
+
<!--
|
| 4 |
+
Thank you for your interest in sending a pull request. Please make sure to check the contribution guidelines.
|
| 5 |
+
|
| 6 |
+
Link: https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html
|
| 7 |
+
|
| 8 |
+
💡 Please try to keep PRs small and focused. Large PRs are harder to review and merge.
|
| 9 |
+
-->
|
| 10 |
+
|
| 11 |
+
Please include a summary of the change and which issue is fixed. Please also include relevant motivation and context.
|
| 12 |
+
List any dependencies that are required for this change.
|
| 13 |
+
|
| 14 |
+
Fixes # (issue)
|
| 15 |
+
|
| 16 |
+
<!-- As a practice, it is recommended to open an issue to have discussions on the proposed pull request.
|
| 17 |
+
This makes it easier for the community to keep track of what is being developed or added, and if a given feature
|
| 18 |
+
is demanded by more than one party. -->
|
| 19 |
+
|
| 20 |
+
## Type of change
|
| 21 |
+
|
| 22 |
+
<!-- As you go through the list, delete the ones that are not applicable. -->
|
| 23 |
+
|
| 24 |
+
- Bug fix (non-breaking change which fixes an issue)
|
| 25 |
+
- New feature (non-breaking change which adds functionality)
|
| 26 |
+
- Breaking change (existing functionality will not work without user modification)
|
| 27 |
+
- Documentation update
|
| 28 |
+
|
| 29 |
+
## Screenshots
|
| 30 |
+
|
| 31 |
+
Please attach before and after screenshots of the change if applicable.
|
| 32 |
+
|
| 33 |
+
<!--
|
| 34 |
+
Example:
|
| 35 |
+
|
| 36 |
+
| Before | After |
|
| 37 |
+
| ------ | ----- |
|
| 38 |
+
| _gif/png before_ | _gif/png after_ |
|
| 39 |
+
|
| 40 |
+
To upload images to a PR -- simply drag and drop an image while in edit mode and it should upload the image directly. You can then paste that source into the above before/after sections.
|
| 41 |
+
-->
|
| 42 |
+
|
| 43 |
+
## Checklist
|
| 44 |
+
|
| 45 |
+
- [ ] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
|
| 46 |
+
- [ ] I have run the [`pre-commit` checks](https://pre-commit.com/) with `./isaaclab.sh --format`
|
| 47 |
+
- [ ] I have made corresponding changes to the documentation
|
| 48 |
+
- [ ] My changes generate no new warnings
|
| 49 |
+
- [ ] I have added tests that prove my fix is effective or that my feature works
|
| 50 |
+
- [ ] I have updated the changelog and the corresponding version in the extension's `config/extension.toml` file
|
| 51 |
+
- [ ] I have added my name to the `CONTRIBUTORS.md` or my name already exists there
|
| 52 |
+
|
| 53 |
+
<!--
|
| 54 |
+
As you go through the checklist above, you can mark something as done by putting an x character in it
|
| 55 |
+
|
| 56 |
+
For example,
|
| 57 |
+
- [x] I have done this task
|
| 58 |
+
- [ ] I have not done this task
|
| 59 |
+
-->
|