File size: 1,098 Bytes
ef118cf | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | """Base controller interface for Spot robot."""
import numpy as np
from abc import ABC, abstractmethod
class BaseController(ABC):
"""Abstract base class for Spot controllers."""
def __init__(self, num_joints: int = 12):
self.num_joints = num_joints
self.time = 0.0
@abstractmethod
def compute_action(self, obs: np.ndarray, data) -> np.ndarray:
"""Compute control action given observation.
Args:
obs: Observation vector [base_pos(3), base_quat(4), base_lin_vel(3),
base_ang_vel(3), joint_pos(12), joint_vel(12)]
data: MuJoCo data object for additional state access
Returns:
Action vector (target joint positions for position actuators)
"""
pass
def step(self, dt: float):
"""Update controller time."""
self.time += dt
def reset(self):
"""Reset controller state."""
self.time = 0.0
@property
@abstractmethod
def name(self) -> str:
"""Return controller name for display."""
pass
|