--- title: dm_control Environment Server emoji: 🤖 colorFrom: blue colorTo: green sdk: docker pinned: false app_port: 8000 base_path: /web tags: - openenv --- ## Hugging Face Space Deployment This Space is built from OpenEnv environment `dm_control_env`. - Space URL: `https://huggingface.co/spaces/openenv/dm_control_env-v2-1-0` - OpenEnv pinned ref: `v2.1.0` - Hub tag: `openenv` ### Connecting from Code ```python from envs.dm_control_env import Env env = Env(base_url="https://huggingface.co/spaces/openenv/dm_control_env-v2-1-0") ``` # dm_control OpenEnv Environment A generic OpenEnv environment for [dm_control.suite](https://github.com/google-deepmind/dm_control), providing access to all MuJoCo-based continuous control tasks.

Cartpole Balance Quadruped Walk

## Supported Environments | Domain | Tasks | |--------|-------| | cartpole | balance, swingup, swingup_sparse | | walker | stand, walk, run | | humanoid | stand, walk, run | | cheetah | run | | hopper | stand, hop | | reacher | easy, hard | | pendulum | swingup | | finger | spin, turn_easy, turn_hard | | fish | upright, swim | | ball_in_cup | catch | | And more... | See `dm_control.suite.BENCHMARKING` | ## Quick Start ### Using the Client ```python from envs.dm_control_env import DMControlEnv, DMControlAction # Connect to a running server with DMControlEnv(base_url="http://localhost:8000") as env: # Reset with default (cartpole/balance) result = env.reset() print(f"Observations: {result.observation.observations.keys()}") # Take actions for _ in range(100): action = DMControlAction(values=[0.5]) # Push cart right result = env.step(action) print(f"Reward: {result.reward}, Done: {result.done}") if result.done: result = env.reset() ``` ### Switching Environments ```python # Start with cartpole result = env.reset(domain_name="cartpole", task_name="balance") # Switch to walker (on next reset) result = env.reset(domain_name="walker", task_name="walk") # Note: walker has 6 action dimensions action = DMControlAction(values=[0.0] * 6) result = env.step(action) ``` ### Running the Server ```bash # From OpenEnv root cd envs/dm_control_env uvicorn server.app:app --host 0.0.0.0 --port 8000 # Or using uv uv run --project . server ``` ### Using Docker ```bash # Build docker build -t dm_control:latest -f server/Dockerfile . # Run docker run -p 8000:8000 dm_control:latest ``` ## API ### Action ```python class DMControlAction(Action): values: List[float] # Continuous action values ``` Action dimensions vary by environment: - cartpole: 1 (force on cart) - walker: 6 (joint torques) - humanoid: 21 (joint torques) ### Observation ```python class DMControlObservation(Observation): observations: Dict[str, List[float]] # Named observation arrays pixels: Optional[str] # Base64 PNG (if render=True) reward: float done: bool ``` ### State ```python class DMControlState(State): domain_name: str task_name: str action_spec: Dict[str, Any] observation_spec: Dict[str, Any] physics_timestep: float control_timestep: float episode_id: str step_count: int ``` ## Examples See the `examples/` directory: - `cartpole_control.py` - Interactive cartpole control with arrow keys - `hopper_control.py` - Interactive hopper control with spacebar for random forces - `quadruped_control.py` - Interactive quadruped control with spacebar for random forces - `list_environments.py` - Print all available environments All examples support consistent CLI arguments: ```bash # Default: interactive mode with minimal pygame window python examples/cartpole_control.py # Visual mode with rendered MuJoCo frames python examples/cartpole_control.py --visual # Headless mode (no pygame, automated control) python examples/cartpole_control.py --headless --max-steps 500 # Select a different task python examples/cartpole_control.py --task swingup python examples/hopper_control.py --task stand python examples/quadruped_control.py --task run ``` ## Environment Variables | Variable | Default | Description | |----------|---------|-------------| | `DMCONTROL_DOMAIN` | cartpole | Default domain | | `DMCONTROL_TASK` | balance | Default task | | `DMCONTROL_RENDER_HEIGHT` | 480 | Render height | | `DMCONTROL_RENDER_WIDTH` | 640 | Render width |