From 14f21510146d33218a956d05f2d93c321423d701 Mon Sep 17 00:00:00 2001 From: ChenXi Date: Fri, 20 Mar 2026 07:03:41 -0400 Subject: [PATCH] Amend bugs --- rl_game/get_up/config/t1_env_cfg.py | 54 +++-------------------------- 1 file changed, 5 insertions(+), 49 deletions(-) diff --git a/rl_game/get_up/config/t1_env_cfg.py b/rl_game/get_up/config/t1_env_cfg.py index ac5d155..93cb7f4 100644 --- a/rl_game/get_up/config/t1_env_cfg.py +++ b/rl_game/get_up/config/t1_env_cfg.py @@ -1,3 +1,5 @@ +import random + import torch from isaaclab.assets import ArticulationCfg from isaaclab.envs import ManagerBasedRLEnvCfg, ManagerBasedRLEnv @@ -10,7 +12,6 @@ from isaaclab.envs.mdp import JointPositionActionCfg from isaaclab.managers import SceneEntityCfg from isaaclab.utils import configclass from rl_game.get_up.env.t1_env import T1SceneCfg -import isaaclab.utils.math as math_utils import isaaclab.envs.mdp as mdp @@ -184,51 +185,6 @@ def strict_feet_contact_reward(env: ManagerBasedRLEnv, sensor_cfg: SceneEntityCf return (~all_feet_cond).float() # 返回1表示违规 - -def reset_root_state_symmetric( - env: ManagerBasedRLEnv, - env_ids: torch.Tensor, - asset_cfg: SceneEntityCfg, - pose_range: dict, - velocity_range: dict -): - """随机对称采样:让机器人随机以 趴/躺/左倾/右倾 及其组合姿态重置""" - robot = env.scene[asset_cfg.name] - num_resets = len(env_ids) - device = env.device - - # 1. 采样 Euler 角 (roll, pitch, yaw) - # 我们先在 positive range 内采样 - def get_rand(key): - low, high = pose_range[key] - return (high - low) * torch.rand(num_resets, device=device) + low - - roll = get_rand("roll") - pitch = get_rand("pitch") - yaw = (pose_range["yaw"][1] - pose_range["yaw"][0]) * torch.rand(num_resets, device=device) + pose_range["yaw"][0] - - # 2. 核心:随机符号化 (Random Sign) - # 50% 概率保持正,50% 概率变负。Roll 和 Pitch 独立随机。 - roll_sign = (torch.randint(0, 2, (num_resets,), device=device) * 2 - 1).float() - pitch_sign = (torch.randint(0, 2, (num_resets,), device=device) * 2 - 1).float() - - roll *= roll_sign - pitch *= pitch_sign - - # 3. 应用到状态 - quat = math_utils.quat_from_euler_xyz(roll, pitch, yaw) - - # 获取默认状态并叠加随机位置偏移 (x, y, z) - root_states = robot.data.default_root_state[env_ids].clone() - for i, key in enumerate(["x", "y", "z"]): - low, high = pose_range[key] - root_states[:, i] += (high - low) * torch.rand(num_resets, device=device) + low - - root_states[:, 3:7] = quat - - # 4. 写入仿真 (同时清除速度,确保是静态开始) - robot.write_root_state_to_sim(root_states, env_ids) - # --- 2. 配置类 --- T1_JOINT_NAMES = [ @@ -258,12 +214,12 @@ class T1ObservationCfg: @configclass class T1EventCfg: reset_robot_rotation = EventTerm( - func=reset_root_state_symmetric, # 使用上面那个通用的函数 + func=mdp.reset_root_state_uniform, params={ "asset_cfg": SceneEntityCfg("robot"), "pose_range": { - "roll": (0, 1.57), # 左右侧卧 - "pitch": (1.4, 1.6), # 仰卧/俯卧 + "roll": (0, 1.57) * random.choice([1, -1]) , # 左右侧卧 + "pitch": (1.4, 1.6) * random.choice([1, -1]) , # 仰卧/俯卧 "yaw": (-3.14, 3.14), # 全向旋转 "x": (0.0, 0.0), "y": (0.0, 0.0),