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