unilab.envs.motion_tracking.g1.tracking

G1 Motion Tracking Environment - Motion imitation task.

Classes

Domain_Rand

Domain randomization config required by motrix backend hooks.

G1MotionTrackingCfg

Configuration for G1 motion tracking environment.

G1MotionTrackingDeployEnv

Deploy-oriented G1 motion tracking env with unitree_rl_lab mimic actor inputs.

G1MotionTrackingDeployEnvCfg

Registered deploy configuration for G1 motion tracking.

G1MotionTrackingDomainRandomizationProvider

G1MotionTrackingEnv

G1 Motion Tracking Environment.

G1MotionTrackingEnvCfg

Registered configuration for G1 motion tracking.

PoseRandomization

Pose randomization ranges for reset.

RewardConfig

Reward configuration for motion tracking.

VelocityRandomization

Velocity randomization ranges for reset.

class unilab.envs.motion_tracking.g1.tracking.RewardConfig[source]

Bases: object

Reward configuration for motion tracking.

Parameters:
scales: dict[str, float]
std_root_pos: float = 0.3
std_root_ori: float = 0.4
std_body_pos: float = 0.3
std_body_ori: float = 0.4
std_body_lin_vel: float = 1.0
std_body_ang_vel: float = 3.14
std_joint_pos: float = 0.2
std_joint_vel: float = 1.0
__init__(scales=<factory>, std_root_pos=0.3, std_root_ori=0.4, std_body_pos=0.3, std_body_ori=0.4, std_body_lin_vel=1.0, std_body_ang_vel=3.14, std_joint_pos=0.2, std_joint_vel=1.0)
Parameters:
class unilab.envs.motion_tracking.g1.tracking.PoseRandomization[source]

Bases: object

Pose randomization ranges for reset.

Parameters:
x: tuple[float, float] = (-0.05, 0.05)
y: tuple[float, float] = (-0.05, 0.05)
z: tuple[float, float] = (-0.01, 0.01)
roll: tuple[float, float] = (-0.1, 0.1)
pitch: tuple[float, float] = (-0.1, 0.1)
yaw: tuple[float, float] = (-0.2, 0.2)
__init__(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=(-0.2, 0.2))
Parameters:
class unilab.envs.motion_tracking.g1.tracking.VelocityRandomization[source]

Bases: object

Velocity randomization ranges for reset.

Parameters:
x: tuple[float, float] = (-0.5, 0.5)
y: tuple[float, float] = (-0.5, 0.5)
z: tuple[float, float] = (-0.2, 0.2)
roll: tuple[float, float] = (-0.52, 0.52)
pitch: tuple[float, float] = (-0.52, 0.52)
yaw: tuple[float, float] = (-0.78, 0.78)
__init__(x=(-0.5, 0.5), y=(-0.5, 0.5), z=(-0.2, 0.2), roll=(-0.52, 0.52), pitch=(-0.52, 0.52), yaw=(-0.78, 0.78))
Parameters:
class unilab.envs.motion_tracking.g1.tracking.Domain_Rand[source]

Bases: object

Domain randomization config required by motrix backend hooks.

Parameters:
randomize_base_mass: bool = False
added_mass_range: list[float]
random_com: bool = False
com_offset_x: list[float]
com_offset_y: list[float]
com_offset_z: list[float]
randomize_gravity: bool = False
gravity_range: list[list[float]]
push_robots: bool = False
push_interval: int = 750
max_force: list[float]
push_body_name: str | None = None
randomize_kp: bool = False
kp_multiplier_range: list[float]
randomize_kd: bool = False
kd_multiplier_range: list[float]
randomize_geom_friction: bool = False
friction_range: list[float]
friction_geom_pattern: str = '^(left|right)_foot[1-7]_collision$'
randomize_joint_default_pos: bool = False
joint_default_pos_range: list[float]
__init__(randomize_base_mass=False, added_mass_range=<factory>, random_com=False, com_offset_x=<factory>, com_offset_y=<factory>, com_offset_z=<factory>, randomize_gravity=False, gravity_range=<factory>, push_robots=False, push_interval=750, max_force=<factory>, push_body_name=None, randomize_kp=False, kp_multiplier_range=<factory>, randomize_kd=False, kd_multiplier_range=<factory>, randomize_geom_friction=False, friction_range=<factory>, friction_geom_pattern='^(left|right)_foot[1-7]_collision$', randomize_joint_default_pos=False, joint_default_pos_range=<factory>)
Parameters:
class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingCfg[source]

Bases: G1BaseCfg

Configuration for G1 motion tracking environment.

Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

