v0.1.13; add 2.5 rad trunctation; add LevelPipeline binary search maximum terrain levels

This commit is contained in:
wty-yy
2025-12-22 22:57:20 +08:00
parent 6bbdceee2f
commit 50126ec9aa
24 changed files with 144 additions and 22 deletions

View File

@@ -45,3 +45,7 @@ class MujocoConfig(Config):
ang_vel = 0.8 # [rad/s]
joint_pos = 0.01 # [rad]
joint_vel = 3.0 # [rad/s]
class truncation:
enabled = True
projected_gravity_rad = 2.5 # [rad], if gravity projection angle exceeds this value, truncate episode

View File

@@ -20,6 +20,7 @@ from typing import Literal
from robogauge.utils.logger import logger
from robogauge.utils.helpers import parse_path
from robogauge.utils.math_utils import get_projected_gravity
from robogauge.tasks.simulator.mujoco_config import MujocoConfig
from robogauge.tasks.simulator.sim_data import (
SimData,
@@ -261,8 +262,15 @@ class MujocoSimulator:
self.n_step += 1
self.sim_time = self.n_step * self.sim_dt
self.check_truncation(sim_data)
return sim_data
def check_truncation(self, sim_data: SimData):
if self.cfg.truncation.enabled:
projected_gravity = get_projected_gravity(sim_data.proprio.base.quat)
if -projected_gravity[2] < np.cos(self.cfg.truncation.projected_gravity_rad):
raise RuntimeError(f"Episode truncated due to excessive projected gravity, angle: {np.arccos(-projected_gravity[2]):.3f} rad, projected: {projected_gravity}")
def reset(self):
""" Reset the simulator to initial state. """
self.mj_physics.reset()