Source code for unilab.envs.locomotion.g1.base
from __future__ import annotations
from dataclasses import dataclass, field
import numpy as np
from unilab.envs.locomotion.common.base import (
BaseNoiseConfig,
ControlConfigBase,
LocomotionBaseCfg,
LocomotionBaseEnv,
)
from unilab.envs.locomotion.common.base import (
Sensor as LocomotionSensor,
)
[docs]
@dataclass
class NoiseConfig(BaseNoiseConfig):
scale_joint_angle: float = 0.02
scale_joint_vel: float = 0.3
scale_gyro: float = 0.1
[docs]
@dataclass
class ControlConfig(ControlConfigBase):
action_scale: float | np.ndarray = 0.25 # type: ignore[assignment]
[docs]
@dataclass
class Sensor(LocomotionSensor):
local_linvel: str = "pelvis_local_linvel"
gyro: str = "torso_gyro"
upvector: str = "torso_upvector"
[docs]
@dataclass
class Asset:
base_name = "pelvis"
foot_name = "ankle_roll_link"
ground = "floor"
[docs]
@dataclass
class G1BaseCfg(LocomotionBaseCfg):
noise_config: NoiseConfig = field(default_factory=NoiseConfig) # type: ignore[assignment]
control_config: ControlConfig = field(default_factory=ControlConfig) # type: ignore[assignment]
sensor: Sensor = field(default_factory=Sensor)
asset: Asset = field(default_factory=Asset)
sim_dt: float = 0.02 / 3.0
ctrl_dt: float = 0.02
[docs]
class G1BaseEnv(LocomotionBaseEnv):
_cfg: G1BaseCfg
_keyframe_name = "stand"
_use_global_dtype = False
def _obs_noise(self, data: np.ndarray, scale: float) -> np.ndarray:
"""Same as base, but coerces back to ``data.dtype`` (G1 runs in float32)."""
return np.asarray(super()._obs_noise(data, scale), dtype=data.dtype)