|
|
import time |
|
|
from typing import Any, Dict |
|
|
|
|
|
from unitree_sdk2py.core.channel import ChannelFactoryInitialize |
|
|
|
|
|
from .base_sim import BaseSimulator |
|
|
|
|
|
|
|
|
def init_channel(config: Dict[str, Any]) -> None: |
|
|
""" |
|
|
Initialize the communication channel for simulator/robot communication. |
|
|
|
|
|
Args: |
|
|
config: Configuration dictionary containing DOMAIN_ID and optionally INTERFACE |
|
|
""" |
|
|
if config.get("INTERFACE", None): |
|
|
ChannelFactoryInitialize(config["DOMAIN_ID"], config["INTERFACE"]) |
|
|
else: |
|
|
ChannelFactoryInitialize(config["DOMAIN_ID"]) |
|
|
|
|
|
|
|
|
class SimulatorFactory: |
|
|
"""Factory class for creating different types of simulators.""" |
|
|
|
|
|
@staticmethod |
|
|
def create_simulator(config: Dict[str, Any], env_name: str = "default", **kwargs): |
|
|
""" |
|
|
Create a simulator based on the configuration. |
|
|
|
|
|
Args: |
|
|
config: Configuration dictionary containing SIMULATOR type |
|
|
env_name: Environment name |
|
|
**kwargs: Additional keyword arguments for specific simulators |
|
|
""" |
|
|
simulator_type = config.get("SIMULATOR", "mujoco") |
|
|
if simulator_type == "mujoco": |
|
|
return SimulatorFactory._create_mujoco_simulator(config, env_name, **kwargs) |
|
|
else: |
|
|
print( |
|
|
f"Warning: Invalid simulator type: {simulator_type}. " |
|
|
"If you are using run_sim_loop, please ignore this warning." |
|
|
) |
|
|
return None |
|
|
|
|
|
@staticmethod |
|
|
def _create_mujoco_simulator(config: Dict[str, Any], env_name: str = "default", **kwargs): |
|
|
"""Create a MuJoCo simulator instance.""" |
|
|
camera_configs = kwargs.pop("camera_configs", {}) |
|
|
if len(camera_configs) > 0: |
|
|
print(f"Debug: SimulatorFactory received {len(camera_configs)} camera config(s)") |
|
|
|
|
|
env_kwargs = dict( |
|
|
onscreen=kwargs.pop("onscreen", True), |
|
|
offscreen=kwargs.pop("offscreen", False), |
|
|
camera_configs=camera_configs, |
|
|
) |
|
|
return BaseSimulator(config=config, env_name=env_name, **env_kwargs) |
|
|
|
|
|
|