add h1_2 task

This commit is contained in:
craipy 2024-07-18 16:39:31 +08:00
parent 8000dff697
commit ad6a04aa8a
3 changed files with 149 additions and 2 deletions

View File

@ -1,13 +1,14 @@
from legged_gym import LEGGED_GYM_ROOT_DIR, LEGGED_GYM_ENVS_DIR from legged_gym import LEGGED_GYM_ROOT_DIR, LEGGED_GYM_ENVS_DIR
from legged_gym.envs.go2.go2_config import GO2RoughCfg, GO2RoughCfgPPO from legged_gym.envs.go2.go2_config import GO2RoughCfg, GO2RoughCfgPPO
from legged_gym.envs.h1.h1_config import H1RoughCfg, H1RoughCfgPPO from legged_gym.envs.h1.h1_config import H1RoughCfg, H1RoughCfgPPO
from legged_gym.envs.h1_2.h1_2_config import H1_2RoughCfg, H1_2RoughCfgPPO
from legged_gym.envs.g1.g1_config import G1RoughCfg, G1RoughCfgPPO from legged_gym.envs.g1.g1_config import G1RoughCfg, G1RoughCfgPPO
from .base.legged_robot import LeggedRobot from .base.legged_robot import LeggedRobot
from legged_gym.utils.task_registry import task_registry from legged_gym.utils.task_registry import task_registry
task_registry.register( "go2", LeggedRobot, GO2RoughCfg(), GO2RoughCfgPPO()) task_registry.register( "go2", LeggedRobot, GO2RoughCfg(), GO2RoughCfgPPO())
task_registry.register( "h1", LeggedRobot, H1RoughCfg(), H1RoughCfgPPO()) task_registry.register( "h1", LeggedRobot, H1RoughCfg(), H1RoughCfgPPO())
task_registry.register( "h1_2", LeggedRobot, H1_2RoughCfg(), H1_2RoughCfgPPO())
task_registry.register( "g1", LeggedRobot, G1RoughCfg(), G1RoughCfgPPO()) task_registry.register( "g1", LeggedRobot, G1RoughCfg(), G1RoughCfgPPO())

View File

@ -0,0 +1,25 @@
# H1_2 RL Example (Preview)
## Simplified URDF
This task utilizes a simplified version of URDF. We fix some joints and ignore most of the collisions.
### Fixed Joints
We fix all the joints in the hands, wrists and the elbow roll joints, since those joints have very limited effect on the whole body dynamics and are commonly controlled by other controllers.
### Collisions
We only keep the collision of foot roll links, knee links and the base. Early termination is majorly checked by the angular position of the base.
## Dynamics
Free "light" end effectors can lead to unstable simulation. Thus please be carefull with the control parameters for the joints that may affect such end effectors.
## Results
https://github.com/user-attachments/assets/a937e9c4-fe91-4240-88ea-d83b0160cad5
## Preview Stage
**The reward functions are not well tuned and cannot produce satisfactory results at the current stage. A feasible version is comming soon.**

View File

@ -0,0 +1,121 @@
from legged_gym.envs.base.legged_robot_config import LeggedRobotCfg, LeggedRobotCfgPPO
class H1_2RoughCfg(LeggedRobotCfg):
class init_state(LeggedRobotCfg.init_state):
pos = [0.0, 0.0, 1.0] # x,y,z [m]
default_joint_angles = { # = target angles [rad] when action = 0.0
'left_hip_yaw_joint': 0,
'left_hip_roll_joint': 0,
'left_hip_pitch_joint': -0.6,
'left_knee_joint': 1.2,
'left_ankle_pitch_joint': -0.6,
'left_ankle_roll_joint': 0.0,
'right_hip_yaw_joint': 0,
'right_hip_roll_joint': 0,
'right_hip_pitch_joint': -0.6,
'right_knee_joint': 1.2,
'right_ankle_pitch_joint': -0.6,
'right_ankle_roll_joint': 0.0,
'torso_joint': 0,
'left_shoulder_pitch_joint': 0.4,
'left_shoulder_roll_joint': 0,
'left_shoulder_yaw_joint': 0,
'left_elbow_pitch_joint': 0.3,
'right_shoulder_pitch_joint': 0.4,
'right_shoulder_roll_joint': 0,
'right_shoulder_yaw_joint': 0,
'right_elbow_pitch_joint': 0.3,
}
class env(LeggedRobotCfg.env):
num_actions = 21
num_observations = 12 + num_actions * 3
num_envs = 8192
class control(LeggedRobotCfg.control):
# PD Drive parameters:
control_type = 'P'
# PD Drive parameters:
stiffness = {
'hip_yaw_joint': 200.,
'hip_roll_joint': 200.,
'hip_pitch_joint': 200.,
'knee_joint': 300.,
'ankle_pitch_joint': 60.,
'ankle_roll_joint': 40.,
'torso_joint': 600.,
'shoulder_pitch_joint': 80.,
'shoulder_roll_joint': 80.,
'shoulder_yaw_joint': 40.,
'elbow_pitch_joint': 60.,
} # [N*m/rad]
damping = {
'hip_yaw_joint': 5.0,
'hip_roll_joint': 5.0,
'hip_pitch_joint': 5.0,
'knee_joint': 7.5,
'ankle_pitch_joint': 1.0,
'ankle_roll_joint': 0.3,
'torso_joint': 15.0,
'shoulder_pitch_joint': 2.0,
'shoulder_roll_joint': 2.0,
'shoulder_yaw_joint': 1.0,
'elbow_pitch_joint': 1.0,
} # [N*m/rad] # [N*m*s/rad]
# action scale: target angle = actionScale * action + defaultAngle
action_scale = 0.25
# decimation: Number of control action updates @ sim DT per policy DT
decimation = 10
class asset(LeggedRobotCfg.asset):
file = '{LEGGED_GYM_ROOT_DIR}/resources/robots/h1_2/h1_2_simplified.urdf'
name = "h1_2"
foot_name = "ankle_roll"
penalize_contacts_on = []
terminate_after_contacts_on = []
self_collisions = 1 # 1 to disable, 0 to enable...bitwise filter
flip_visual_attachments = False
armature = 6e-4 # stablize semi-euler integration for end effectors
class sim(LeggedRobotCfg.sim):
dt = 0.002 # stablize semi-euler integration for end effectors
class rewards(LeggedRobotCfg.rewards):
soft_dof_pos_limit = 0.9
base_height_target = 0.98
class scales(LeggedRobotCfg.rewards.scales):
tracking_lin_vel = 1.0
tracking_ang_vel = 0.5
lin_vel_z = -0.2
ang_vel_xy = -0.1
orientation = -0.1
base_height = -10.0
dof_acc = -3.5e-9
feet_air_time = 1.0
collision = 0.0
action_rate = -0.001
torques = 0.0
dof_pos_limits = -1.0
only_positive_rewards = False # if true negative total rewards are clipped at zero (avoids early termination problems)
class normalization(LeggedRobotCfg.normalization):
clip_actions = 10.0
class H1_2RoughCfgPPO(LeggedRobotCfgPPO):
class policy(LeggedRobotCfgPPO.policy):
init_noise_std = 0.3
activation = 'tanh'
class runner(LeggedRobotCfgPPO.runner):
run_name = ''
experiment_name = 'h1_2'