motion_file: str | list[str] = '/home/admin1/ws/Eric/UniLab/src/unilab/assets/motions/g1/dance1_subject2_part.npz'
anchor_body_name: str = 'torso_link'
body_names: tuple[str, ...] = ('pelvis', 'left_hip_roll_link', 'left_knee_link', 'left_ankle_roll_link', 'right_hip_roll_link', 'right_knee_link', 'right_ankle_roll_link', 'torso_link', 'left_shoulder_roll_link', 'left_elbow_link', 'left_wrist_yaw_link', 'right_shoulder_roll_link', 'right_elbow_link', 'right_wrist_yaw_link')
sampling_mode: Literal['start', 'clip_start', 'uniform', 'adaptive', 'mixed'] = 'adaptive'
sampling_start_ratio: float = 0.0
truncate_on_clip_end: bool = False
max_episode_seconds: float = 10.0
reward_config: RewardConfig
pose_randomization: PoseRandomization
velocity_randomization: VelocityRandomization
domain_rand: Domain_Rand
joint_position_range: tuple[float, float] = (-0.1, 0.1)
anchor_pos_z_threshold: float = 0.25
anchor_ori_threshold: float = 0.8
ee_body_pos_z_threshold: float = 0.25
ee_body_names: tuple[str, ...] = ('left_ankle_roll_link', 'right_ankle_roll_link', 'left_wrist_yaw_link', 'right_wrist_yaw_link')
undesired_contact_z_threshold: float = 0.05
terminate_on_undesired_contacts: bool = False
__init__(scene=<factory>, sim_dt=0.006666666666666667, max_episode_seconds=10.0, ctrl_dt=0.02, render_spacing=1.0, render_offset_mode='grid', motrix_max_iterations=None, post_step_forward_sensor=False, control_config=<factory>, noise_config=<factory>, sensor=<factory>, asset=<factory>, motion_file='/home/admin1/ws/Eric/UniLab/src/unilab/assets/motions/g1/dance1_subject2_part.npz', anchor_body_name='torso_link', body_names=('pelvis', 'left_hip_roll_link', 'left_knee_link', 'left_ankle_roll_link', 'right_hip_roll_link', 'right_knee_link', 'right_ankle_roll_link', 'torso_link', 'left_shoulder_roll_link', 'left_elbow_link', 'left_wrist_yaw_link', 'right_shoulder_roll_link', 'right_elbow_link', 'right_wrist_yaw_link'), sampling_mode='adaptive', sampling_start_ratio=0.0, truncate_on_clip_end=False, reward_config=<factory>, pose_randomization=<factory>, velocity_randomization=<factory>, domain_rand=<factory>, joint_position_range=(-0.1, 0.1), anchor_pos_z_threshold=0.25, anchor_ori_threshold=0.8, ee_body_pos_z_threshold=0.25, ee_body_names=('left_ankle_roll_link', 'right_ankle_roll_link', 'left_wrist_yaw_link', 'right_wrist_yaw_link'), undesired_contact_z_threshold=0.05, terminate_on_undesired_contacts=False)
Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingEnvCfg[source]

Bases: G1MotionTrackingCfg

Registered configuration for G1 motion tracking.

Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

__init__(scene=<factory>, sim_dt=0.006666666666666667, max_episode_seconds=10.0, ctrl_dt=0.02, render_spacing=1.0, render_offset_mode='grid', motrix_max_iterations=None, post_step_forward_sensor=False, control_config=<factory>, noise_config=<factory>, sensor=<factory>, asset=<factory>, motion_file='/home/admin1/ws/Eric/UniLab/src/unilab/assets/motions/g1/dance1_subject2_part.npz', anchor_body_name='torso_link', body_names=('pelvis', 'left_hip_roll_link', 'left_knee_link', 'left_ankle_roll_link', 'right_hip_roll_link', 'right_knee_link', 'right_ankle_roll_link', 'torso_link', 'left_shoulder_roll_link', 'left_elbow_link', 'left_wrist_yaw_link', 'right_shoulder_roll_link', 'right_elbow_link', 'right_wrist_yaw_link'), sampling_mode='adaptive', sampling_start_ratio=0.0, truncate_on_clip_end=False, reward_config=<factory>, pose_randomization=<factory>, velocity_randomization=<factory>, domain_rand=<factory>, joint_position_range=(-0.1, 0.1), anchor_pos_z_threshold=0.25, anchor_ori_threshold=0.8, ee_body_pos_z_threshold=0.25, ee_body_names=('left_ankle_roll_link', 'right_ankle_roll_link', 'left_wrist_yaw_link', 'right_wrist_yaw_link'), undesired_contact_z_threshold=0.05, terminate_on_undesired_contacts=False)
Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingDeployEnvCfg[source]

