From 30dcc4862385d1eaabbd98c0a625cac382f03d2b Mon Sep 17 00:00:00 2001 From: Yecheng Shao Date: Wed, 17 Jul 2024 17:20:50 +0800 Subject: [PATCH] add task --- legged_gym/envs/__init__.py | 2 + legged_gym/envs/h1_2/h1_2_config.py | 121 ++++++++++++++++++++++++++++ legged_gym/scripts/play.py | 1 - legged_gym/scripts/train.py | 1 - legged_gym/utils/task_registry.py | 1 - setup.py | 11 +++ 6 files changed, 134 insertions(+), 3 deletions(-) create mode 100644 legged_gym/envs/h1_2/h1_2_config.py create mode 100644 setup.py diff --git a/legged_gym/envs/__init__.py b/legged_gym/envs/__init__.py index 550f533..d5789d9 100644 --- a/legged_gym/envs/__init__.py +++ b/legged_gym/envs/__init__.py @@ -2,9 +2,11 @@ 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.h1.h1_config import H1RoughCfg, H1RoughCfgPPO +from legged_gym.envs.h1_2.h1_2_config import H1_2RoughCfg, H1_2RoughCfgPPO from .base.legged_robot import LeggedRobot from legged_gym.utils.task_registry import task_registry task_registry.register("go2", LeggedRobot, GO2RoughCfg(), GO2RoughCfgPPO()) task_registry.register("h1", LeggedRobot, H1RoughCfg(), H1RoughCfgPPO()) +task_registry.register("h1_2", LeggedRobot, H1_2RoughCfg(), H1_2RoughCfgPPO()) diff --git a/legged_gym/envs/h1_2/h1_2_config.py b/legged_gym/envs/h1_2/h1_2_config.py new file mode 100644 index 0000000..0e498d5 --- /dev/null +++ b/legged_gym/envs/h1_2/h1_2_config.py @@ -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' diff --git a/legged_gym/scripts/play.py b/legged_gym/scripts/play.py index 28aec6b..f9522e6 100644 --- a/legged_gym/scripts/play.py +++ b/legged_gym/scripts/play.py @@ -1,5 +1,4 @@ import sys -sys.path.append("/home/unitree/unitree_rl_gym") from legged_gym import LEGGED_GYM_ROOT_DIR import os diff --git a/legged_gym/scripts/train.py b/legged_gym/scripts/train.py index aa904e8..2e37436 100644 --- a/legged_gym/scripts/train.py +++ b/legged_gym/scripts/train.py @@ -2,7 +2,6 @@ import numpy as np import os from datetime import datetime import sys -sys.path.append("/home/unitree/unitree_rl_gym/") import isaacgym from legged_gym.envs import * diff --git a/legged_gym/utils/task_registry.py b/legged_gym/utils/task_registry.py index 374ffaa..5d9324f 100644 --- a/legged_gym/utils/task_registry.py +++ b/legged_gym/utils/task_registry.py @@ -4,7 +4,6 @@ from typing import Tuple import torch import numpy as np import sys -sys.path.append("/home/unitree/unitree_rl_gym/rsl_rl") from rsl_rl.env import VecEnv from rsl_rl.runners import OnPolicyRunner diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..8014c60 --- /dev/null +++ b/setup.py @@ -0,0 +1,11 @@ +from setuptools import find_packages +from distutils.core import setup + +setup(name='unitree_rl_gym', + version='1.0.0', + author='Unitree Robotics', + license="BSD-3-Clause", + packages=find_packages(), + author_email='support@unitree.com', + description='Template RL environments for Unitree Robots', + install_requires=['isaacgym', 'rsl-rl', 'matplotlib', 'numpy==1.20', 'tensorboard'])