Skip to content

Commit 7278063

Browse files
authored
Merge pull request #60 from MuammerBay/feat/reach-task-new-asset
Adds reach task for new asset
2 parents efdda2f + 10f4d7c commit 7278063

4 files changed

Lines changed: 114 additions & 1 deletion

File tree

source/SO_100/SO_100/tasks/lift/joint_pos_env_cfg.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525

2626
from isaaclab.markers.config import FRAME_MARKER_CFG # isort: skip
2727

28+
# ----------------------------------------------------------------
29+
# --------------- LycheeAI live asset ----------------------------
30+
# ----------------------------------------------------------------
31+
2832

2933
@configclass
3034
class SoArm100LiftCubeEnvCfg(LiftEnvCfg):

source/SO_100/SO_100/tasks/reach/__init__.py

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
# Register Gym environments.
1717
##
1818

19-
# Register the SO-100 Reach environment
19+
# ----------------------------------------------------------------
20+
# --------------- LycheeAI live asset ----------------------------
21+
# ----------------------------------------------------------------
22+
2023
gym.register(
2124
id="SO-ARM100-Reach-v0",
2225
entry_point="isaaclab.envs:ManagerBasedRLEnv",
@@ -38,3 +41,29 @@
3841
},
3942
disable_env_checker=True,
4043
)
44+
45+
# ----------------------------------------------------------------
46+
# --------------- ROSCON ES 2025 asset ---------------------------
47+
# ----------------------------------------------------------------
48+
49+
# Joint position controller
50+
51+
gym.register(
52+
id="SO-ARM100-Reach-ROSCON-v0",
53+
entry_point="isaaclab.envs:ManagerBasedRLEnv",
54+
kwargs={
55+
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:SoArm100ReachRosConEnvCfg",
56+
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:ReachRosConPPORunnerCfg",
57+
},
58+
disable_env_checker=True,
59+
)
60+
61+
gym.register(
62+
id="SO-ARM100-Reach-ROSCON-Play-v0",
63+
entry_point="isaaclab.envs:ManagerBasedRLEnv",
64+
kwargs={
65+
"env_cfg_entry_point": f"{__name__}.joint_pos_env_cfg:SoArm100ReachRosConEnvCfg_PLAY",
66+
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:ReachRosConPPORunnerCfg",
67+
},
68+
disable_env_checker=True,
69+
)

source/SO_100/SO_100/tasks/reach/agents/rsl_rl_ppo_cfg.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,34 @@ class ReachPPORunnerCfg(RslRlOnPolicyRunnerCfg):
4545
desired_kl=0.01,
4646
max_grad_norm=1.0,
4747
)
48+
49+
50+
@configclass
51+
class ReachRosConPPORunnerCfg(RslRlOnPolicyRunnerCfg):
52+
num_steps_per_env = 24
53+
max_iterations = 1000
54+
save_interval = 50
55+
experiment_name = "so_arm100_reach"
56+
run_name = ""
57+
resume = False
58+
empirical_normalization = False
59+
policy = RslRlPpoActorCriticCfg(
60+
init_noise_std=1.0,
61+
actor_hidden_dims=[64, 64],
62+
critic_hidden_dims=[64, 64],
63+
activation="elu",
64+
)
65+
algorithm = RslRlPpoAlgorithmCfg(
66+
value_loss_coef=1.0,
67+
use_clipped_value_loss=True,
68+
clip_param=0.2,
69+
entropy_coef=0.001,
70+
num_learning_epochs=8,
71+
num_mini_batches=4,
72+
learning_rate=1.0e-3,
73+
schedule="adaptive",
74+
gamma=0.99,
75+
lam=0.95,
76+
desired_kl=0.01,
77+
max_grad_norm=1.0,
78+
)

source/SO_100/SO_100/tasks/reach/joint_pos_env_cfg.py

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
# Scene definition
2525
##
2626

27+
# ----------------------------------------------------------------
28+
# --------------- LycheeAI live asset ----------------------------
29+
# ----------------------------------------------------------------
30+
2731

2832
@configclass
2933
class SoArm100ReachEnvCfg(ReachEnvCfg):
@@ -63,3 +67,48 @@ def __post_init__(self):
6367
self.scene.env_spacing = 2.5
6468
# disable randomization for play
6569
self.observations.policy.enable_corruption = False
70+
71+
72+
# ----------------------------------------------------------------
73+
# --------------- ROSCON ES 2025 asset ---------------------------
74+
# ----------------------------------------------------------------
75+
76+
77+
@configclass
78+
class SoArm100ReachRosConEnvCfg(ReachEnvCfg):
79+
def __post_init__(self):
80+
# post init of parent
81+
super().__post_init__()
82+
83+
# switch robot to franka
84+
self.scene.robot = SO_ARM100_ROSCON_CFG.replace(prim_path="{ENV_REGEX_NS}/Robot")
85+
# override rewards
86+
self.rewards.end_effector_position_tracking.params["asset_cfg"].body_names = ["wrist_2_link"]
87+
self.rewards.end_effector_position_tracking_fine_grained.params["asset_cfg"].body_names = ["wrist_2_link"]
88+
self.rewards.end_effector_orientation_tracking.params["asset_cfg"].body_names = ["wrist_2_link"]
89+
90+
self.rewards.end_effector_orientation_tracking.weight = 0.0
91+
92+
# override actions
93+
self.actions.arm_action = mdp.JointPositionActionCfg(
94+
asset_name="robot",
95+
joint_names=[".*"],
96+
scale=0.5,
97+
use_default_offset=True,
98+
)
99+
# override command generator body
100+
# end-effector is along z-direction
101+
self.commands.ee_pose.body_name = ["wrist_2_link"]
102+
# self.commands.ee_pose.ranges.pitch = (math.pi, math.pi)
103+
104+
105+
@configclass
106+
class SoArm100ReachRosConEnvCfg_PLAY(SoArm100ReachEnvCfg):
107+
def __post_init__(self):
108+
# post init of parent
109+
super().__post_init__()
110+
# make a smaller scene for play
111+
self.scene.num_envs = 50
112+
self.scene.env_spacing = 2.5
113+
# disable randomization for play
114+
self.observations.policy.enable_corruption = False

0 commit comments

Comments
 (0)