""" inputs/InputProvider.py - Abstraction layer for robot control inputs """ from abc import ABC, abstractmethod from dataclasses import dataclass, field from typing import List @dataclass class CommandFrame: """Represents a snapshot of control inputs at a single tick.""" state: str = "idle" vector_dirmov: List[float] = field(default_factory=lambda: [0.0, 0.0, 0.0]) # [vx, vy, omega] emote: str = "" class InputProvider(ABC): """Abstract Base Class for input providers (Joystick, Random/RL, Scripted, etc.).""" @abstractmethod def get_command(self) -> CommandFrame: """Polls or generates the latest input command frame.""" pass def stop(self) -> None: """Optional cleanup when shutting down input loop.""" pass