From 43cced2f36219a38689b574e67ff07f60d1c561f Mon Sep 17 00:00:00 2001 From: fro-sting Date: Sat, 14 Feb 2026 10:39:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cfg/task/motion.yaml | 20 ++++---- src/track/command.py | 106 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 12 deletions(-) diff --git a/cfg/task/motion.yaml b/cfg/task/motion.yaml index 5029a42..9377681 100644 --- a/cfg/task/motion.yaml +++ b/cfg/task/motion.yaml @@ -41,12 +41,12 @@ input: command: class: MotionLibG1 - dataset: [sfu_29dof, lafan1] + dataset: [g1/sfu_29dof] occlusion: "amass_copycat_occlusion_v3.pkl" observation: policy: - root_linvel_b: {noise_std: 0.5} + root_linvel_b: {} root_angvel_b: {noise_std: 0.2} gravity_multistep: {steps: 4, noise_std: 0.05} joint_pos_multistep: {joint_names: "(?!.*(wrist)).*", steps: 4, noise_std: 0.05} @@ -55,7 +55,7 @@ observation: ref_root_pos: {} ref_root_quat: {} priv: - root_linvel_b: {noise_std: 0.0} + root_linvel_b: {} root_angvel_b: {noise_std: 0.0} gravity_multistep: {steps: 4, noise_std: 0.0} joint_pos_multistep: {joint_names: "(?!.*(wrist)).*", steps: 4, noise_std: 0.0} @@ -72,13 +72,13 @@ observation: left_elbow_link, right_elbow_link, left_wrist_yaw_link, right_wrist_yaw_link], yaw_only: false} - body_ori_b: {body_names: [left_hip_pitch_link, right_hip_pitch_link, - left_knee_link, right_knee_link, - left_ankle_roll_link, right_ankle_roll_link, - left_shoulder_roll_link, right_shoulder_roll_link, - left_elbow_link, right_elbow_link, - left_wrist_yaw_link, right_wrist_yaw_link], - yaw_only: false} + # body_ori_b: {body_names: [left_hip_pitch_link, right_hip_pitch_link, + # left_knee_link, right_knee_link, + # left_ankle_roll_link, right_ankle_roll_link, + # left_shoulder_roll_link, right_shoulder_roll_link, + # left_elbow_link, right_elbow_link, + # left_wrist_yaw_link, right_wrist_yaw_link], + # yaw_only: false} reward: loco: diff --git a/src/track/command.py b/src/track/command.py index f0e70a4..590e544 100644 --- a/src/track/command.py +++ b/src/track/command.py @@ -4,6 +4,8 @@ from tqdm import tqdm from pathlib import Path from typing import List, Union, Optional, Dict, Tuple +from tensordict.tensordict import TensorDict +import numpy as np from active_adaptation.envs.mdp.base import Command import active_adaptation as aa @@ -112,7 +114,9 @@ def adaptive_sampling(self, env_ids: torch.Tensor) -> Tuple[torch.Tensor, torch. """ # Record failures from terminated environments episode_lengths = self.env.stats["episode_len"] - termination = self.env._compute_termination() + tensordict = TensorDict({}, self.env.num_envs, device=self.env.device) + tensordict = self.env._compute_termination(tensordict) + termination = tensordict.get("terminated", torch.zeros((self.env.num_envs, 1), dtype=bool, device=self.env.device)) mask = termination[env_ids] if mask.any(): @@ -348,4 +352,102 @@ def __init__( joint_range, anchor_body, keypoint_body, - ) \ No newline at end of file + ) + + +class MotionLibGR3(MotionLib): + + def __init__( + self, + env, + dataset: List[str], + occlusion: str, + pose_range: Dict[str, Tuple[float, float]] = { + "x": (-0.05, 0.05), + "y": (-0.05, 0.05), + "z": (-0.01, 0.01), + "roll": (-0.1, 0.1), + "pitch": (-0.1, 0.1), + "yaw": (-1.5, 1.5), + }, + velocity_range: Dict[str, Tuple[float, float]] = { + "x": (-0.2, 0.2), + "y": (-0.2, 0.2), + "z": (-0.2, 0.2), + "roll": (-0.52, 0.52), + "pitch": (-0.52, 0.52), + "yaw": (-0.78, 0.78), + }, + joint_range: Tuple[float, float] = (-0.1, 0.1), + anchor_body: str = "base_link", + keypoint_body: List[str] = [ + "base_link", + "left_thigh_pitch_link", "right_thigh_pitch_link", + "left_shank_pitch_link", "right_shank_pitch_link", + "left_foot_roll_link", "right_foot_roll_link", + "left_upper_arm_pitch_link", "right_upper_arm_pitch_link", + "left_lower_arm_pitch_link", "right_lower_arm_pitch_link", + "left_hand_roll_link", "right_hand_roll_link" + ], + ): + # 定义 29 个核心关节(不含手指和头部) + self.core_joint_names = [ + "waist_yaw_joint", "waist_roll_joint", "waist_pitch_joint", + "left_hip_pitch_joint", "left_hip_roll_joint", "left_hip_yaw_joint", "left_knee_pitch_joint", "left_ankle_pitch_joint", "left_ankle_roll_joint", + "right_hip_pitch_joint", "right_hip_roll_joint", "right_hip_yaw_joint", "right_knee_pitch_joint", "right_ankle_pitch_joint", "right_ankle_roll_joint", + "left_shoulder_pitch_joint", "left_shoulder_roll_joint", "left_shoulder_yaw_joint", "left_elbow_pitch_joint", "left_wrist_yaw_joint", "left_wrist_pitch_joint", "left_wrist_roll_joint", + "right_shoulder_pitch_joint", "right_shoulder_roll_joint", "right_shoulder_yaw_joint", "right_elbow_pitch_joint", "right_wrist_yaw_joint", "right_wrist_pitch_joint", "right_wrist_roll_joint" + ] + + super().__init__( + env, + dataset, + occlusion, + pose_range, + velocity_range, + joint_range, + anchor_body, + keypoint_body, + ) + + def load_data(self, data): + robot_joint_names = self.robot.joint_names + robot_body_names = self.robot.body_names + + mapped_data = {} + for k, motion in data.items(): + T = motion["joint_pos"].shape[0] + + # 情况 A: 输入数据是 29 个核心关节 (G1 同步后的核心) + if motion["joint_pos"].shape[1] == 29: + new_joint_pos = np.zeros((T, len(robot_joint_names)), dtype=np.float32) + new_joint_vel = np.zeros((T, len(robot_joint_names)), dtype=np.float32) + for i, name in enumerate(self.core_joint_names): + if name in robot_joint_names: + idx = robot_joint_names.index(name) + new_joint_pos[:, idx] = motion["joint_pos"][:, i] + new_joint_vel[:, idx] = motion["joint_vel"][:, i] + motion["joint_pos"] = new_joint_pos + motion["joint_vel"] = new_joint_vel + + # 填充 Body 信息以匹配机器人结构 + if motion["body_pos_w"].shape[1] != len(robot_body_names): + new_body_pos = np.zeros((T, len(robot_body_names), 3), dtype=np.float32) + new_body_quat = np.zeros((T, len(robot_body_names), 4), dtype=np.float32) + new_body_quat[..., 0] = 1.0 + new_body_lin = np.zeros((T, len(robot_body_names), 3), dtype=np.float32) + new_body_ang = np.zeros((T, len(robot_body_names), 3), dtype=np.float32) + + new_body_pos[:, 0] = motion["body_pos_w"][:, 0] + new_body_quat[:, 0] = motion["body_quat_w"][:, 0] + new_body_lin[:, 0] = motion["body_lin_vel_w"][:, 0] + new_body_ang[:, 0] = motion["body_ang_vel_w"][:, 0] + + motion["body_pos_w"] = new_body_pos + motion["body_quat_w"] = new_body_quat + motion["body_lin_vel_w"] = new_body_lin + motion["body_ang_vel_w"] = new_body_ang + + mapped_data[k] = motion + + super().load_data(mapped_data) \ No newline at end of file From ea549d3dbddf4a99c6067fdd91bf66f4ac59738b Mon Sep 17 00:00:00 2001 From: fro-sting Date: Mon, 23 Feb 2026 20:27:16 +0800 Subject: [PATCH 2/3] add gr3 motion tracking --- cfg/task/GR3/motion.yaml | 2 +- cfg/task/motion.yaml | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/cfg/task/GR3/motion.yaml b/cfg/task/GR3/motion.yaml index 58b04e6..9a4c465 100644 --- a/cfg/task/GR3/motion.yaml +++ b/cfg/task/GR3/motion.yaml @@ -92,7 +92,7 @@ reward: tracking_kp_ang_vel: {weight: 2.0} feet_slip: {weight: 1.0, body_names: .*foot_roll_link} - action_rate_l2: {weight: 0.2} + action_rate_l2: {weight: 0.1} randomization: # push: diff --git a/cfg/task/motion.yaml b/cfg/task/motion.yaml index 3ac55b3..bf3daae 100644 --- a/cfg/task/motion.yaml +++ b/cfg/task/motion.yaml @@ -41,7 +41,7 @@ input: command: class: MotionLibG1 - dataset: [sfu_29dof, lafan1] + dataset: [g1/sfu_29dof] occlusion: "amass_copycat_occlusion_v3.pkl" observation: @@ -72,13 +72,13 @@ observation: left_elbow_link, right_elbow_link, left_wrist_yaw_link, right_wrist_yaw_link], yaw_only: false} - body_ori_b: {body_names: [left_hip_pitch_link, right_hip_pitch_link, - left_knee_link, right_knee_link, - left_ankle_roll_link, right_ankle_roll_link, - left_shoulder_roll_link, right_shoulder_roll_link, - left_elbow_link, right_elbow_link, - left_wrist_yaw_link, right_wrist_yaw_link], - yaw_only: false} + # body_ori_b: {body_names: [left_hip_pitch_link, right_hip_pitch_link, + # left_knee_link, right_knee_link, + # left_ankle_roll_link, right_ankle_roll_link, + # left_shoulder_roll_link, right_shoulder_roll_link, + # left_elbow_link, right_elbow_link, + # left_wrist_yaw_link, right_wrist_yaw_link], + # yaw_only: false} reward: loco: From f13a92709b2e5350c3b118cd8eb9718a6c066220 Mon Sep 17 00:00:00 2001 From: fro-sting Date: Mon, 23 Feb 2026 20:50:01 +0800 Subject: [PATCH 3/3] add filesoutside --- filesoutside/humanoid.py | 427 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 427 insertions(+) create mode 100644 filesoutside/humanoid.py diff --git a/filesoutside/humanoid.py b/filesoutside/humanoid.py new file mode 100644 index 0000000..89339a8 --- /dev/null +++ b/filesoutside/humanoid.py @@ -0,0 +1,427 @@ +from pathlib import Path +import active_adaptation.utils.symmetry as symmetry_utils + +from active_adaptation.assets.asset_cfg_bak import ( + AssetCfg, + InitialStateCfg, + ActuatorCfg, + ContactSensorCfg, +) +from active_adaptation.registry import Registry + +registry = Registry.instance() + +FILE_DIR = Path(__file__).parent + +ARMATURE_5020 = 0.003609725 +ARMATURE_7520_14 = 0.010177520 +ARMATURE_7520_22 = 0.025101925 +ARMATURE_4010 = 0.00425 + +NATURAL_FREQ = 10 * 2.0 * 3.1415926535 # 10Hz +DAMPING_RATIO = 2.0 + +STIFFNESS_5020 = ARMATURE_5020 * NATURAL_FREQ**2 +STIFFNESS_7520_14 = ARMATURE_7520_14 * NATURAL_FREQ**2 +STIFFNESS_7520_22 = ARMATURE_7520_22 * NATURAL_FREQ**2 +STIFFNESS_4010 = ARMATURE_4010 * NATURAL_FREQ**2 + +DAMPING_5020 = 2.0 * DAMPING_RATIO * ARMATURE_5020 * NATURAL_FREQ +DAMPING_7520_14 = 2.0 * DAMPING_RATIO * ARMATURE_7520_14 * NATURAL_FREQ +DAMPING_7520_22 = 2.0 * DAMPING_RATIO * ARMATURE_7520_22 * NATURAL_FREQ +DAMPING_4010 = 2.0 * DAMPING_RATIO * ARMATURE_4010 * NATURAL_FREQ + + +G1_WAIST_UNLOCKED_CFG = AssetCfg( # no wrist pitch and yaw + mjcf_path=FILE_DIR / "G1" / "mjcf" / "g1.xml", + usd_path=FILE_DIR / "G1" / "waist_unlocked.usd", + init_state=InitialStateCfg( + pos=(0.0, 0.0, 0.85), + joint_pos={ + ".*_hip_pitch_joint": -0.1, + ".*_knee_joint": 0.3, + ".*_ankle_pitch_joint": -0.2, + # ".*_hip_pitch_joint": -0.28, + # ".*_knee_joint": 0.669, + # ".*_ankle_pitch_joint": -0.363, + ".*_elbow_joint": 0.6, + "left_shoulder_roll_joint": 0.2, + "left_shoulder_pitch_joint": 0.2, + "right_shoulder_roll_joint": -0.2, + "right_shoulder_pitch_joint": 0.2, + "waist_yaw_joint": 0.0, + "waist_roll_joint": 0.0, + "waist_pitch_joint": 0.0, + }, + joint_vel={".*": 0.0}, + ), + self_collisions=False, + actuators={ + "base_legs": ActuatorCfg( + joint_names_expr=".*", + effort_limit={ + ".*_hip_yaw_joint.*": 88.0, + ".*_hip_roll_joint.*": 139.0, + ".*_hip_pitch_joint.*": 88.0, + ".*_knee.*": 139.0, + ".*_ankle.*": 50, + ".*_shoulder.*": 25, + ".*_elbow.*": 25, + ".*_wrist_roll_joint": 25.0, + ".*_wrist_pitch_joint": 5.0, + ".*_wrist_yaw_joint": 5.0, + "waist.*": 50, + }, + velocity_limit={ + ".*_hip_yaw_joint": 32.0, + ".*_hip_roll_joint": 20.0, + ".*_hip_pitch_joint": 32.0, + ".*_knee_joint": 20.0, + ".*_ankle.*": 37.0, + "waist.*": 37.0, + ".*_shoulder_pitch_joint": 37.0, + ".*_shoulder_roll_joint": 37.0, + ".*_shoulder_yaw_joint": 37.0, + ".*_elbow_joint": 37.0, + ".*_wrist_roll_joint": 37.0, + ".*_wrist_pitch_joint": 22.0, + ".*_wrist_yaw_joint": 22.0, + }, + stiffness={ + ".*_hip_yaw_joint": STIFFNESS_7520_14 * 2.0, + ".*_hip_roll_joint": STIFFNESS_7520_22, + ".*_hip_pitch_joint": STIFFNESS_7520_14 * 4.0, + ".*_knee_joint": STIFFNESS_7520_22, + ".*ankle.*": 2.0 * STIFFNESS_5020, + "waist.*": 2.0 * STIFFNESS_5020, + ".*_shoulder_pitch_joint": STIFFNESS_5020, + ".*_shoulder_roll_joint": STIFFNESS_5020, + ".*_shoulder_yaw_joint": STIFFNESS_5020, + ".*_elbow_joint": STIFFNESS_5020, + ".*_wrist_roll_joint": STIFFNESS_5020, + ".*_wrist_pitch_joint": STIFFNESS_4010, + ".*_wrist_yaw_joint": STIFFNESS_4010, + }, + damping={ + ".*_hip_pitch_joint": DAMPING_7520_14, + ".*_hip_roll_joint": DAMPING_7520_22, + ".*_hip_yaw_joint": DAMPING_7520_14, + ".*_knee_joint": DAMPING_7520_22, + ".*ankle.*": 2.0 * DAMPING_5020, + "waist.*": 2.0 * DAMPING_5020, + ".*_shoulder_pitch_joint": DAMPING_5020, + ".*_shoulder_roll_joint": DAMPING_5020, + ".*_shoulder_yaw_joint": DAMPING_5020, + ".*_elbow_joint": DAMPING_5020, + ".*_wrist_roll_joint": DAMPING_5020, + ".*_wrist_pitch_joint": DAMPING_4010, + ".*_wrist_yaw_joint": DAMPING_4010, + }, + armature={ + ".*_hip_pitch_joint": ARMATURE_7520_14, + ".*_hip_roll_joint": ARMATURE_7520_22, + ".*_hip_yaw_joint": ARMATURE_7520_14, + ".*_knee_joint": ARMATURE_7520_22, + ".*ankle.*": 2.0 * ARMATURE_5020, + "waist.*": 2.0 * ARMATURE_5020, + ".*_shoulder_pitch_joint": ARMATURE_5020, + ".*_shoulder_roll_joint": ARMATURE_5020, + ".*_shoulder_yaw_joint": ARMATURE_5020, + ".*_elbow_joint": ARMATURE_5020, + ".*_wrist_roll_joint": ARMATURE_5020, + ".*_wrist_pitch_joint": ARMATURE_4010, + ".*_wrist_yaw_joint": ARMATURE_4010, + }, + friction=0.01, + ), + }, + joint_symmetry_mapping=symmetry_utils.mirrored({ + "left_hip_pitch_joint": (1, "right_hip_pitch_joint"), + "left_hip_roll_joint": (-1, "right_hip_roll_joint"), + "left_hip_yaw_joint": (-1, "right_hip_yaw_joint"), + "left_knee_joint": (1, "right_knee_joint"), + "left_ankle_pitch_joint": (1, "right_ankle_pitch_joint"), + "left_ankle_roll_joint": (-1, "right_ankle_roll_joint"), + "waist_yaw_joint": (-1, "waist_yaw_joint"), + "waist_roll_joint": (-1, "waist_roll_joint"), + "waist_pitch_joint": (1, "waist_pitch_joint"), + "left_shoulder_pitch_joint": (1, "right_shoulder_pitch_joint"), + "left_shoulder_roll_joint": (-1, "right_shoulder_roll_joint"), + "left_shoulder_yaw_joint": (-1, "right_shoulder_yaw_joint"), + "left_elbow_joint": (1, "right_elbow_joint"), + "left_wrist_roll_joint": (-1, "right_wrist_roll_joint"), + "left_wrist_pitch_joint": (1, "right_wrist_pitch_joint"), + "left_wrist_yaw_joint": (-1, "right_wrist_yaw_joint") + }), + spatial_symmetry_mapping=symmetry_utils.mirrored({ + "left_hip_pitch_link": "right_hip_pitch_link", + "left_hip_roll_link": "right_hip_roll_link", + "left_hip_yaw_link": "right_hip_yaw_link", + "left_knee_link": "right_knee_link", + "left_ankle_pitch_link": "right_ankle_pitch_link", + "left_ankle_roll_link": "right_ankle_roll_link", + "pelvis": "pelvis", + "torso_link": "torso_link", + "waist_yaw_link": "waist_yaw_link", + "waist_roll_link": "waist_roll_link", + "left_shoulder_pitch_link": "right_shoulder_pitch_link", + "left_shoulder_roll_link": "right_shoulder_roll_link", + "left_shoulder_yaw_link": "right_shoulder_yaw_link", + "left_elbow_link": "right_elbow_link", + "left_wrist_roll_link": "right_wrist_roll_link", + "left_wrist_yaw_link": "right_wrist_yaw_link", + "left_wrist_pitch_link": "right_wrist_pitch_link" + }), + sensors_isaaclab=[ + ContactSensorCfg( + name="contact_forces", + primary=".*", + secondary=[], + track_air_time=True, + history_length=3 + ), + ], + sensors_mjlab=[ + ContactSensorCfg( + name="contact_forces", + primary=".*", + secondary=[], + track_air_time=True, + history_length=3 + ), + ], + joint_names_isaac=[ + 'left_hip_pitch_joint', 'right_hip_pitch_joint', + 'waist_yaw_joint', + 'left_hip_roll_joint', 'right_hip_roll_joint', + 'waist_roll_joint', + 'left_hip_yaw_joint', 'right_hip_yaw_joint', + 'waist_pitch_joint', + 'left_knee_joint', 'right_knee_joint', + 'left_shoulder_pitch_joint', 'right_shoulder_pitch_joint', + 'left_ankle_pitch_joint', 'right_ankle_pitch_joint', + 'left_shoulder_roll_joint', 'right_shoulder_roll_joint', + 'left_ankle_roll_joint', 'right_ankle_roll_joint', + 'left_shoulder_yaw_joint', 'right_shoulder_yaw_joint', + 'left_elbow_joint', 'right_elbow_joint', + 'left_wrist_roll_joint', 'right_wrist_roll_joint', + 'left_wrist_pitch_joint', 'right_wrist_pitch_joint', + 'left_wrist_yaw_joint', 'right_wrist_yaw_joint' + ], + body_names_isaac=[ + 'pelvis', + 'left_hip_pitch_link', 'right_hip_pitch_link', + 'waist_yaw_link', + 'left_hip_roll_link','right_hip_roll_link', + 'waist_roll_link', + 'left_hip_yaw_link', 'right_hip_yaw_link', + 'torso_link', + 'left_knee_link', 'right_knee_link', + 'left_shoulder_pitch_link', 'right_shoulder_pitch_link', + 'left_ankle_pitch_link', 'right_ankle_pitch_link', + 'left_shoulder_roll_link', 'right_shoulder_roll_link', + 'left_ankle_roll_link', 'right_ankle_roll_link', + 'left_shoulder_yaw_link', 'right_shoulder_yaw_link', + 'left_elbow_link', 'right_elbow_link', + 'left_wrist_roll_link', 'right_wrist_roll_link', + 'left_wrist_pitch_link', 'right_wrist_pitch_link', + 'left_wrist_yaw_link', 'right_wrist_yaw_link' + ], +) +registry.register("asset", "g1_waist_unlocked", G1_WAIST_UNLOCKED_CFG) + +GR3_CFG = AssetCfg( + urdf_path=FILE_DIR / "GR3" / "gr3_fourier_hand_6dof.urdf", + usd_path=FILE_DIR / "GR3" / "gr3_fourier_hand_6dof.usd", # Note: may need to create USD file + use_urdf_in_isaac=True, + init_state=InitialStateCfg( + pos=(0.0, 0.0, 0.70), + joint_pos={ + ".*_hip_pitch_joint": -0.112, + ".*_knee_pitch_joint": 0.369, + ".*_ankle_pitch_joint": -0.263, + ".*_elbow_pitch_joint": -0.3, + "left_shoulder_roll_joint": 0.1, + "left_shoulder_pitch_joint": 0.1, + "right_shoulder_roll_joint": -0.1, + "right_shoulder_pitch_joint": 0.1, + "waist_yaw_joint": 0.0, + "waist_roll_joint": 0.0, + "waist_pitch_joint": 0.0, + }, + joint_vel={".*": 0.0}, + ), + self_collisions=False, + actuators={ + "base_legs": ActuatorCfg( + joint_names_expr=".*", + effort_limit={ + ".*_hip_yaw_joint.*": 88.0, + ".*_hip_roll_joint.*": 139.0, + ".*_hip_pitch_joint.*": 88.0, + ".*_knee_pitch_joint.*": 139.0, + ".*_ankle.*": 50.0, + ".*_shoulder.*": 25.0, + ".*_elbow_pitch_joint.*": 25.0, + ".*_wrist_roll_joint": 25.0, + ".*_wrist_pitch_joint": 5.0, + ".*_wrist_yaw_joint": 5.0, + "waist.*": 50.0, + }, + velocity_limit={ + ".*_hip_yaw_joint": 32.0, + ".*_hip_roll_joint": 20.0, + ".*_hip_pitch_joint": 32.0, + ".*_knee_pitch_joint": 20.0, + ".*_ankle.*": 37.0, + "waist.*": 37.0, + ".*_shoulder_pitch_joint": 37.0, + ".*_shoulder_roll_joint": 37.0, + ".*_shoulder_yaw_joint": 37.0, + ".*_elbow_pitch_joint": 37.0, + ".*_wrist_roll_joint": 37.0, + ".*_wrist_pitch_joint": 22.0, + ".*_wrist_yaw_joint": 22.0, + }, + stiffness={ + ".*_hip_yaw_joint": STIFFNESS_7520_14, + ".*_hip_roll_joint": STIFFNESS_7520_22, + ".*_hip_pitch_joint": STIFFNESS_7520_14, + ".*_knee_pitch_joint": STIFFNESS_7520_22, + ".*ankle.*": 2.0 * STIFFNESS_5020, + "waist.*": 2.0 * STIFFNESS_5020, + ".*_shoulder_pitch_joint": STIFFNESS_5020, + ".*_shoulder_roll_joint": STIFFNESS_5020, + ".*_shoulder_yaw_joint": STIFFNESS_5020, + ".*_elbow_pitch_joint": STIFFNESS_5020, + ".*_wrist_roll_joint": STIFFNESS_5020, + ".*_wrist_pitch_joint": STIFFNESS_4010, + ".*_wrist_yaw_joint": STIFFNESS_4010, + }, + damping={ + ".*_hip_pitch_joint": DAMPING_7520_14, + ".*_hip_roll_joint": DAMPING_7520_22, + ".*_hip_yaw_joint": DAMPING_7520_14, + ".*_knee_pitch_joint": DAMPING_7520_22, + ".*ankle.*": 2.0 * DAMPING_5020, + "waist.*": 2.0 * DAMPING_5020, + ".*_shoulder_pitch_joint": DAMPING_5020, + ".*_shoulder_roll_joint": DAMPING_5020, + ".*_shoulder_yaw_joint": DAMPING_5020, + ".*_elbow_pitch_joint": DAMPING_5020, + ".*_wrist_roll_joint": DAMPING_5020, + ".*_wrist_pitch_joint": DAMPING_4010, + ".*_wrist_yaw_joint": DAMPING_4010, + }, + armature={ + ".*_hip_pitch_joint": ARMATURE_7520_14, + ".*_hip_roll_joint": ARMATURE_7520_22, + ".*_hip_yaw_joint": ARMATURE_7520_14, + ".*_knee_pitch_joint": ARMATURE_7520_22, + ".*ankle.*": 2.0 * ARMATURE_5020, + "waist.*": 2.0 * ARMATURE_5020, + ".*_shoulder_pitch_joint": ARMATURE_5020, + ".*_shoulder_roll_joint": ARMATURE_5020, + ".*_shoulder_yaw_joint": ARMATURE_5020, + ".*_elbow_pitch_joint": ARMATURE_5020, + ".*_wrist_roll_joint": ARMATURE_5020, + ".*_wrist_pitch_joint": ARMATURE_4010, + ".*_wrist_yaw_joint": ARMATURE_4010, + }, + friction=0.01, + ), + }, + joint_symmetry_mapping=symmetry_utils.mirrored({ + "left_hip_pitch_joint": (1, "right_hip_pitch_joint"), + "left_hip_roll_joint": (-1, "right_hip_roll_joint"), + "left_hip_yaw_joint": (-1, "right_hip_yaw_joint"), + "left_knee_pitch_joint": (1, "right_knee_pitch_joint"), + "left_ankle_pitch_joint": (1, "right_ankle_pitch_joint"), + "left_ankle_roll_joint": (-1, "right_ankle_roll_joint"), + "waist_yaw_joint": (-1, "waist_yaw_joint"), + "waist_roll_joint": (-1, "waist_roll_joint"), + "waist_pitch_joint": (1, "waist_pitch_joint"), + "left_shoulder_pitch_joint": (1, "right_shoulder_pitch_joint"), + "left_shoulder_roll_joint": (-1, "right_shoulder_roll_joint"), + "left_shoulder_yaw_joint": (-1, "right_shoulder_yaw_joint"), + "left_elbow_pitch_joint": (1, "right_elbow_pitch_joint"), + "left_wrist_roll_joint": (-1, "right_wrist_roll_joint"), + "left_wrist_pitch_joint": (1, "right_wrist_pitch_joint"), + "left_wrist_yaw_joint": (-1, "right_wrist_yaw_joint") + }), + spatial_symmetry_mapping=symmetry_utils.mirrored({ + "left_thigh_pitch_link": "right_thigh_pitch_link", + "left_thigh_roll_link": "right_thigh_roll_link", + "left_thigh_yaw_link": "right_thigh_yaw_link", + "left_shank_pitch_link": "right_shank_pitch_link", + "left_foot_pitch_link": "right_foot_pitch_link", + "left_foot_roll_link": "right_foot_roll_link", + "base_link": "base_link", + "torso_link": "torso_link", + "waist_yaw_link": "waist_yaw_link", + "waist_roll_link": "waist_roll_link", + "left_upper_arm_pitch_link": "right_upper_arm_pitch_link", + "left_upper_arm_roll_link": "right_upper_arm_roll_link", + "left_upper_arm_yaw_link": "right_upper_arm_yaw_link", + "left_lower_arm_pitch_link": "right_lower_arm_pitch_link", + "left_hand_yaw_link": "right_hand_yaw_link", + "left_hand_pitch_link": "right_hand_pitch_link", + "left_hand_roll_link": "right_hand_roll_link" + }), + sensors_isaaclab=[ + ContactSensorCfg( + name="contact_forces", + primary=".*", + secondary=[], + track_air_time=True, + history_length=3 + ), + ], + sensors_mjlab=[ + ContactSensorCfg( + name="contact_forces", + primary=".*", + secondary=[], + track_air_time=True, + history_length=3 + ), + ], + joint_names_isaac=[ + 'left_hip_pitch_joint', 'right_hip_pitch_joint', + 'waist_yaw_joint', + 'left_hip_roll_joint', 'right_hip_roll_joint', + 'waist_roll_joint', + 'left_hip_yaw_joint', 'right_hip_yaw_joint', + 'waist_pitch_joint', + 'left_knee_pitch_joint', 'right_knee_pitch_joint', + 'left_shoulder_pitch_joint', 'right_shoulder_pitch_joint', + 'left_ankle_pitch_joint', 'right_ankle_pitch_joint', + 'left_shoulder_roll_joint', 'right_shoulder_roll_joint', + 'left_ankle_roll_joint', 'right_ankle_roll_joint', + 'left_shoulder_yaw_joint', 'right_shoulder_yaw_joint', + 'left_elbow_pitch_joint', 'right_elbow_pitch_joint', + 'left_wrist_roll_joint', 'right_wrist_roll_joint', + 'left_wrist_pitch_joint', 'right_wrist_pitch_joint', + 'left_wrist_yaw_joint', 'right_wrist_yaw_joint' + ], + body_names_isaac=[ + 'base_link', + 'left_thigh_pitch_link', 'right_thigh_pitch_link', + 'waist_yaw_link', + 'left_thigh_roll_link', 'right_thigh_roll_link', + 'waist_roll_link', + 'left_thigh_yaw_link', 'right_thigh_yaw_link', + 'torso_link', + 'left_shank_pitch_link', 'right_shank_pitch_link', + 'left_upper_arm_pitch_link', 'right_upper_arm_pitch_link', + 'left_foot_pitch_link', 'right_foot_pitch_link', + 'left_upper_arm_roll_link', 'right_upper_arm_roll_link', + 'left_foot_roll_link', 'right_foot_roll_link', + 'left_upper_arm_yaw_link', 'right_upper_arm_yaw_link', + 'left_lower_arm_pitch_link', 'right_lower_arm_pitch_link', + 'left_hand_yaw_link', 'right_hand_yaw_link', + 'left_hand_pitch_link', 'right_hand_pitch_link', + 'left_hand_roll_link', 'right_hand_roll_link' + ], +) +registry.register("asset", "gr3_fourier_hand_6dof", GR3_CFG)