-
Notifications
You must be signed in to change notification settings - Fork 2.8k
Adds 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
Changes from all commits
1fdc9c5
a980b11
ac2161b
158faa2
182ac16
00a8aaf
dd63da6
b647491
94d6aab
66e1743
0d51e76
8c45882
a9ab009
7681c6b
4349142
eb559cc
53c4155
41354da
41341df
c1379ca
ed0ddb2
6f6efe6
3634e4a
d7ff33a
18e44c9
9c789e3
80bb6be
c1e884a
1770886
57aa239
6ec29cc
baf699a
65762bb
0f1391d
8cd7c41
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,173 @@ | ||||||||
| # 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. | ||||||||
|
|
||||||||
| References: | ||||||||
| OpenArm repositories: | ||||||||
| * https://github.com/enactic/openarm | ||||||||
| * https://github.com/enactic/openarm_isaac_lab | ||||||||
|
|
||||||||
| Motor spec sheets: | ||||||||
| * Joint 1–2 (DM-J8009P-2EC): | ||||||||
| https://cdn.shopify.com/s/files/1/0673/6848/5000/files/DM-J8009P-2EC_User_Manual.pdf?v=1755481750 | ||||||||
| * Joint 3–4 (DM-J4340P-2EC / DM-J4340-2EC): | ||||||||
| https://cdn.shopify.com/s/files/1/0673/6848/5000/files/DM-J4340-2EC_User_Manual.pdf?v=1756883905 | ||||||||
| * Joint 5–8 (DM-J4310-2EC V1.1): | ||||||||
| https://files.seeedstudio.com/products/Damiao/DM-J4310-en.pdf | ||||||||
| """ | ||||||||
|
|
||||||||
| import isaaclab.sim as sim_utils | ||||||||
| from isaaclab.actuators import ImplicitActuatorCfg | ||||||||
| from isaaclab.assets.articulation import ArticulationCfg | ||||||||
| from isaaclab.utils.assets import ISAAC_NUCLEUS_DIR | ||||||||
|
|
||||||||
| OPENARM_BI_CFG = ArticulationCfg( | ||||||||
| spawn=sim_utils.UsdFileCfg( | ||||||||
| usd_path=f"{ISAAC_NUCLEUS_DIR}/Robots/OpenArm/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_joint.*": 0.0, | ||||||||
| "openarm_right_joint.*": 0.0, | ||||||||
| "openarm_left_finger_joint.*": 0.0, | ||||||||
| "openarm_right_finger_joint.*": 0.0, | ||||||||
| }, | ||||||||
| ), | ||||||||
| # spec sheet for reference | ||||||||
| # DM-J8009P-2EC (Joint 1, 2): | ||||||||
| # https://cdn.shopify.com/s/files/1/0673/6848/5000/files/DM-J8009P-2EC_User_Manual.pdf?v=1755481750 | ||||||||
| # DM-J4340P-2EC, DM-J4340-2EC (Joint 3, 4): | ||||||||
| # https://cdn.shopify.com/s/files/1/0673/6848/5000/files/DM-J4340-2EC_User_Manual.pdf?v=1756883905 | ||||||||
| # DM-J4310-2EC V1.1 (Joint 5, 6, 7, 8): | ||||||||
| # https://files.seeedstudio.com/products/Damiao/DM-J4310-en.pdf | ||||||||
| 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( | ||||||||
|
Collaborator
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. If these value are taken from actuator spec, please attach the spec link here so other people can verify and validate as well : ))
Contributor
Author
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. Here are the links for your reference.
Collaborator
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. rated rpm in DM-J8009P-2EC (Joint 1, 2): https://cdn.shopify.com/s/files/1/0673/6848/5000/files/DM-J8009P-2EC_User_Manual.pdf?v=1755481750 seems like 100 rpm, convert that to rad/s is 10.472 rad/s ? or is that not working very well with training. While it is nice to match real hardware, It is not necessary to match exactly for all practical reasons, if you think this change is necessary for sim, we are also happy with current value, thanks!
Contributor
Author
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. Yes, that’s correct! We are aware that the current specification does not fully match the real motor’s rated performance. However, for both training stability in simulation and safety during sim-to-real deployment, we intentionally set the velocity limits lower than the actual hardware capabilities. With this configuration, we have already completed sim-to-real testing and confirmed that the system performs reliably. Going forward, we plan to conduct additional experiments to identify a safe value that is closer to the real hardware, and we will update the configuration accordingly. We will also submit a PR once that work is completed. Thank you!
Collaborator
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. sounds great!! |
||||||||
| 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"{ISAAC_NUCLEUS_DIR}/Robots/OpenArm/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
+159
to
+160
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,26 @@ | ||
| Changelog | ||
| --------- | ||
|
|
||
| 0.11.11 (2025-12-16) | ||
| ~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
| Added | ||
| ^^^^^ | ||
|
|
||
| * Added reaching task environments for OpenArm unimanual robot: | ||
| * :class:`OpenArmReachEnvCfg`; Gym ID ``Isaac-Reach-OpenArm-v0``. | ||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``Isaac-Reach-OpenArm-Play-v0``. | ||
| * Added lifting a cube task environments for OpenArm unimanual robot: | ||
| * :class:`OpenArmCubeLiftEnvCfg`; Gym ID ``Isaac-Lift-Cube-OpenArm-v0``. | ||
| * :class:`OpenArmCubeLiftEnvCfg_PLAY`; Gym ID ``Isaac-Lift-Cube-OpenArm-Play-v0``. | ||
| * Added opening a drawer task environments for OpenArm unimanual robot: | ||
| * :class:`OpenArmCabinetEnvCfg`; Gym ID ``Isaac-Open-Drawer-OpenArm-v0``. | ||
| * :class:`OpenArmCabinetEnvCfg_PLAY`; Gym ID ``Isaac-Open-Drawer-OpenArm-Play-v0``. | ||
| * Added reaching task environments for OpenArm bimanual robot: | ||
| * :class:`OpenArmReachEnvCfg`; Gym ID ``Isaac-Reach-OpenArm-Bi-v0``. | ||
| * :class:`OpenArmReachEnvCfg_PLAY`; Gym ID ``Isaac-Reach-OpenArm-Bi-Play-v0``. | ||
|
Comment on lines
+20
to
+21
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. 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? |
||
|
|
||
|
|
||
| 0.11.10 (2025-12-13) | ||
| ~~~~~~~~~~~~~~~~~~~~ | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,38 @@ | ||
| # 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 | ||
|
|
||
| import gymnasium as gym | ||
|
|
||
| from . import agents | ||
|
|
||
| ## | ||
| # Register Gym environments. | ||
| ## | ||
|
|
||
| ## | ||
| # Joint Position Control | ||
| ## | ||
|
|
||
| gym.register( | ||
| id="Isaac-Open-Drawer-OpenArm-v0", | ||
| entry_point="isaaclab.envs:ManagerBasedRLEnv", | ||
| kwargs={ | ||
| "env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:OpenArmCabinetEnvCfg", | ||
| "rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:OpenArmCabinetPPORunnerCfg", | ||
| "rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_ppo_cfg.yaml", | ||
| }, | ||
| disable_env_checker=True, | ||
| ) | ||
|
|
||
| gym.register( | ||
| id="Isaac-Open-Drawer-OpenArm-Play-v0", | ||
| entry_point="isaaclab.envs:ManagerBasedRLEnv", | ||
| kwargs={ | ||
| "env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:OpenArmCabinetEnvCfg_PLAY", | ||
| "rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:OpenArmCabinetPPORunnerCfg", | ||
| "rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_ppo_cfg.yaml", | ||
| }, | ||
| disable_env_checker=True, | ||
| ) |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,4 @@ | ||
| # 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 |
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.