Skip to content

Commit 719e5e4

Browse files
authored
Merge branch 'develop' into jichuanh/container-profile-first
2 parents 296177f + 3c700dc commit 719e5e4

265 files changed

Lines changed: 6889 additions & 3573 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/CODEOWNERS

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@
1919

2020

2121
# App experience files
22-
/apps/ @kellyguo11 @hujc @matthewtrepte @StafaH
22+
/apps/ @kellyguo11 @hujc7 @matthewtrepte @StafaH
2323

2424
# Core framework
25-
/source/isaaclab/ @ooctipus @AntoineRichard @kellyguo11 @StafaH @pbarejko
25+
/source/isaaclab/ @ooctipus @AntoineRichard @kellyguo11 @StafaH @pbarejko @fatimaanes
2626
/source/isaaclab/isaaclab/envs/mimic_* @peterd-NV @kellyguo11
2727
/source/isaaclab/isaaclab/envs/manager_based_rl_mimic_env.py @peterd-NV @kellyguo11
2828
/source/isaaclab/isaaclab/envs/leapp_deployment_env.py @frlai @StafaH @kellyguo11
@@ -35,10 +35,10 @@
3535
/source/isaaclab_assets/isaaclab_assets/robots/dr_legs.py @david-cao-mueller @aserifi @rubengrandia @AntoineRichard
3636

3737
/source/isaaclab_contrib/ @ooctipus @StafaH @kellyguo11
38-
/source/isaaclab_experimental/ @hujc @AntoineRichard @kellyguo11
38+
/source/isaaclab_experimental/ @hujc7 @AntoineRichard @kellyguo11
3939
/source/isaaclab_mimic/ @kellyguo11 @peterd-NV
4040

41-
/source/isaaclab_newton/ @AntoineRichard @StafaH @hujc @kellyguo11
41+
/source/isaaclab_newton/ @AntoineRichard @StafaH @hujc7 @kellyguo11
4242
/source/isaaclab_newton/isaaclab_newton/physics/kamino_manager.py @david-cao-mueller @aserifi @rubengrandia @AntoineRichard
4343

4444
/source/isaaclab_ov/ @huidongc @rilei-nvidia @pbarejko @kellyguo11
@@ -54,30 +54,30 @@
5454
/source/isaaclab_rl/ @ooctipus @StafaH @ClemensSchwarke @kellyguo11
5555
/source/isaaclab_rl/test/export/ @frlai @StafaH @kellyguo11
5656

57-
/source/isaaclab_tasks/ @ooctipus @StafaH @kellyguo11 @hujc
57+
/source/isaaclab_tasks/ @ooctipus @StafaH @kellyguo11 @hujc7
5858
/source/isaaclab_tasks/isaaclab_tasks/contrib/dr_legs/ @david-cao-mueller @aserifi @rubengrandia @AntoineRichard
5959

6060
# Standalone scripts
6161
/scripts/ @StafaH @kellyguo11 @ooctipus
62-
/scripts/benchmarks/ @AntoineRichard @StafaH @kellyguo11 @r-schmitt @fanes
62+
/scripts/benchmarks/ @AntoineRichard @StafaH @kellyguo11 @r-schmitt @fatimaanes
6363
/scripts/imitation_learning/ @peterd-NV @rwiltz @kellyguo11
6464
/scripts/imitation_learning/locomanipulation_sdg/ @jaybdub @peterd-NV @kellyguo11
6565
/scripts/reinforcement_learning/leapp/ @frlai @StafaH @kellyguo11
6666

6767
# GitHub Actions and infrastructure
6868
/uv.lock @StafaH @kellyguo11
69-
/.github/ @kellyguo11 @myurasov-nv @hujc
70-
/.vscode/ @kellyguo11 @hujc @myurasov-nv @Toni-SM
71-
/docker/ @myurasov-nv @kellyguo11 @hujc
69+
/.github/ @kellyguo11 @myurasov-nv @hujc7
70+
/.vscode/ @kellyguo11 @hujc7 @myurasov-nv @Toni-SM
71+
/docker/ @myurasov-nv @kellyguo11 @hujc7
7272
/docs/ @AntoineRichard @kellyguo11 @StafaH @ooctipus
7373
/tools/ @AntoineRichard @kellyguo11 @StafaH @ooctipus
7474

