from abc import ABC, abstractmethod from typing import Optional class Policy(ABC): """Base class for implementing control policies in the Gr00t framework. A Policy defines how an agent should behave in an environment by mapping observations to actions. This abstract base class provides the interface that all concrete policy implementations must follow. """ def set_goal(self, goal: dict[str, any]): """Set the command from the planner that the policy should follow. Args: goal: Dictionary containing high-level commands or goals from the planner """ pass def set_observation(self, observation: dict[str, any]): """Update the policy's current observation of the environment. Args: observation: Dictionary containing the current state/observation of the environment """ self.observation = observation @abstractmethod def get_action(self, time: Optional[float] = None) -> dict[str, any]: """Compute and return the next action at the specified time, based on current observation and planner command. Args: time: Optional "monotonic time" for time-dependent policies Returns: Dictionary containing the action to be executed """ def close(self): """Clean up any resources used by the policy.""" pass def reset(self): """Reset the policy to its initial state.""" pass