-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Add OpenArm environments #4089
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Add OpenArm environments #4089
Conversation
Greptile OverviewGreptile SummaryThis PR introduces comprehensive support for OpenArm robots to Isaac Lab, adding four new manipulation environments across three different task types. The implementation includes OpenArm bimanual reach, unimanual reach, unimanual lift-cube, and unimanual cabinet drawer opening tasks. Each environment is configured with full reinforcement learning agent support for three frameworks (RSL-RL, RL Games, and SKRL). The PR follows Isaac Lab's established patterns by creating robot-specific configuration directories under each manipulation task, similar to existing Franka and UR10 implementations. The OpenArm robot assets are loaded from an external repository ( Key additions include robot articulation configurations for both unimanual and bimanual variants with high-PD control options, environment-specific configurations with OpenArm joint naming conventions, comprehensive agent configurations for all supported RL frameworks, and proper documentation updates including changelog entries and environment overview tables. Important Files Changed
Confidence score: 3/5
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Additional Comments (1)
-
source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation/reach/config/openarm/bimanual/agents/__init__.py, line 1-5 (link)logic: This agents
__init__.pyfile is empty and doesn't follow the pattern established by similar files like the ur_10 agents configuration. It should likely import agent configurations and define entry points for RL frameworks. Is this file intentionally empty, or should it contain agent configuration imports similar to the ur_10 agents__init__.py?
36 files reviewed, 7 comments
| time_limit_bootstrap: False | ||
| # logging and checkpoint | ||
| experiment: | ||
| directory: "openarm_lift" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Directory name uses snake_case while other similar configs use kebab-case (e.g., 'lift-cube-franka'). Should this follow the naming convention used in other experiment directories?
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| Please `git clone https://github.com/enactic/openarm_isaac_lab` and `export PYTHONPATH=$PYTHONPATH:~/openarm_isaac_lab` to use these configurations. | ||
| """ | ||
|
|
||
| from source.openarm.openarm.tasks.manager_based.openarm_manipulation import OPENARM_ROOT_DIR |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Importing from external repository creates fragile dependency - users must manually clone and configure PYTHONPATH. Consider error handling if import fails. Should there be a fallback or error handling if the external repository is not available?
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].stiffness = 2e3 | ||
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].damping = 1e2 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: High PD configuration sets same stiffness/damping values as base config for gripper actuators, making these lines redundant.
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].stiffness = 2e3 | |
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].damping = 1e2 | |
| # Remove redundant lines since gripper values are already the same in base config |
|
|
||
| * Added reaching task environments for OpenArm unimanual robot: | ||
| * :class:`OpenArmReachEnvCfg`; Gym ID ``Isaac-Reach-OpenArm-v0``. | ||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``OpenArmReachEnvCfg_PLAY``. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
syntax: Gym ID should be Isaac-Reach-OpenArm-Play-v0 not OpenArmReachEnvCfg_PLAY to match the pattern used in other PLAY environments
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``OpenArmReachEnvCfg_PLAY``. | |
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``Isaac-Reach-OpenArm-Play-v0``. |
| * :class:`OpenArmReachEnvCfg`; Gym ID ``Isaac-Reach-OpenArm-Bi-v0``. | ||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``Isaac-Reach-OpenArm-Bi-Play-v0``. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
logic: Class name appears to be duplicated from line 11 - should these be distinct bimanual class names? Are the bimanual environments using different class names than the unimanual ones?
| joint_names=[ | ||
| "openarm_joint1", | ||
| "openarm_joint2", | ||
| "openarm_joint3", | ||
| "openarm_joint4", | ||
| "openarm_joint5", | ||
| "openarm_joint6", | ||
| "openarm_joint7", | ||
| ], |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
style: Joint names are hardcoded and repeated multiple times throughout the file. Consider defining them as a constant or class attribute to reduce duplication and improve maintainability.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
Description
Added the OpenArm assets to
IsaacLab/source/isaaclab_assets/isaaclab_assets/robots.These assets include configurations for the OpenArm unimanual and bimanual models.
Added the following four environments to
IsaacLab/source/isaaclab_tasks/isaaclab_tasks/manager_based/manipulation:Added the changelog entry for the OpenArm environments and updated
extension.tomlunderIsaacLab/source/isaaclab_tasks/docs.Added the OpenArm environments to
IsaacLab/docs/source/overview/environments.rst.The unit tests are as follows:
You can run different tasks and policies.
Isaac-Reach-OpenArm-Bi-v0rsl_rl,rl_games,skrlIsaac-Reach-OpenArm-v0rsl_rl,rl_games,skrlIsaac-Lift-Cube-OpenArm-v0rsl_rl,rl_games,skrlIsaac-Open-Drawer-OpenArm-v0rsl_rl,rl_games,skrlType of change
Screenshots
Reach target position (Bimanual)
Screencast.from.11-27-2025.03.54.44.PM.webm
Reach target position
Screencast.from.11-27-2025.03.51.36.PM.webm
Lift a cube
Screencast.from.11-27-2025.03.53.04.PM.webm
Open a cabinet's drawer
Screencast.from.11-27-2025.03.53.54.PM.webm
Checklist
pre-commitchecks with./isaaclab.sh --formatconfig/extension.tomlfileCONTRIBUTORS.mdor my name already exists there