7575
# Cross-stack review caps
7676
/source/*/changelog.d/
7777

7878
# RLiNF
79-
/source/isaaclab_contrib/isaaclab_contrib/rl/rlinf/ @mingxueg @kellyguo11
80-
/source/isaaclab_contrib/test/rl/test_rlinf_extension.py @mingxueg @kellyguo11
81-
/source/isaaclab_rl/isaaclab_rl/entrypoints/backends/*rlinf.py @mingxueg @kellyguo11
82-
/docs/source/experimental-features/rlinf_vla_posttraining.rst @mingxueg @kellyguo11
83-
/docs/source/api/lab_contrib/isaaclab_contrib.rl.rst @mingxueg @kellyguo11
79+
/source/isaaclab_contrib/isaaclab_contrib/rl/rlinf/ @mingxueg-nv @kellyguo11
80+
/source/isaaclab_contrib/test/rl/test_rlinf_extension.py @mingxueg-nv @kellyguo11
81+
/source/isaaclab_rl/isaaclab_rl/entrypoints/backends/*rlinf.py @mingxueg-nv @kellyguo11
82+
/docs/source/experimental-features/rlinf_vla_posttraining.rst @mingxueg-nv @kellyguo11
83+
/docs/source/api/lab_contrib/isaaclab_contrib.rl.rst @mingxueg-nv @kellyguo11

.github/workflows/config.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
# (frozen at 6.1.0-alpha.2). Both images use Isaac Sim's NGC org, which is current and
1010
# which the CI credential can reach.
1111
isaacsim_image_name: nvcr.io/0947644777160149/internal/isaac-sim
12-
# Pinned to the last known-good build; newer ones fail the rendering tests.
13-
isaacsim_image_tag: latest-develop@sha256:71019ff76289be944cc4356323e32d17568ee082228e3bf1ef047b741f4fe380
12+
# Pinned to Isaac Sim commit 307e5486 for reproducible CI.
13+
isaacsim_image_tag: latest-develop@sha256:a13867a6403488a9e640288f96492e6ecd44c3a525b5b85793a2da68fdac48ad
1414
isaaclab_image_name: nvcr.io/0947644777160149/internal/isaac-lab
1515
ovphysx_wheelhouse_image: ""

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,8 @@ _build
7777

7878
# No benchmarks output
7979
/benchmarks/
80+
benchmark_*.json
81+
8082

8183
# Ruff cache
8284
**/.ruff_cache/

docker/Dockerfile.kitless

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,20 @@ COPY pyproject.toml uv.lock VERSION LICENSE LICENSE-mimic README.md ./
4545
COPY source/ source/
4646
COPY isaaclab.sh ./
4747

48-
# Same entry point as Dockerfile.base. The selector is explicit because OVRTX
49-
# lives in the `ov` feature a bare --install excludes; OVPhysX stays out until
50-
# its OmniClient pin is compatible. The venv pins python3.12 to match the
51-
# runtime stage's libpython3.12, and isaaclab.sh resolves VIRTUAL_ENV first.
48+
# Same entry point as Dockerfile.base. The selectors are explicit because a bare
49+
# --install excludes `ov` and `visualizer`; both take `[all]` here. The venv pins
50+
# python3.12 to match the runtime stage's libpython3.12, and isaaclab.sh resolves
51+
# VIRTUAL_ENV first.
5252
RUN uv venv --python /usr/bin/python3.12 --seed --no-managed-python "${VIRTUAL_ENV}" \
5353
&& chmod +x "${ISAACLAB_PATH}/isaaclab.sh" \
54-
&& "${ISAACLAB_PATH}/isaaclab.sh" --install newton,rl[all],ov[ovrtx] \
54+
&& "${ISAACLAB_PATH}/isaaclab.sh" --install newton,rl[all],ov[all],visualizer[all] \
5555
&& python -c "import importlib.metadata as m; \
5656
names = {d.metadata['Name'].lower() for d in m.distributions()}; \
5757
assert 'isaacsim' not in names; \
58-
assert 'ovphysx' not in names; \
59-
assert 'ovrtx' in names" \
58+
assert 'ovphysx' in names; \
59+
assert 'ovrtx' in names; \
60+
assert 'viser' in names; \
61+
assert 'rerun-sdk' in names" \
6062
&& test ! -e "${ISAACLAB_PATH}/_isaac_sim"
6163

