Skip to content

actuators

ActuatorBase #

Bases: BaseModel

Base model for actuators

Source code in cogip/models/actuators.py
19
20
21
22
23
24
25
26
class ActuatorBase(BaseModel):
    """Base model for actuators"""

    enabled: bool = Field(
        False,
        title="Enabled",
        description="An actuator is enabled if it has been initialized with its current value",
    )

ActuatorsKindEnum #

Bases: IntEnum

Enum defining actuators kind

Source code in cogip/models/actuators.py
11
12
13
14
15
16
class ActuatorsKindEnum(IntEnum):
    """Enum defining actuators kind"""

    servo = 0
    positional_actuator = 1
    bool_sensor = 2

BoolSensor #

Bases: BaseModel

Model defining bool sensor state

Source code in cogip/models/actuators.py
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
class BoolSensor(BaseModel):
    """Model defining bool sensor state"""

    kind: Literal[ActuatorsKindEnum.bool_sensor] = ActuatorsKindEnum.bool_sensor
    id: Annotated[
        BoolSensorEnum,
        Field(
            title="Id",
            description="Bool sensor identifier",
        ),
    ]
    state: Annotated[
        bool,
        Field(
            title="State",
            description="Bool sensor state",
        ),
    ] = False

BoolSensorEnum #

Bases: IntEnum

Enum defining bool sensors IDs

Source code in cogip/models/actuators.py
107
108
109
110
class BoolSensorEnum(IntEnum):
    """Enum defining bool sensors IDs"""

    UNDEFINED = 0

PositionalActuator #

Bases: ActuatorBase, PositionalActuatorCommand

Full model for positional actuators

Source code in cogip/models/actuators.py
 98
 99
100
101
class PositionalActuator(ActuatorBase, PositionalActuatorCommand):
    "Full model for positional actuators"

    pass

PositionalActuatorCommand #

Bases: BaseModel

Model defining a command to send to positional actuators

Source code in cogip/models/actuators.py
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
class PositionalActuatorCommand(BaseModel):
    """Model defining a command to send to positional actuators"""

    kind: Literal[ActuatorsKindEnum.positional_actuator] = ActuatorsKindEnum.positional_actuator
    id: PositionalActuatorEnum = Field(..., title="Id", description="Positional Actuator identifier")
    command: int = Field(
        0,
        ge=-100,
        le=999,
        title="Position Command",
        description="Current positional actuator position command",
    )
    speed: int = Field(
        100,
        ge=1,
        le=100,
        title="Speed",
        description="Speed",
    )
    timeout: int = Field(
        2000,
        ge=100,
        le=5000,
        title="Timeout",
        description="Timeout",
    )

    @field_validator("kind", mode="before")
    @classmethod
    def validate_kind(cls, v: str) -> ActuatorsKindEnum:
        try:
            value = ActuatorsKindEnum[v]
        except KeyError:
            try:
                value = ActuatorsKindEnum(v)
            except Exception:
                raise ValueError("Not a ActuatorsKindEnum")
        if value != ActuatorsKindEnum.positional_actuator:
            raise ValueError("Not ActuatorsKindEnum.positional_actuator value")
        return value

    @field_validator("id", mode="before")
    @classmethod
    def validate_id(cls, v: str) -> PositionalActuatorEnum:
        try:
            return PositionalActuatorEnum[v]
        except KeyError:
            try:
                return PositionalActuatorEnum(v)
            except Exception:
                raise ValueError("Not a PositionalActuatorEnum")

    def pb_copy(self, message: PB_PositionalActuatorCommand) -> None:
        """Copy values to Protobuf message"""
        message.id = self.id
        message.command = self.command
        message.speed = self.speed
        message.timeout = self.timeout

pb_copy(message) #

Copy values to Protobuf message

Source code in cogip/models/actuators.py
90
91
92
93
94
95
def pb_copy(self, message: PB_PositionalActuatorCommand) -> None:
    """Copy values to Protobuf message"""
    message.id = self.id
    message.command = self.command
    message.speed = self.speed
    message.timeout = self.timeout

PositionalActuatorEnum #

Bases: IntEnum

Enum defining positional actuators IDs

Source code in cogip/models/actuators.py
32
33
34
35
class PositionalActuatorEnum(IntEnum):
    """Enum defining positional actuators IDs"""

    MOTOR_LIFT = 0