Amend some bugs and make it training

This commit is contained in:
2026-03-16 05:46:49 -04:00
parent 4b0b1fac8d
commit 6510cb0bfc
2 changed files with 24 additions and 12 deletions

View File

@@ -26,7 +26,7 @@ class T1ObservationCfg:
base_ang_vel = ObsTerm(func=mdp.base_ang_vel) base_ang_vel = ObsTerm(func=mdp.base_ang_vel)
projected_gravity = ObsTerm(func=mdp.projected_gravity) projected_gravity = ObsTerm(func=mdp.projected_gravity)
# ⬅️ 新增:让机器人知道自己离地多高 # ⬅️ 新增:让机器人知道自己离地多高
root_height = ObsTerm(func=mdp.root_height) root_height = ObsTerm(func=mdp.root_pos_w)
joint_pos = ObsTerm(func=mdp.joint_pos_rel) joint_pos = ObsTerm(func=mdp.joint_pos_rel)
joint_vel = ObsTerm(func=mdp.joint_vel_rel) joint_vel = ObsTerm(func=mdp.joint_vel_rel)
actions = ObsTerm(func=mdp.last_action) actions = ObsTerm(func=mdp.last_action)
@@ -41,18 +41,32 @@ class T1EventCfg:
# 每次重置时,随机给基座一个旋转角度 # 每次重置时,随机给基座一个旋转角度
# 包括:背躺 (Pitch=1.57), 趴着 (Pitch=-1.57), 侧躺 (Roll=1.57) # 包括:背躺 (Pitch=1.57), 趴着 (Pitch=-1.57), 侧躺 (Roll=1.57)
reset_robot_rotation = EventTerm( reset_robot_rotation = EventTerm(
func=mdp.reset_root_custom_orientation, func=mdp.reset_root_state_uniform, # 修正为报错建议的函数名
params={ params={
"euler_angles_range": {
"roll": (-1.57, 1.57), # 覆盖侧躺
"pitch": (-1.57, 1.57), # 覆盖趴下和背躺
"yaw": (-3.14, 3.14), # 随机朝向
},
"asset_cfg": SceneEntityCfg("robot"), "asset_cfg": SceneEntityCfg("robot"),
"pose_range": {
"roll": (-1.57, 1.57), # 侧躺随机
"pitch": (-1.57, 1.57), # 趴下/背躺随机
"yaw": (-3.14, 3.14), # 航向角随机
"x": (0.0, 0.0), # 位置不随机(保持在原点)
"y": (0.0, 0.0),
"z": (0.0, 0.0), # 高度由 init_state 决定这里设为0偏移
},
"velocity_range": {}, # 初始速度默认为0
}, },
mode="reset", mode="reset",
) )
@configclass
class T1ActionCfg:
"""动作空间配置组"""
# 这里的变量名 (例如 joint_pos) 将决定 ActionManager 中的 term 名称
joint_pos = JointPositionActionCfg(
asset_name="robot",
joint_names=[".*"],
scale=0.5,
use_default_offset=True
)
@configclass @configclass
class T1GetUpRewardCfg: class T1GetUpRewardCfg:
@@ -87,7 +101,7 @@ class T1TerminationsCfg:
# 提前成功:如果站起来了并保持稳定,直接结束 Episode 并拿奖励,节省算力 # 提前成功:如果站起来了并保持稳定,直接结束 Episode 并拿奖励,节省算力
is_standing_success = DoneTerm( is_standing_success = DoneTerm(
func=mdp.root_height_below_minimum, func=mdp.root_height_below_minimum,
params={"minimum_height": 0.65, "inverted": True} # 高于 0.65m 则重置 params={"minimum_height": 0.65},
) )
time_out = DoneTerm(func=mdp.time_out) time_out = DoneTerm(func=mdp.time_out)
@@ -107,9 +121,7 @@ class T1EnvCfg(ManagerBasedRLEnvCfg):
terminations = T1TerminationsCfg() terminations = T1TerminationsCfg()
events = T1EventCfg() # ⬅️ 挂载随机姿态事件 events = T1EventCfg() # ⬅️ 挂载随机姿态事件
actions = JointPositionActionCfg( actions = T1ActionCfg()
asset_name="robot", joint_names=[".*"], scale=0.5, use_default_offset=True
)
# 训练参数 # 训练参数
episode_length_s = 5.0 # 强制 5秒内必须站起来 episode_length_s = 5.0 # 强制 5秒内必须站起来

View File

@@ -71,7 +71,7 @@ def main():
rl_game_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), ".")) rl_game_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "."))
log_dir = os.path.join(rl_game_dir, "logs") log_dir = os.path.join(rl_game_dir, "logs")
rl_config['params']['config']['train_dir'] = log_dir rl_config['params']['config']['train_dir'] = log_dir
rl_config['params']['config']['name'] = "T1_GetUp_Experiment" rl_config['params']['config']['name'] = "T1_GetUp"
# 7. 运行训练 # 7. 运行训练
runner = Runner() runner = Runner()