add h1_2 task
This commit is contained in:
parent
8000dff697
commit
ad6a04aa8a
|
@ -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())
|
||||||
|
|
||||||
|
|
|
@ -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.**
|
|
@ -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'
|
Loading…
Reference in New Issue