-
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
Changes from 16 commits
1fdc9c5
a980b11
ac2161b
158faa2
182ac16
00a8aaf
dd63da6
b647491
94d6aab
66e1743
0d51e76
8c45882
a9ab009
7681c6b
4349142
eb559cc
53c4155
41354da
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,170 @@ | ||||||||
| # Copyright (c) 2022-2025, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md). | ||||||||
| # All rights reserved. | ||||||||
| # | ||||||||
| # SPDX-License-Identifier: BSD-3-Clause | ||||||||
|
|
||||||||
| """Configuration of OpenArm robots. | ||||||||
| The following configurations are available: | ||||||||
| * :obj:`OPENARM_BI_CFG`: OpenArm robot with two arms. | ||||||||
| * :obj:`OPENARM_BI_HIGH_PD_CFG`: OpenArm robot with two arms and stiffer PD control. | ||||||||
| * :obj:`OPENARM_UNI_CFG`: OpenArm robot with one arm. | ||||||||
| * :obj:`OPENARM_UNI_HIGH_PD_CFG`: OpenArm robot with one arm and stiffer PD control. | ||||||||
| Reference: https://github.com/enactic/openarm_isaac_lab | ||||||||
| 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 | ||||||||
|
|
||||||||
| import isaaclab.sim as sim_utils | ||||||||
| from isaaclab.actuators import ImplicitActuatorCfg | ||||||||
| from isaaclab.assets.articulation import ArticulationCfg | ||||||||
|
|
||||||||
| OPENARM_BI_CFG = ArticulationCfg( | ||||||||
| spawn=sim_utils.UsdFileCfg( | ||||||||
| usd_path=f"{OPENARM_ROOT_DIR}/usds/openarm_bimanual/openarm_bimanual.usd", | ||||||||
| rigid_props=sim_utils.RigidBodyPropertiesCfg( | ||||||||
| disable_gravity=False, | ||||||||
| max_depenetration_velocity=5.0, | ||||||||
| ), | ||||||||
| articulation_props=sim_utils.ArticulationRootPropertiesCfg( | ||||||||
| enabled_self_collisions=False, | ||||||||
| solver_position_iteration_count=8, | ||||||||
| solver_velocity_iteration_count=0, | ||||||||
| ), | ||||||||
| ), | ||||||||
| init_state=ArticulationCfg.InitialStateCfg( | ||||||||
| joint_pos={ | ||||||||
| "openarm_left_joint1": 0.0, | ||||||||
| "openarm_left_joint2": 0.0, | ||||||||
| "openarm_left_joint3": 0.0, | ||||||||
| "openarm_left_joint4": 0.0, | ||||||||
| "openarm_left_joint5": 0.0, | ||||||||
| "openarm_left_joint6": 0.0, | ||||||||
| "openarm_left_joint7": 0.0, | ||||||||
| "openarm_right_joint1": 0.0, | ||||||||
| "openarm_right_joint2": 0.0, | ||||||||
| "openarm_right_joint3": 0.0, | ||||||||
| "openarm_right_joint4": 0.0, | ||||||||
| "openarm_right_joint5": 0.0, | ||||||||
| "openarm_right_joint6": 0.0, | ||||||||
| "openarm_right_joint7": 0.0, | ||||||||
| "openarm_left_finger_joint.*": 0.0, | ||||||||
| "openarm_right_finger_joint.*": 0.0, | ||||||||
| }, | ||||||||
| ), | ||||||||
| actuators={ | ||||||||
| "openarm_arm": ImplicitActuatorCfg( | ||||||||
| joint_names_expr=[ | ||||||||
| "openarm_left_joint[1-7]", | ||||||||
| "openarm_right_joint[1-7]", | ||||||||
| ], | ||||||||
| velocity_limit_sim={ | ||||||||
| "openarm_left_joint[1-2]": 2.175, | ||||||||
| "openarm_right_joint[1-2]": 2.175, | ||||||||
| "openarm_left_joint[3-4]": 2.175, | ||||||||
| "openarm_right_joint[3-4]": 2.175, | ||||||||
| "openarm_left_joint[5-7]": 2.61, | ||||||||
| "openarm_right_joint[5-7]": 2.61, | ||||||||
| }, | ||||||||
| effort_limit_sim={ | ||||||||
| "openarm_left_joint[1-2]": 40.0, | ||||||||
| "openarm_right_joint[1-2]": 40.0, | ||||||||
| "openarm_left_joint[3-4]": 27.0, | ||||||||
| "openarm_right_joint[3-4]": 27.0, | ||||||||
| "openarm_left_joint[5-7]": 7.0, | ||||||||
| "openarm_right_joint[5-7]": 7.0, | ||||||||
| }, | ||||||||
| stiffness=80.0, | ||||||||
| damping=4.0, | ||||||||
| ), | ||||||||
| "openarm_gripper": ImplicitActuatorCfg( | ||||||||
| joint_names_expr=[ | ||||||||
| "openarm_left_finger_joint.*", | ||||||||
| "openarm_right_finger_joint.*", | ||||||||
| ], | ||||||||
| velocity_limit_sim=0.2, | ||||||||
| effort_limit_sim=333.33, | ||||||||
| stiffness=2e3, | ||||||||
| damping=1e2, | ||||||||
| ), | ||||||||
| }, | ||||||||
| soft_joint_pos_limit_factor=1.0, | ||||||||
| ) | ||||||||
| """Configuration of OpenArm Bimanual robot.""" | ||||||||
|
|
||||||||
| OPENARM_UNI_CFG = ArticulationCfg( | ||||||||
| spawn=sim_utils.UsdFileCfg( | ||||||||
| usd_path=f"{OPENARM_ROOT_DIR}/usds/openarm_unimanual/openarm_unimanual.usd", | ||||||||
| rigid_props=sim_utils.RigidBodyPropertiesCfg( | ||||||||
| disable_gravity=False, | ||||||||
| max_depenetration_velocity=5.0, | ||||||||
| ), | ||||||||
| articulation_props=sim_utils.ArticulationRootPropertiesCfg( | ||||||||
| enabled_self_collisions=False, | ||||||||
| solver_position_iteration_count=8, | ||||||||
| solver_velocity_iteration_count=0, | ||||||||
| ), | ||||||||
| ), | ||||||||
| init_state=ArticulationCfg.InitialStateCfg( | ||||||||
| joint_pos={ | ||||||||
| "openarm_joint1": 1.57, | ||||||||
| "openarm_joint2": 0.0, | ||||||||
| "openarm_joint3": -1.57, | ||||||||
| "openarm_joint4": 1.57, | ||||||||
| "openarm_joint5": 0.0, | ||||||||
| "openarm_joint6": 0.0, | ||||||||
| "openarm_joint7": 0.0, | ||||||||
| "openarm_finger_joint.*": 0.044, | ||||||||
| }, | ||||||||
| ), | ||||||||
| actuators={ | ||||||||
| "openarm_arm": ImplicitActuatorCfg( | ||||||||
| joint_names_expr=["openarm_joint[1-7]"], | ||||||||
| velocity_limit_sim={ | ||||||||
| "openarm_joint[1-2]": 2.175, | ||||||||
| "openarm_joint[3-4]": 2.175, | ||||||||
| "openarm_joint[5-7]": 2.61, | ||||||||
| }, | ||||||||
| effort_limit_sim={ | ||||||||
| "openarm_joint[1-2]": 40.0, | ||||||||
| "openarm_joint[3-4]": 27.0, | ||||||||
| "openarm_joint[5-7]": 7.0, | ||||||||
| }, | ||||||||
| stiffness=80.0, | ||||||||
| damping=4.0, | ||||||||
| ), | ||||||||
| "openarm_gripper": ImplicitActuatorCfg( | ||||||||
| joint_names_expr=["openarm_finger_joint.*"], | ||||||||
| velocity_limit_sim=0.2, | ||||||||
| effort_limit_sim=333.33, | ||||||||
| stiffness=2e3, | ||||||||
| damping=1e2, | ||||||||
| ), | ||||||||
| }, | ||||||||
| soft_joint_pos_limit_factor=1.0, | ||||||||
| ) | ||||||||
| """Configuration of OpenArm Unimanual robot.""" | ||||||||
|
|
||||||||
| OPENARM_BI_HIGH_PD_CFG = OPENARM_BI_CFG.copy() | ||||||||
| OPENARM_BI_HIGH_PD_CFG.spawn.rigid_props.disable_gravity = True | ||||||||
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_arm"].stiffness = 400.0 | ||||||||
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_arm"].damping = 80.0 | ||||||||
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].stiffness = 2e3 | ||||||||
| OPENARM_BI_HIGH_PD_CFG.actuators["openarm_gripper"].damping = 1e2 | ||||||||
|
Comment on lines
+156
to
+157
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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.
Suggested change
|
||||||||
| """Configuration of OpenArm Bimanual robot with stiffer PD control. | ||||||||
| This configuration is useful for task-space control using differential IK. | ||||||||
| """ | ||||||||
|
|
||||||||
| OPENARM_UNI_HIGH_PD_CFG = OPENARM_UNI_CFG.copy() | ||||||||
| OPENARM_UNI_HIGH_PD_CFG.spawn.rigid_props.disable_gravity = True | ||||||||
| OPENARM_UNI_HIGH_PD_CFG.actuators["openarm_arm"].stiffness = 400.0 | ||||||||
| OPENARM_UNI_HIGH_PD_CFG.actuators["openarm_arm"].damping = 80.0 | ||||||||
| """Configuration of OpenArm Unimanual robot with stiffer PD control. | ||||||||
| This configuration is useful for task-space control using differential IK. | ||||||||
| """ | ||||||||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,6 +1,25 @@ | ||||||
| Changelog | ||||||
| --------- | ||||||
|
|
||||||
| 0.11.10 (2025-11-26) | ||||||
| ~~~~~~~~~~~~~~~~~~~ | ||||||
|
|
||||||
| Added | ||||||
| ^^^^^ | ||||||
|
|
||||||
| * Added reaching task environments for OpenArm unimanual robot: | ||||||
| * :class:`OpenArmReachEnvCfg`; Gym ID ``Isaac-Reach-OpenArm-v0``. | ||||||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``OpenArmReachEnvCfg_PLAY``. | ||||||
|
||||||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``OpenArmReachEnvCfg_PLAY``. | |
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``Isaac-Reach-OpenArm-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?
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?