[release/3.0.0-beta2] Fix AutoMate PhysX sizing and assembly ID validation#6048
Conversation
(cherry picked from commit 8feda53)
There was a problem hiding this comment.
🤖 IsaacLab Review Bot — PR #6048
Summary
Cherry-pick of #6038 into release/3.0.0-beta2. Two fixes:
- PhysX GPU collision stack sizing: Adds
gpu_collision_stack_size=2**27to both assembly and disassembly env configs - Assembly ID placeholder validation: Rejects the literal
ASSEMBLY_IDplaceholder string before launching simulation
✅ Findings
| # | Category | Status | Notes |
|---|---|---|---|
| 1 | Correctness | ✅ | 2**27 (128 MiB) collision stack is appropriate for complex contact-heavy assembly tasks at 128 envs |
| 2 | Consistency | ✅ | Both assembly_env_cfg.py and disassembly_env_cfg.py updated identically |
| 3 | Validation | ✅ | parser.error() is the correct argparse pattern — prints usage and exits with code 2 |
| 4 | Error message | ✅ | Provides example assembly ID (00032) for user guidance |
| 5 | Changelog | ✅ | Fragment present at changelog.d/fix-automate-collision-stack.rst |
| 6 | CI | ⏳ | pre-commit ✅, Build Wheel ✅, installation tests pending |
💡 Minor Observations (non-blocking)
- The validation only catches the exact string
"ASSEMBLY_ID". If a user passes an empty string or whitespace, it would still proceed. Consider adding a regex check (e.g.,r"^\d{5}$") for stricter validation in a future iteration. - The PR body references #6038 but the title also mentions #6039 — the actual commit only cherry-picks from #6038. Title is slightly misleading but acceptable for a release branch backport.
Verdict: LGTM ✅
Clean, minimal cherry-pick. Both fixes are well-scoped and correctly applied. No concerns for merge.
Greptile SummaryThis cherry-pick from
Confidence Score: 4/5Safe to merge; changes are small and targeted with no cross-cutting impact. Both fixes are minimal and well-scoped. The gpu_collision_stack_size addition is a one-liner mirrored identically across the two env configs. The placeholder guard fires early and uses parser.error correctly. The one rough edge is in run_w_id.py: --assembly_id has no default and is not required, so omitting the flag entirely lets None reach update_task_param undetected by the new check. run_w_id.py — the --assembly_id argument lacks a default and required=True, so the new placeholder check can be bypassed when the flag is omitted entirely. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A([User invokes run script]) --> B[parse_args]
B --> C{assembly_id == ASSEMBLY_ID?}
C -- Yes --> D[parser.error: exit with message]
C -- No --> E[update_task_param writes ID into cfg file]
E --> F[subprocess runs isaaclab.sh train/play]
F --> G([Simulation starts with PhysX gpu_collision_stack_size = 2 pow 27])
Reviews (1): Last reviewed commit: "Fix AutoMate PhysX collision stack sizin..." | Re-trigger Greptile |
| if args.assembly_id == "ASSEMBLY_ID": | ||
| parser.error("replace ASSEMBLY_ID with an AutoMate assembly ID, for example 00032") |
There was a problem hiding this comment.
Missing
None guard alongside the placeholder check
--assembly_id has no default value and is not marked required=True, so when a caller omits the flag entirely args.assembly_id is None. None != "ASSEMBLY_ID" is True, so the new validation passes silently and update_task_param receives None as the ID — causing the string literal 'None' to be written into the config file. Adding an is None check (or required=True on the argument) would close this gap alongside the placeholder guard.
Summary
Validation