| """EnvHub task factory for toy sorting. |
| |
| This is the stable entrypoint used by env.py at the repo root. |
| It now drives the native Isaac Lab ToySortingEnv directly — no LeIsaac required. |
| """ |
|
|
| from __future__ import annotations |
|
|
| from manipulator_learning.envs.toy_sorting_env import ToySortingEnv, ToySortingEnvCfg |
|
|
| DEFAULT_TASK_ID = "ToySorting-v0" |
|
|
|
|
| def make_env( |
| task: str | None = None, |
| n_envs: int = 1, |
| seed: int | None = None, |
| **kwargs, |
| ): |
| """Create and return a ToySortingEnv. |
| |
| Returns a dict ``{suite_name: [env]}`` to stay compatible with the |
| LeRobot EnvHub convention expected by callers. |
| |
| Parameters |
| ---------- |
| task: |
| Task identifier. Only ``"ToySorting-v0"``, ``"toy_sorting"``, and |
| ``"toy-sorting"`` are accepted. |
| n_envs: |
| Number of parallel environments (passed to ``ToySortingEnvCfg``). |
| seed: |
| Random seed (stored but not yet wired into Isaac Lab physics seed). |
| **kwargs: |
| Forwarded to ``ToySortingEnvCfg`` if they match known fields, |
| otherwise ignored. |
| """ |
|
|
| requested_task = task or DEFAULT_TASK_ID |
| if requested_task not in {DEFAULT_TASK_ID, "toy_sorting", "toy-sorting"}: |
| raise ValueError( |
| f"Unsupported task '{requested_task}'. Expected '{DEFAULT_TASK_ID}'." |
| ) |
|
|
| cfg = ToySortingEnvCfg(num_envs=n_envs) |
| |
| for key, val in kwargs.items(): |
| if hasattr(cfg, key): |
| setattr(cfg, key, val) |
|
|
| env = ToySortingEnv(cfg) |
| return {"toy_sorting": [env]} |
|
|