feat(ur5_ws): Add UR5e bringup, Isaac Sim, and Isaac Lab support - #120
feat(ur5_ws): Add UR5e bringup, Isaac Sim, and Isaac Lab support#120stanl1y wants to merge 2 commits into
Conversation
- Enable Isaac Sim 5.1.0 and Isaac Lab 2.3.2 in compose.yaml
- Add ur5e_bringup.sh and ur5e_calibration.sh
- Add scripts/isaac/{spawn_ur.py,ur_isaaclab_minimal.py} examples
- Add isaac_sim_ur5.sh / isaac_sim_ur5e.sh / isaac_lab_ur_minimal.sh wrappers
- Document Isaac Sim, Isaac Lab, and UR5e usage in docs/ur5-ws/index.md
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
End-to-end test on winnie (docker compose build success, image ran
on RTX 4090) revealed two bugs in the Isaac Lab scaffold:
1. InteractiveSceneCfg fields must be AssetBaseCfg-wrapped, not raw
spawn configs. Was:
ground = sim_utils.GroundPlaneCfg()
light = sim_utils.DomeLightCfg(...)
These crashed at scene init:
ValueError: Unknown asset config type for ground: GroundPlaneCfg(...)
Fix: wrap each in AssetBaseCfg(prim_path=..., spawn=...) per the
Isaac Lab idiom.
2. Sim loop ran forever (no exit condition). Added --steps argument
matching spawn_ur.py's pattern; default 0 keeps the loop infinite
for interactive use, positive value exits after N steps for CI /
headless smoke tests.
Verified on winnie:
docker run ... --gpus all j3soon/ros2-ur5-ws:latest bash -c \
'./scripts/isaac_sim_ur5e.sh --headless --steps 10'
-> Simulation App Startup Complete, UR5E loaded at /World/UR5E/...,
clean shutdown.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
WalkthroughThis PR adds UR5e support to the ros2-essentials workspace alongside Isaac Sim and Isaac Lab simulation capabilities. Changes include Docker version configuration for Isaac tools, Python scripts for spawning robots in simulation, bash launchers, ROS 2 calibration/bringup workflows, and updated documentation across all layers. ChangesUR5e and Isaac Sim/Lab Integration
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@ur5_ws/scripts/isaac/README.md`:
- Around line 30-32: The fenced code block containing the path string
"$ISAACLAB_PATH/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/config/ur_10/"
is missing a language tag; update the fence from "```" to include a language
identifier (e.g., "```text" or "```bash") so the block becomes "```text"
followed by the path and a closing "```" to satisfy markdownlint MD040.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3c368bac-973b-4184-b8d4-c5d1b0ab3fec
📒 Files selected for processing (10)
docs/ur5-ws/index.mdur5_ws/docker/compose.yamlur5_ws/scripts/isaac/README.mdur5_ws/scripts/isaac/spawn_ur.pyur5_ws/scripts/isaac/ur_isaaclab_minimal.pyur5_ws/scripts/isaac_lab_ur_minimal.shur5_ws/scripts/isaac_sim_ur5.shur5_ws/scripts/isaac_sim_ur5e.shur5_ws/scripts/ur5e_bringup.shur5_ws/scripts/ur5e_calibration.sh
| ``` | ||
| $ISAACLAB_PATH/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/config/ur_10/ | ||
| ``` |
There was a problem hiding this comment.
Add a language tag to the fenced code block.
The fence starting on Line 30 has no language, which triggers markdownlint MD040.
Suggested fix
-```
+```text
$ISAACLAB_PATH/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/config/ur_10/</details>
<!-- suggestion_start -->
<details>
<summary>📝 Committable suggestion</summary>
> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
```suggestion
🧰 Tools
🪛 markdownlint-cli2 (0.22.1)
[warning] 30-30: Fenced code blocks should have a language specified
(MD040, fenced-code-language)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@ur5_ws/scripts/isaac/README.md` around lines 30 - 32, The fenced code block
containing the path string
"$ISAACLAB_PATH/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/config/ur_10/"
is missing a language tag; update the fence from "```" to include a language
identifier (e.g., "```text" or "```bash") so the block becomes "```text"
followed by the path and a closing "```" to satisfy markdownlint MD040.
|
First of all, thank you for putting together this minimal pipeline for the UR5/UR5e in Isaac Sim / Isaac Lab! I was able to successfully run it on my local machine. However, I do have a few questions I'd like to clarify:
|
|
I have put together a simple demo pipeline that connects Isaac Sim with our existing ROS 2 pipeline using OmniGraph. The result is shown below: isaacsim-omnigraph-ros.mp4We can now control the simulated UR5e inside Isaac Sim using our original control methods. The entire architecture remains almost identical to working with the actual UR5e hardware, with the only change being replacing the UR5e driver with Isaac Sim. I believe this approach to using Isaac Sim might be more practical/helpful. However, this is just based on my own use case, so I'm not sure if you have similar requirements. As a side note, the control demonstrated in the video uses a 3D SpaceMouse, which also runs entirely on the ROS 2 pipeline. I can contribute and integrate this part as well later on. |
Summary
ur5_ws/docker/compose.yaml(uncomment the two version build args that were pre-staged but disabled).
ur5e_bringup.sh,ur5e_calibration.sh) mirroring the existing UR5 ones.ur5_ws/scripts/isaac/:spawn_ur.py— Isaac Sim standalone, loads UR5/UR5e from bundledIsaac Robots assets, runs physics, supports
--ur_type {ur5,ur5e},--headless,--steps.ur_isaaclab_minimal.py— Isaac Lab scaffold usingInteractiveSceneCfg+ArticulationCfg+AssetBaseCfg-wrappedground plane / dome light.
isaac_sim_ur5.sh,isaac_sim_ur5e.sh,isaac_lab_ur_minimal.sh.docs/ur5-ws/index.mdwith UR5e bringup variant, Isaac Simsection, Isaac Lab section, cross-link to
so101_wsfor X11 caveats.Test plan
End-to-end smoke-tested on Ubuntu 22.04 + RTX 4090 + docker:
./tests/test_all.shpassesdocker compose build ur5-wssucceeds with Isaac flags uncommentedur_controllers, ur_dashboard_msgs, ur_description, ur_moveit_config,
ur_msgs, ur_robot_driver)
/home/user/isaacsim/python.shand/home/user/IsaacLab/isaaclab.shresolve inside the image
./scripts/isaac_sim_ur5e.sh --headless --steps 10→"Simulation App Startup Complete", UR5E loaded at
/World/UR5E/...,clean shutdown
./scripts/isaac_lab_ur_minimal.sh --ur_type ur5e --headlessinitializes InteractiveScene without ValueError, Vulkan picks up GPU
Notes
Universal_Robots_ROS2_Descriptionalready includes per-variantconfigs for UR5e — no submodule update needed.
so101_wsparadigm; same X11 desktop assumptions.Summary by CodeRabbit
Documentation
New Features