From e61722fa786051b87529f0a49eb49c3e659a0513 Mon Sep 17 00:00:00 2001 From: Jade Choghari Date: Fri, 21 Nov 2025 11:24:54 +0100 Subject: [PATCH] more refactor --- eval.sh | 1 + src/lerobot/configs/types.py | 1 - src/lerobot/envs/configs.py | 2 +- src/lerobot/envs/factory.py | 1 + src/lerobot/envs/libero.py | 17 ++++++++++++----- src/lerobot/scripts/lerobot_eval.py | 1 - 6 files changed, 15 insertions(+), 8 deletions(-) diff --git a/eval.sh b/eval.sh index 1b2f36c52..66994a681 100644 --- a/eval.sh +++ b/eval.sh @@ -5,4 +5,5 @@ lerobot-eval \ --env.control_mode=absolute \ --eval.batch_size=1 \ --eval.n_episodes=1 \ + --env.episode_length=800 \ --seed=142 diff --git a/src/lerobot/configs/types.py b/src/lerobot/configs/types.py index c36d1bcfb..18359ef05 100644 --- a/src/lerobot/configs/types.py +++ b/src/lerobot/configs/types.py @@ -37,7 +37,6 @@ class NormalizationMode(str, Enum): IDENTITY = "IDENTITY" QUANTILES = "QUANTILES" QUANTILE10 = "QUANTILE10" - IMAGENET = "IMAGENET" @dataclass diff --git a/src/lerobot/envs/configs.py b/src/lerobot/envs/configs.py index 14ca2e6a7..4323f3316 100644 --- a/src/lerobot/envs/configs.py +++ b/src/lerobot/envs/configs.py @@ -245,7 +245,7 @@ class HILSerlRobotEnvConfig(EnvConfig): class LiberoEnv(EnvConfig): task: str = "libero_10" # can also choose libero_spatial, libero_object, etc. fps: int = 30 - episode_length: int = 520 + episode_length: int | None = None obs_type: str = "pixels_agent_pos" render_mode: str = "rgb_array" camera_name: str = "agentview_image,robot0_eye_in_hand_image" diff --git a/src/lerobot/envs/factory.py b/src/lerobot/envs/factory.py index c0659e722..b39cfee71 100644 --- a/src/lerobot/envs/factory.py +++ b/src/lerobot/envs/factory.py @@ -144,6 +144,7 @@ def make_env( gym_kwargs=cfg.gym_kwargs, env_cls=env_cls, control_mode=cfg.control_mode, + episode_length=cfg.episode_length, ) elif "metaworld" in cfg.type: from lerobot.envs.metaworld import create_metaworld_envs diff --git a/src/lerobot/envs/libero.py b/src/lerobot/envs/libero.py index 09f1261e7..b1eb37377 100644 --- a/src/lerobot/envs/libero.py +++ b/src/lerobot/envs/libero.py @@ -80,14 +80,11 @@ def get_libero_dummy_action(): return [0, 0, 0, 0, 0, 0, -1] -OBS_STATE_DIM = 8 ACTION_DIM = 7 -AGENT_POS_LOW = -1000.0 -AGENT_POS_HIGH = 1000.0 ACTION_LOW = -1.0 ACTION_HIGH = 1.0 TASK_SUITE_MAX_STEPS: dict[str, int] = { - "libero_spatial": 800, # longest training demo has 193 steps + "libero_spatial": 280, # longest training demo has 193 steps "libero_object": 280, # longest training demo has 254 steps "libero_goal": 300, # longest training demo has 270 steps "libero_10": 520, # longest training demo has 505 steps @@ -103,6 +100,7 @@ class LiberoEnv(gym.Env): task_suite: Any, task_id: int, task_suite_name: str, + episode_length: int | None = None, camera_name: str | Sequence[str] = "agentview_image,robot0_eye_in_hand_image", obs_type: str = "pixels", render_mode: str = "rgb_array", @@ -142,13 +140,18 @@ class LiberoEnv(gym.Env): self.camera_name_mapping = camera_name_mapping self.num_steps_wait = num_steps_wait self.episode_index = episode_index + self.episode_length = episode_length # Load once and keep self._init_states = get_task_init_states(task_suite, self.task_id) if self.init_states else None self._init_state_id = self.episode_index # tie each sub-env to a fixed init state self._env = self._make_envs_task(task_suite, self.task_id) default_steps = 500 - self._max_episode_steps = TASK_SUITE_MAX_STEPS.get(task_suite_name, default_steps) + self._max_episode_steps = ( + TASK_SUITE_MAX_STEPS.get(task_suite_name, default_steps) + if self.episode_length is None + else self.episode_length + ) self.control_mode = control_mode images = {} for cam in self.camera_name: @@ -351,6 +354,7 @@ def _make_env_fns( task_id: int, n_envs: int, camera_names: list[str], + episode_length: int | None, init_states: bool, gym_kwargs: Mapping[str, Any], control_mode: str, @@ -365,6 +369,7 @@ def _make_env_fns( task_suite_name=suite_name, camera_name=camera_names, init_states=init_states, + episode_length=episode_length, episode_index=episode_index, control_mode=control_mode, **local_kwargs, @@ -387,6 +392,7 @@ def create_libero_envs( init_states: bool = True, env_cls: Callable[[Sequence[Callable[[], Any]]], Any] | None = None, control_mode: str = "relative", + episode_length: int | None = None, ) -> dict[str, dict[int, Any]]: """ Create vectorized LIBERO environments with a consistent return shape. @@ -428,6 +434,7 @@ def create_libero_envs( for tid in selected: fns = _make_env_fns( suite=suite, + episode_length=episode_length, suite_name=suite_name, task_id=tid, n_envs=n_envs, diff --git a/src/lerobot/scripts/lerobot_eval.py b/src/lerobot/scripts/lerobot_eval.py index 57071f0dc..65b6cb144 100644 --- a/src/lerobot/scripts/lerobot_eval.py +++ b/src/lerobot/scripts/lerobot_eval.py @@ -175,7 +175,6 @@ def rollout( with torch.inference_mode(): action = policy.select_action(observation) action = postprocessor(action) - action_transition = {"action": action} action_transition = env_postprocessor(action_transition) action = action_transition["action"]