[Docs] Merge and clean up RL docs - #7437
Conversation
Greptile SummaryThe PR consolidates the reinforcement-learning documentation around the Isaac Lab 3.0 CLI and adds a reproducible ANYmal-D learning-progression media workflow.
Confidence Score: 3/5The PR should not merge until the media generator selects an emitted final checkpoint and the removed documentation URLs are preserved or redirected. A fresh media-generation run stops when it looks for model_299.pt after a 300-iteration training run, and deleting the legacy source pages leaves existing repository links pointing to missing generated pages. Files Needing Attention: tools/docs/media/generate_reinforcement_learning.sh; docs/source/overview/reinforcement-learning/rl_existing_scripts.rst; docs/source/overview/reinforcement-learning/rl_frameworks.rst Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart LR
Train[Train ANYmal-D for 300 iterations] --> Saves[RSL-RL saves checkpoints]
Saves --> Select[Select iterations 0, 100, and final]
Select --> Play[Play each checkpoint with OVRTX]
Play --> Clips[Write three MP4 clips]
Clips --> FFmpeg[Stack and encode clips]
FFmpeg --> GIF[Documentation GIF]
|
There was a problem hiding this comment.
Isaac Lab Review Bot
The RL documentation consolidation is coherent and references to the removed pages are retargeted, but two actionable issues remain: the media generator uses a physics selector inconsistent with its installed backend extra, and the merged source-of-truth page drops the maintenance link to its synchronized RL skills.
- Design and architecture: The task-oriented consolidated page is a suitable replacement for the deleted RL overview, comparison, workflow, and training-guide pages. However, it should preserve the former training guide’s explicit instruction to synchronize the
train-rl-agentsanddebug-rl-trainingskills, since those skills now identify this merged page as their maintained documentation source. - API: The supplied documentation targets and inbound references are consistently migrated:
_rl-frameworksand_pretrained-checkpointsremain available,_choose-an-rl-librarysupports the new quickstart reference, and references in the changed documentation and skills point to the consolidated page. - Implementation: The capture helper and generator follow the existing documentation-media workflow, but the generator installs the
ovphysxextra while passingphysics=physxduring both training and playback. Those commands should use the documentedphysics=ovphysxselector to match the selected integration and make the workflow reproducible.
Minor fixes needed. Posted 2 actionable findings inline.
Automated review; human maintainers own approval decisions.
|
Applied the review follow-up in
Validation: |
|
run-ci |
There was a problem hiding this comment.
we try to keep gif files uploaded on S3 instead so that we can avoid bloating the repo size. generally, we only keep .jpg media files in the repo.
| .. code-block:: bash | ||
|
|
||
| uv run isaaclab play --rl_library rsl_rl --task Isaac-Cartpole \ | ||
| --checkpoint latest --num_envs 32 --viz kit |
There was a problem hiding this comment.
maybe we don't use kit here since it requires isaac sim?
| :alt: Anymal-D locomotion at RSL-RL training iterations 0, 100, and 299 | ||
|
|
||
| One RSL-RL experiment at three checkpoints: the same Anymal-D task, command, seed, camera, and | ||
| OVRTX rendering setup show how the policy changes during training. |
There was a problem hiding this comment.
what is the camera/ovrtx setup used for this? the environment doesn't come with a camera by default right?
There was a problem hiding this comment.
Fixed, this section was reworked so it no longer discuesses ovrtx
| .. code-block:: bash | ||
|
|
||
| uv run isaaclab train --rl_library rsl_rl --task Isaac-Cartpole \ | ||
| --num_envs 32 --viz kit |
There was a problem hiding this comment.
maybe also a different visualizer here?
There was a problem hiding this comment.
Fixed (ended up removing this part of the docs)
|
run-ci |
|
|
||
| The ``train`` and ``play`` commands work across the supported RL libraries. | ||
|
|
||
| .. figure:: https://download.isaacsim.omniverse.nvidia.com/isaaclab/images/rl_progression_learning_anymald.gif |
There was a problem hiding this comment.
[P2] Agent found bug: this figure URL returns 404, so the page's only image will not render once published.
Measured against e7a284d0, with two same-host controls to rule out the CDN blocking range requests:
| Object | GET |
|---|---|
.../isaaclab/images/rl_progression_learning_anymald.gif |
404 text/html |
.../isaaclab/images/cosmos_inputs.gif |
206 image/gif |
.../isaaclab/images/record_video_example_sensor.gif |
206 image/gif |
The host answers and its other images serve fine — this object is simply not there, so it looks like the GIF was never uploaded when the reference moved off the in-repo copy.
Important
CI structurally cannot catch this. .github/workflows/check-links.yml passes --exclude 'download\.isaacsim\.omniverse\.nvidia\.com/isaaclab/images', so the link checker skips this host for every PR.
- Upload the GIF and confirm the URL returns
image/gif
| @@ -0,0 +1,3 @@ | |||
| version https://git-lfs.github.com/spec/v1 | |||
There was a problem hiding this comment.
[P2] Agent found bug: the 4.3 MB LFS blob is still committed here, and at head nothing references it.
Following up on the "keep GIFs on S3" thread above — the reference moved to S3 (docs/source/concepts/reinforcement_learning.rst:36), but the file stayed. At e7a284d0 the pointer still reads size 4335440, and git grep anymal-d-learning-progression matches only tools/docs/media/generate_reinforcement_learning.sh; no .rst uses it. The repo pays 4.3 MB of permanent LFS storage for a file the docs never load.
-
git rm docs/source/_static/reinforcement-learning/anymal-d-learning-progression.gif
|
|
||
| SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" | ||
| REPO_ROOT="$(cd -- "${SCRIPT_DIR}/../../.." && pwd)" | ||
| OUTPUT_DIR="${REPO_ROOT}/docs/source/_static/reinforcement-learning" |
There was a problem hiding this comment.
[P2] Agent suggestion: the generator writes into the docs tree, so re-running the documented workflow re-creates the file that should not be committed.
Now that the page consumes the S3 copy, this OUTPUT_DIR produces an artifact nothing reads, and the next person who follows tools/docs/media/README.md silently re-adds the LFS blob. generate_quickstart.sh writes under _static/ legitimately, because its GIFs are in-repo; this one's is not, so copying that line carries the wrong assumption.
Suggest defaulting outside the checkout and naming the upload step — note WORK_DIR is rm -rf'd by the EXIT trap, so it cannot be the default:
-OUTPUT_DIR="${REPO_ROOT}/docs/source/_static/reinforcement-learning"
+# The page loads the published S3 copy, so the GIF is not committed; upload the result manually.
+OUTPUT_DIR="${RL_PROGRESS_OUTPUT_DIR:-$(mktemp -d)}"and a line in tools/docs/media/README.md saying the output is uploaded to download.isaacsim.omniverse.nvidia.com/isaaclab/images/ rather than committed.
|
|
||
| - [Installation steps](https://isaac-sim.github.io/IsaacLab/develop/source/setup/installation/index.html#local-installation) | ||
| - [Reinforcement learning](https://isaac-sim.github.io/IsaacLab/develop/source/overview/reinforcement-learning/rl_existing_scripts.html) | ||
| - [Reinforcement learning](docs/source/concepts/reinforcement_learning.rst) |
There was a problem hiding this comment.
[P2] Agent found bug: this bullet now points at a repo path while its four siblings are absolute docs URLs.
The lead-in is "Our [documentation page] provides everything ... Follow these links", and Installation / Tutorials / Available environments all use https://isaac-sim.github.io/IsaacLab/develop/.... A repo-relative .rst resolves only when the README is browsed on GitHub — it is dead on PyPI and any other README renderer, and even on GitHub it hands the reader raw reStructuredText instead of the rendered page.
| - [Reinforcement learning](docs/source/concepts/reinforcement_learning.rst) | |
| - [Reinforcement learning](https://isaac-sim.github.io/IsaacLab/develop/source/concepts/reinforcement_learning.html) |
|
|
||
| This file defines the agent configuration used to generate the "Training Performance" table in | ||
| https://isaac-sim.github.io/IsaacLab/main/source/overview/reinforcement-learning/rl_frameworks.html. | ||
| https://isaac-sim.github.io/IsaacLab/main/source/concepts/reinforcement_learning.html. |
There was a problem hiding this comment.
[P2] Agent found bug: the notice now points at a page that has no "Training Performance" table.
This PR deleted that table along with rl_frameworks.rst, and the consolidated page deliberately omits throughput numbers ("Choose based on the features your experiment needs, not on a single throughput result"). So retargeting the URL leaves four files promising a table that is not at the destination — same edit in rl_games_manager_ppo_cfg.yaml:9, sb3_manager_ppo_cfg.yaml:9 and skrl_manager_ppo_cfg.yaml:9.
Either restore the comparison table on the new page, or reword the four notices to say these configs are kept in sync for cross-library comparison, without pointing at a table.
| * :doc:`/source/how-to/capture_sensor_frames` covers image-observation | ||
| diagnostics. | ||
|
|
||
| .. _RSL-RL: https://github.com/leggedrobotics/rsl_rl |
There was a problem hiding this comment.
[P2] Agent suggestion: these five hyperlink targets are never referenced anywhere on the page.
RSL-RL, skrl, RL-Games, Stable-Baselines3 and RLinf appear only as bold text in the comparison table, never as RSL-RL_-style references — the targets came across from rl_frameworks.rst, which did use them. Docutils reports unreferenced targets at INFO level, so the build stays clean and they simply sit here as dead markup.
Either drop lines 520-524, or turn the library names in the "Choose an RL library" table into references so a reader can click through to each project.
|
run-ci |
|
run-ci |
|
Backported to |
# Description Merge the reinforcement learning overview, framework comparison, existing-script reference, and training guide into one task-oriented page updated for the Isaac Lab 3.0 CLI and preset conventions. The consolidated guide recommends RSL-RL as the default and explains the distinct reasons to choose RL-Games, SKRL, or Stable-Baselines3. It also adds a reproducible OVRTX-rendered ANYmal-D learning-progression GIF and a media-generation workflow modeled after the quickstart scripts. No additional dependencies are required. ## Type of change - Documentation update ## Release backport - [x] <!-- backport-active-release --> Backport this pull request to the active release branch after it merges into `develop` ## Screenshots The merged RL page includes the generated ANYmal-D learning-progression GIF, recorded with OVRTX at iterations 0, 100, and 299. ## Validation - `uv run --isolated --extra test -- make -C docs current-docs` (passed with no warnings) - `uv run --no-project python tools/skills/cli.py check` (validated 21 skills) - `uvx ruff check tools/docs/media/capture_reinforcement_learning.py` - `uvx ruff format --check tools/docs/media/capture_reinforcement_learning.py` - `bash -n tools/docs/media/generate_reinforcement_learning.sh` - `git diff --check` - `uv run isaaclab -f` (all applicable formatting, RST, codespell, executable, large-file, and LFS checks passed; the repository-wide changelog hook reports unrelated baseline fragment divergence in source packages not touched by this documentation-only PR) - Ran `tools/docs/media/generate_reinforcement_learning.sh` end-to-end with OVRTX and inspected the generated GIF. ## Checklist - [x] I have read and understood the [contribution guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html) - [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with `uv run isaaclab -f` - [x] I have made corresponding changes to the documentation - [x] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works (documentation-only change; validated with a warning-as-error Sphinx build) - [x] I have added a changelog fragment under `source/<pkg>/changelog.d/` for every touched package (no source packages touched) - [x] I have added my name to the `CONTRIBUTORS.md` or my name already exists there (cherry picked from commit 5c3ca25)
Description
Merge the reinforcement learning overview, framework comparison, existing-script reference, and training guide into one task-oriented page updated for the Isaac Lab 3.0 CLI and preset conventions.
The consolidated guide recommends RSL-RL as the default and explains the distinct reasons to choose RL-Games, SKRL, or Stable-Baselines3. It also adds a reproducible OVRTX-rendered ANYmal-D learning-progression GIF and a media-generation workflow modeled after the quickstart scripts.
No additional dependencies are required.
Type of change
Release backport
developScreenshots
The merged RL page includes the generated ANYmal-D learning-progression GIF, recorded with OVRTX at iterations 0, 100, and 299.
Validation
uv run --isolated --extra test -- make -C docs current-docs(passed with no warnings)uv run --no-project python tools/skills/cli.py check(validated 21 skills)uvx ruff check tools/docs/media/capture_reinforcement_learning.pyuvx ruff format --check tools/docs/media/capture_reinforcement_learning.pybash -n tools/docs/media/generate_reinforcement_learning.shgit diff --checkuv run isaaclab -f(all applicable formatting, RST, codespell, executable, large-file, and LFS checks passed; the repository-wide changelog hook reports unrelated baseline fragment divergence in source packages not touched by this documentation-only PR)tools/docs/media/generate_reinforcement_learning.shend-to-end with OVRTX and inspected the generated GIF.Checklist
pre-commitchecks withuv run isaaclab -fsource/<pkg>/changelog.d/for every touched package (no source packages touched)CONTRIBUTORS.mdor my name already exists there