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
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
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
170
171
172
173
174
175
176
177
178
class BoolSensorEnum(IntEnum):
    """Enum defining bool sensors IDs"""

    BOTTOM_GRIP_LEFT = 0
    BOTTOM_GRIP_RIGHT = 1
    TOP_GRIP_LEFT = 2
    TOP_GRIP_RIGHT = 3
    MAGNET_LEFT = 4
    MAGNET_RIGHT = 5

PositionalActuator #

Bases: ActuatorBase, PositionalActuatorCommand

Full model for positional actuators

Source code in cogip/models/actuators.py
161
162
163
164
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
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",
    )

    @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

pb_copy(message) #

Copy values to Protobuf message

Source code in cogip/models/actuators.py
155
156
157
158
def pb_copy(self, message: PB_PositionalActuatorCommand) -> None:
    """Copy values to Protobuf message"""
    message.id = self.id
    message.command = self.command

PositionalActuatorEnum #

Bases: IntEnum

Enum defining positional actuators IDs

Source code in cogip/models/actuators.py
103
104
105
106
107
108
109
110
111
112
113
114
class PositionalActuatorEnum(IntEnum):
    """Enum defining positional actuators IDs"""

    MOTOR_BOTTOM_LIFT = 0
    MOTOR_TOP_LIFT = 1
    ANALOGSERVO_BOTTOM_GRIP_LEFT = 2
    ANALOGSERVO_BOTTOM_GRIP_RIGHT = 3
    ANALOGSERVO_TOP_GRIP_LEFT = 4
    ANALOGSERVO_TOP_GRIP_RIGHT = 5
    CART_MAGNET_LEFT = 6
    CART_MAGNET_RIGHT = 7
    ANALOGSERVO_PAMI = 8

Servo #

Bases: ActuatorBase, ServoCommand

Full model for servos

Source code in cogip/models/actuators.py
88
89
90
91
92
93
94
95
96
97
class Servo(ActuatorBase, ServoCommand):
    "Full model for servos"

    position: int = Field(
        0,
        ge=0,
        le=999,
        title="Position",
        description="Current servo position",
    )

ServoCommand #

Bases: BaseModel

Model defining a command to send to servos

Source code in cogip/models/actuators.py
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
class ServoCommand(BaseModel):
    """Model defining a command to send to servos"""

    kind: Literal[ActuatorsKindEnum.servo] = ActuatorsKindEnum.servo
    id: ServoEnum = Field(
        ...,
        title="Id",
        description="Servo identifier",
    )
    command: int = Field(
        0,
        ge=0,
        le=999,
        title="Position Command",
        description="Current servo position command",
    )

    @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.servo:
            raise ValueError("Not ActuatorsKindEnum.servo value")
        return value

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

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

pb_copy(message) #

Copy values to Protobuf message

Source code in cogip/models/actuators.py
82
83
84
85
def pb_copy(self, message: PB_ServoCommand) -> None:
    """Copy values to Protobuf message"""
    message.id = self.id
    message.command = self.command

ServoEnum #

Bases: IntEnum

Enum defining servo IDs

Source code in cogip/models/actuators.py
32
33
34
35
36
37
class ServoEnum(IntEnum):
    """Enum defining servo IDs"""

    LXSERVO_LEFT_CART = 0
    LXSERVO_RIGHT_CART = 1
    LXSERVO_ARM_PANEL = 2