6264
# isaaclab.utils.assets parses apps/isaaclab.python.kit at import time to
@@ -89,7 +91,9 @@ ENV NVIDIA_VISIBLE_DEVICES=all
8991
ENV NVIDIA_DRIVER_CAPABILITIES=compute,utility,graphics
9092

9193
# Libraries ovrtx loads at init. GLVND splits these: libgl1 gives libGL.so.1,
92-
# but libOpenGL.so.0 and libEGL.so.1 need libopengl0 and libegl1.
94+
# but libOpenGL.so.0 and libEGL.so.1 need libopengl0 and libegl1. libxrender1 is
95+
# for the Newton GL viewer: pyglet's xlib backend resolves libXrender.so.1 via
96+
# ctypes at import time and nothing else in this list pulls it in transitively.
9397
RUN apt-get update \
9498
&& apt-get install -y --no-install-recommends \
9599
ca-certificates \
@@ -103,6 +107,7 @@ RUN apt-get update \
103107
libvulkan1 \
104108
libx11-6 \
105109
libxext6 \
110+
libxrender1 \
106111
python3 \
107112
&& rm -rf /var/lib/apt/lists/* \
108113
&& if getent passwd ubuntu >/dev/null; then userdel -r ubuntu; fi \

docker/test/test_container_profiles.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ def test_build_uses_profile_dependency_chain(
162162
):
163163
"""Build only the services required by the selected profile."""
164164
run = MagicMock()
165+
run.return_value.returncode = 0
165166
monkeypatch.setattr("docker.utils.container_interface.subprocess.run", run)
166167

167168
make_interface(profile).build()
@@ -174,6 +175,7 @@ def test_kitless_start_does_not_build_base(
174175
):
175176
"""Starting kit-less invokes only its standalone Compose profile."""
176177
run = MagicMock()
178+
run.return_value.returncode = 0
177179
monkeypatch.setattr("docker.utils.container_interface.subprocess.run", run)
178180

179181
make_interface("kitless").start()
@@ -202,6 +204,7 @@ def test_kitless_enter_and_stop_target_profile_container(
202204
"""Enter and stop use the kit-less service name, environment, and display."""
203205
interface = make_interface("kitless")
204206
run = MagicMock()
207+
run.return_value.returncode = 0
205208
monkeypatch.setenv("DISPLAY", ":99")
206209
monkeypatch.setattr("docker.utils.container_interface.subprocess.run", run)
207210
monkeypatch.setattr(interface, "is_container_running", MagicMock(return_value=True))

docker/test/test_dockerfile_nonroot.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,21 +109,23 @@ def test_ros2_dockerfile_restores_non_root_runtime_user():
109109
assert _user_directives(dockerfile_text) == ["root", "isaaclab"]
110110

111111

112-
def test_kitless_dockerfile_installs_newton_rl_and_ovrtx_without_isaac_sim_or_ovphysx():
113-
"""The kit-less image installs Newton, OVRTX, and all core RL frameworks."""
112+
def test_kitless_dockerfile_installs_newton_rl_ov_and_visualizers_without_isaac_sim():
113+
"""The kit-less image installs Newton, both OV runtimes, every Newton viewer, and the RL frameworks."""
114114
dockerfile_text = (DOCKER_DIR / "Dockerfile.kitless").read_text(encoding="utf-8")
115115

116116
assert (
117117
"FROM ghcr.io/astral-sh/uv:0.9.25@sha256:13e233d08517abdafac4ead26c16d881cd77504a2c40c38c905cf3a0d70131a6 AS uv"
118118
in dockerfile_text
119119
)
120120
# Installed through the same entry point as Dockerfile.base/Dockerfile.curobo.
121-
assert '"${ISAACLAB_PATH}/isaaclab.sh" --install newton,rl[all],ov[ovrtx]' in dockerfile_text
121+
assert '"${ISAACLAB_PATH}/isaaclab.sh" --install newton,rl[all],ov[all],visualizer[all]' in dockerfile_text
122122
assert "COPY isaaclab.sh ./" in dockerfile_text
123-
assert "ov[ovphysx]" not in dockerfile_text
124123
assert "'isaacsim' not in names" in dockerfile_text
125-
assert "'ovphysx' not in names" in dockerfile_text
124+
assert "'ovphysx' in names" in dockerfile_text
126125
assert "'ovrtx' in names" in dockerfile_text
126+
assert "'viser' in names" in dockerfile_text
127+
assert "'rerun-sdk' in names" in dockerfile_text
128+
assert "libxrender1" in dockerfile_text
127129
assert 'test ! -e "${ISAACLAB_PATH}/_isaac_sim"' in dockerfile_text
128130
assert "COPY docker/docker-compose.yaml docker/docker-compose.yaml" in dockerfile_text
129131
assert "COPY docker/utils/volume_mounts.py docker/utils/volume_mounts.py" in dockerfile_text

docker/utils/container_interface.py

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,29 @@ def print_info(self):
120120
Operations.
121121
"""
122122

123+
def _run_docker_command(self, cmd: list[str], action: str, check: bool = True) -> int:
124+
"""Run a docker command in the context directory and surface its failure.
125+
126+
Args:
127+
cmd: The docker command to run.
128+
action: Description of the attempted operation, used in the failure message.
129+
check: Whether a non-zero exit code raises. Defaults to True. Pass False for
130+
operations whose failure should not abort the caller.
131+
132+
Returns:
133+
The exit code of the command.
134+
135+
Raises:
136+
RuntimeError: If the command exits non-zero and :paramref:`check` is True.
137+
"""
138+
returncode = subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ).returncode
139+
if returncode != 0:
140+
message = f"Failed to {action} (exit code {returncode}). Command: {' '.join(cmd)}"
141+
if check:
142+
raise RuntimeError(message)
143+
print(f"[WARN] {message}\n")
144+
return returncode
145+
123146
def is_container_running(self) -> bool:
124147
"""Check if the container is running.
125148
@@ -156,7 +179,7 @@ def build(self):
156179
+ ["--env-file", ".env.base"]
157180
+ ["build", self.base_service_name]
158181
)
159-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
182+
self._run_docker_command(cmd, "build the docker image for the profile 'base'")
160183
print("[INFO] Finished building the docker image for the profile 'base'.\n")
161184

162185
# build the image for the profile
@@ -169,7 +192,7 @@ def build(self):
169192
+ self.add_env_files
170193
+ ["build", self.service_name]
171194
)
172-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
195+
self._run_docker_command(cmd, f"build the docker image for the profile '{self.profile}'")
173196
print(f"[INFO] Finished building the docker image for the profile '{self.profile}'.\n")
174197

175198
def start(self):
@@ -194,7 +217,7 @@ def start(self):
194217
+ ["--env-file", ".env.base"]
195218
+ ["build", self.base_service_name]
196219
)
197-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
220+
self._run_docker_command(cmd, "build the docker image for the profile 'base'")
198221

199222
# start the container and build the image if not available
200223
cmd = (
@@ -204,7 +227,7 @@ def start(self):
204227
+ self.add_env_files
205228
+ ["up", "--detach", "--build", "--remove-orphans"]
206229
)
207-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
230+
self._run_docker_command(cmd, f"start the container '{self.container_name}'")
208231

209232
def enter(self):
210233
"""Enter the running container by executing a bash shell.
@@ -231,7 +254,7 @@ def stop(self):
231254
cmd = (
232255
["docker", "compose"] + self.add_yamls + self.add_profiles + self.add_env_files + ["down", "--volumes"]
233256
)
234-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
257+
self._run_docker_command(cmd, f"stop the container '{self.container_name}'")
235258
else:
236259
print(
237260
f"[INFO] Can't stop container '{self.container_name}' as it is not running."
@@ -275,7 +298,8 @@ def copy(self, output_dir: Path | None = None):
275298
# copy the artifacts
276299
for container_path, host_path in artifacts.items():
277300
cmd = ["docker", "cp", f"{self.container_name}:{container_path}/", host_path]
278-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
301+
# An absent artifact directory is normal, so warn rather than abort.
302+
self._run_docker_command(cmd, f"copy '{container_path}' from the container", check=False)
279303
print("\n[INFO] Finished copying the artifacts from the container.")
280304
else:
281305
raise RuntimeError(f"The container '{self.container_name}' is not running.")
@@ -300,7 +324,7 @@ def config(self, output_yaml: Path | None = None):
300324

301325
# run the docker compose config command to generate the configuration
302326
cmd = ["docker", "compose"] + self.add_yamls + self.add_profiles + self.add_env_files + ["config"] + output
303-
subprocess.run(cmd, check=False, cwd=self.context_dir, env=self.environ)
327+
self._run_docker_command(cmd, "generate the docker compose configuration")
304328

305329
"""
306330
Helper functions.

docs/source/_static/css/environment-browser.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,19 +21,19 @@
2121
["Isaac-Fourbar-Pole-Swingup", "rsl_rl", "newton_kamino", "", ""],
2222
["Isaac-Humanoid", "rl_games,rsl_rl,skrl,sb3", "isaacsim_physx,newton_mjwarp", "", ""],
2323
["Isaac-Humanoid-Direct", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_mjwarp,ovphysx", "", ""],
24-
["Isaac-Lift-Cloth-Franka", "rsl_rl", "newton_mjwarp_vbd_proxy,ovphysx", "", ""],
25-
["Isaac-Lift-Cloth-Franka-Camera", "rsl_rl", "newton_mjwarp_vbd_proxy,ovphysx", "isaacsim_rtx,newton_renderer,ovrtx", ""],
24+
["Isaac-Lift-Cloth-Franka", "rsl_rl", "newton_mjwarp_vbd_proxy", "", "ik,joint"],
25+
["Isaac-Lift-Cloth-Franka-Camera", "rsl_rl", "newton_mjwarp_vbd_proxy", "isaacsim_rtx,newton_renderer,ovrtx", "ik,joint"],
2626
["Isaac-Lift-Franka", "rsl_rl", "isaacsim_physx,newton_mjwarp", "", "cube,shapes"],
2727
["Isaac-Lift-KukaAllegro", "rsl_rl", "isaacsim_physx,newton_mjwarp,ovphysx", "", "cube,shapes"],
2828
["Isaac-Lift-KukaAllegro-Camera", "rsl_rl", "isaacsim_physx,newton_mjwarp,ovphysx", "isaacsim_rtx,newton_renderer,ovrtx", "albedo128,albedo256,albedo64,cube,depth128,depth256,depth64,duo_camera,raycaster_depth128,raycaster_depth256,raycaster_depth64,rgb128,rgb256,rgb64,semantic_segmentation128,semantic_segmentation256,semantic_segmentation64,shapes,simple_shading_constant_diffuse128,simple_shading_constant_diffuse256,simple_shading_constant_diffuse64,simple_shading_diffuse_mdl128,simple_shading_diffuse_mdl256,simple_shading_diffuse_mdl64,simple_shading_full_mdl128,simple_shading_full_mdl256,simple_shading_full_mdl64,single_camera"],
29-
["Isaac-Lift-Soft-Franka", "rsl_rl", "isaacsim_physx,newton_mjwarp_vbd_proxy,ovphysx", "", ""],
30-
["Isaac-Lift-Soft-Franka-Camera", "rsl_rl", "isaacsim_physx,newton_mjwarp_vbd_proxy,ovphysx", "isaacsim_rtx,newton_renderer,ovrtx", ""],
29+
["Isaac-Lift-Soft-Franka", "rsl_rl", "isaacsim_physx,newton_mjwarp_vbd_proxy", "", "ik,joint"],
30+
["Isaac-Lift-Soft-Franka-Camera", "rsl_rl", "isaacsim_physx,newton_mjwarp_vbd_proxy", "isaacsim_rtx,newton_renderer,ovrtx", "ik,joint"],
3131
["Isaac-Open-Drawer-Franka", "rl_games,rsl_rl,skrl", "", "", ""],
3232
["Isaac-Open-Drawer-Franka-Direct", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_mjwarp,ovphysx", "", ""],
3333
["Isaac-Pendulum-Direct", "rl_games,skrl", "", "", ""],
34-
["Isaac-Reach-Franka", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_kamino,newton_mjwarp,ovphysx", "", "diffik,diffik_abs,joint_pos,newton_ik"],
35-
["Isaac-Reach-Franka-OSC", "rsl_rl", "isaacsim_physx,newton_kamino,newton_mjwarp,ovphysx", "", ""],
36-
["Isaac-Reach-UR10", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_kamino,newton_mjwarp,ovphysx", "", ""],
34+
["Isaac-Reach-Franka", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_mjwarp,ovphysx", "", "diffik,diffik_abs,joint_pos,newton_ik"],
35+
["Isaac-Reach-Franka-OSC", "rsl_rl", "isaacsim_physx,newton_mjwarp,ovphysx", "", ""],
36+
["Isaac-Reach-UR10", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_mjwarp,ovphysx", "", ""],
3737
["Isaac-Reorient-Cube-Allegro", "rl_games,rsl_rl,skrl", "", "", ""],
3838
["Isaac-Reorient-Cube-Allegro-Direct", "rl_games,rsl_rl,skrl", "isaacsim_physx,newton_mjwarp,ovphysx", "", ""],
3939
["Isaac-Reorient-Cube-Shadow-Camera-Direct", "rl_games,rsl_rl", "isaacsim_physx,newton_kamino,newton_mjwarp,ovphysx", "isaacsim_rtx,newton_renderer,ovrtx", "albedo,depth,full,rgb,semantic_segmentation,simple_shading_constant_diffuse,simple_shading_diffuse_mdl,simple_shading_full_mdl"],
@@ -150,7 +150,7 @@
150150
populateSelect(fields.physics, task.physics, [fields.physics.value, "newton_mjwarp", "isaacsim_physx", "ovphysx", "newton_kamino"]);
151151
const preferredRenderer = fields.physics.value.startsWith("newton") ? "newton_renderer" : "isaacsim_rtx";
152152
populateSelect(fields.renderer, task.renderer, [fields.renderer.value, preferredRenderer, "ovrtx"]);
153-
populateSelect(fields.presets, task.presets, [fields.presets.value, "rgb", "cube", "single_camera"]);
153+
populateSelect(fields.presets, task.presets, [fields.presets.value, "joint", "ik", "rgb", "cube", "single_camera"]);
154154
};
155155

156156
const currentCommand = () => {

docs/source/api/lab/isaaclab.app.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
.. autosummary::
99

1010
AppLauncher
11+
LoadingScreen
1112
Scan
1213

1314
.. rubric:: Functions
@@ -16,6 +17,7 @@
1617

1718
launch_simulation
1819
make_physics_cfg
20+
report_activity
1921
scan
2022

2123

docs/source/features/include/docker_details.inc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -321,11 +321,12 @@ The container defaults to ``FastRTPS``, but ``CylconeDDS`` is also supported. Ea
321321
.. rubric:: Using the Kit-less Container
322322

323323
The kit-less container uses Ubuntu 24.04 and Python 3.12 instead of the Isaac Sim base image. It contains
324-
Newton physics, OVRTX rendering, and the four core RL frameworks: RL Games, RSL-RL, Stable-Baselines3, and SKRL.
325-
It does not select a visualizer, so training runs headless.
324+
Newton physics, OVPhysX physics, OVRTX rendering, and the four core RL frameworks: RL Games, RSL-RL,
325+
Stable-Baselines3, and SKRL. It also carries every Newton viewer -- ``newton``, ``viser``, and ``rerun`` --
326+
so any of them can be requested with ``--viz``. No visualizer is selected by default, so training runs
327+
headless unless you ask for one.
326328

327-
The OVPhysX source integration is present, but its external runtime is not included. Use Newton physics in
328-
this image.
329+
The ``kit`` visualizer is the exception: it is provided by Omniverse Kit, which this image does not contain.
329330

330331
To build, start, and enter the image through the same ``container.py`` interface as the Isaac Sim images, run:
331332

0 commit comments

Comments
 (0)