Bases: G1MotionTrackingCfg

Registered deploy configuration for G1 motion tracking.

Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

__init__(scene=<factory>, sim_dt=0.006666666666666667, max_episode_seconds=10.0, ctrl_dt=0.02, render_spacing=1.0, render_offset_mode='grid', motrix_max_iterations=None, post_step_forward_sensor=False, control_config=<factory>, noise_config=<factory>, sensor=<factory>, asset=<factory>, motion_file='/home/admin1/ws/Eric/UniLab/src/unilab/assets/motions/g1/dance1_subject2_part.npz', anchor_body_name='torso_link', body_names=('pelvis', 'left_hip_roll_link', 'left_knee_link', 'left_ankle_roll_link', 'right_hip_roll_link', 'right_knee_link', 'right_ankle_roll_link', 'torso_link', 'left_shoulder_roll_link', 'left_elbow_link', 'left_wrist_yaw_link', 'right_shoulder_roll_link', 'right_elbow_link', 'right_wrist_yaw_link'), sampling_mode='adaptive', sampling_start_ratio=0.0, truncate_on_clip_end=False, reward_config=<factory>, pose_randomization=<factory>, velocity_randomization=<factory>, domain_rand=<factory>, joint_position_range=(-0.1, 0.1), anchor_pos_z_threshold=0.25, anchor_ori_threshold=0.8, ee_body_pos_z_threshold=0.25, ee_body_names=('left_ankle_roll_link', 'right_ankle_roll_link', 'left_wrist_yaw_link', 'right_wrist_yaw_link'), undesired_contact_z_threshold=0.05, terminate_on_undesired_contacts=False)
Parameters:
  • scene (SceneCfg)

  • sim_dt (float)

  • max_episode_seconds (float)

  • ctrl_dt (float)

  • render_spacing (float)

  • render_offset_mode (str)

  • motrix_max_iterations (Optional[int])

  • post_step_forward_sensor (bool)

  • control_config (ControlConfig)

  • noise_config (NoiseConfig)

  • sensor (Sensor)

  • asset (Asset)

  • motion_file (str | list[str])

  • anchor_body_name (str)

  • body_names (tuple[str, …])

  • sampling_mode (Literal[‘start’, ‘clip_start’, ‘uniform’, ‘adaptive’, ‘mixed’])

  • sampling_start_ratio (float)

  • truncate_on_clip_end (bool)

  • reward_config (RewardConfig)

  • pose_randomization (PoseRandomization)

  • velocity_randomization (VelocityRandomization)

  • domain_rand (Domain_Rand)

  • joint_position_range (tuple[float, float])

  • anchor_pos_z_threshold (float)

  • anchor_ori_threshold (float)

  • ee_body_pos_z_threshold (float)

  • ee_body_names (tuple[str, …])

  • undesired_contact_z_threshold (float)

  • terminate_on_undesired_contacts (bool)

class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingDomainRandomizationProvider[source]

Bases: DomainRandomizationProvider

Parameters:
__init__(*, base_kp=None, base_kd=None, base_geom_friction=None, foot_geom_ids=None)[source]
Parameters:
validate(env, capabilities)[source]
Parameters:
Return type:

None

build_interval_randomization_plan(env, step_counter)[source]
Parameters:
  • env (Any)

  • step_counter (int)

Return type:

IntervalRandomizationPlan | None

build_reset_plan(env, env_ids)[source]
Parameters:
Return type:

ResetPlan

build_reset_observation(env, env_ids, info_updates)[source]
Parameters:
Return type:

dict[str, ndarray]

class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingEnv[source]

Bases: G1BaseEnv

G1 Motion Tracking Environment.

Parameters:

cfg (G1MotionTrackingCfg)

__init__(cfg, num_envs=1, backend_type='mujoco')[source]
Parameters:

cfg (G1MotionTrackingCfg)

apply_action(actions, state)[source]

子类实现:action → ctrl

Parameters:
Return type:

ndarray

property obs_groups_spec: dict[str, int]

101}.

Subclasses MUST override this property.

Type:

Return observation group dimensions, e.g. {“obs”

Type:

98, “critic”

update_state(state)[source]

子类实现:计算 obs/reward/terminated

Parameters:

state (NpEnvState)

Return type:

NpEnvState

class unilab.envs.motion_tracking.g1.tracking.G1MotionTrackingDeployEnv[source]

Bases: G1MotionTrackingEnv

Deploy-oriented G1 motion tracking env with unitree_rl_lab mimic actor inputs.

Parameters:

cfg (G1MotionTrackingCfg)