Skip to content

PulsarActuatorReal

PulsarActuatorReal is the canonical API 2.0.0 class for controlling physical PULSAR actuators through a PCP transport adapter.

Source code in pcp_api/pulsar_actuator_real.pyi
  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
 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
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
class PulsarActuatorReal:
    MODELS_NAMES: Any

    class Mode(Enum):
        """Control modes available for Pulsar actuator implementations."""
        FVI = 0x02  # Field voltage injection test mode
        OPEN_LOOP = 0x03  # Open-loop test mode
        DVI = 0x04  # Field oriented voltage injection test mode
        TORQUE = 0x05
        SPEED = 0x06
        POSITION = 0x07
        IMPEDANCE = 0x08

    class Rates(Enum):
        """Feedback update rates for high/low frequency data streams."""
        DISABLED = 0  # Feedback disabled
        RATE_2KHZ = 10  # 2 kHz update rate
        RATE_1KHZ = 20  # 1 kHz update rate
        RATE_500HZ = 40  # 500 Hz update rate
        RATE_200HZ = 100  # 200 Hz update rate
        RATE_100HZ = 200  # 100 Hz update rate
        RATE_50HZ = 400  # 50 Hz update rate
        RATE_20HZ = 1_000  # 20 Hz update rate
        RATE_10HZ = 2_000  # 10 Hz update rate
        RATE_5HZ = 4_000  # 5 Hz update rate
        RATE_2HZ = 10_000  # 2 Hz update rate
        RATE_1HZ = 20_000  # 1 Hz update rate

    class TorquePerformance(Enum):
        """Performance presets for torque control mode."""
        AGGRESSIVE = 1  # Fast, responsive torque control
        BALANCED = 2  # Balanced torque control
        SOFT = 3  # Smooth, gentle torque control

    class SpeedPerformance(Enum):
        """Performance presets for speed control mode."""
        AGGRESSIVE = 1  # Fast, responsive speed control
        BALANCED = 2  # Balanced speed control
        SOFT = 3  # Smooth, gentle speed control
        CUSTOM = 4  # Custom speed control parameters

    class PCP_Parameters(Enum):
        """Parameters that can be read or written through the actuator API."""
        K_DAMPING = 0x01  # Damping coefficient (Nm*s/rad) for impedance control
        K_STIFFNESS = 0x02  # Stiffness coefficient (Nm/rad) for impedance control
        TORQUE_FF = 0x03  # Feed-forward torque value (Nm)
        LIM_TORQUE = 0x04  # Symmetric torque limit in positive/negative directions (Nm)
        LIM_POSITION_MAX = 0x05  # Maximum position limit (rad)
        LIM_POSITION_MIN = 0x06  # Minimum position limit (rad)
        LIM_SPEED_MAX = 0x07  # Maximum speed limit (rad/s)
        LIM_SPEED_MIN = 0x08  # Minimum speed limit (rad/s)
        PROFILE_POSITION_MAX = 0x09  # Maximum positive speed in position-control profile (rad/s)
        PROFILE_POSITION_MIN = 0x0A  # Maximum negative speed in position-control profile (rad/s)
        PROFILE_SPEED_MAX = 0x0B  # Maximum acceleration in speed-control profile (rad/s^2)
        PROFILE_SPEED_MIN = 0x0C  # Maximum deceleration in speed-control profile (rad/s^2)
        KP_SPEED = 0x0D  # Speed-loop proportional gain
        KI_SPEED = 0x0E  # Speed-loop integral gain
        KP_POSITION = 0x0F  # Position-loop proportional gain
        MODE = 0x30  # Operation mode; read-only, set with CHANGE_MODE
        SETPOINT = 0x31  # Current setpoint: position (rad), speed (rad/s), or torque (Nm)
        TORQUE_PERFORMANCE = 0x40  # Torque performance preset
        SPEED_PERFORMANCE = 0x41  # Speed performance preset
        PROFILE_SPEED_MAX_RAD_S = 0x42  # Maximum profile speed (rad/s)
        PROFILE_TORQUE_MAX_NM = 0x43  # Maximum profile torque (Nm)
        INVERT_FLAG = 0x44  # Invert direction of motion (boolean flag, 0 or 1)
        FF_GAIN = 0x45  # Feed-forward gain for friction/inertia compensation
        PCP_PARAM_SPEED_CUTOFF = 0x46  # Speed IIR filter cutoff frequency
        PCP_PARAM_CURRENT_CUTOFF = 0x47  # DQ-current IIR filter cutoff frequency
        FIRMWARE_VERSION = 0x80  # Real actuator firmware version (read-only)
        PCP_ADDRESS = 0x81  # Device PCP address
        SERIAL_NUMBER = 0x82  # Device serial number (read-only)
        DEVICE_MODEL = 0x83  # Device model identifier (read-only)
        CONTROL_VERSION = 0x84  # Control software version (read-only)
        CAN_HIGH_SPEED = 0x85  # CAN high-speed mode enabled/disabled

    class PCP_Items(Enum):
        """Feedback items available for monitoring actuator state."""
        ENCODER_INT = 0x41  # Internal encoder position
        ENCODER_INT_RAW = 0x42  # Raw internal encoder counts
        ENCODER_EXT = 0x43  # External encoder position
        ENCODER_EXT_RAW = 0x44  # Raw external encoder counts
        SPEED_FB = 0x45  # Speed feedback
        IA = 0x46  # Phase A current
        IB = 0x47  # Phase B current
        IC = 0x48  # Phase C current
        TORQUE_SENS = 0x49  # Torque sensor reading
        TORQUE_SENS_RAW = 0x4A  # Raw torque sensor reading
        POSITION_REF = 0x4B  # Position reference/command
        POSITION_FB = 0x4C  # Position feedback
        POSITION_FB_INTERNAL = 0x73  # Position feedback from internal encoder
        SPEED_REF = 0x4D  # Speed reference/command
        ID_REF = 0x4F  # D-axis current reference
        ID_FB = 0x50  # D-axis current feedback
        IQ_REF = 0x51  # Q-axis current reference
        IQ_FB = 0x52  # Q-axis current feedback
        VD_REF = 0x53  # D-axis voltage reference
        VQ_REF = 0x54  # Q-axis voltage reference
        TORQUE_REF = 0x55  # Torque reference/command
        TORQUE_FB = 0x56  # Torque feedback
        REFERENCE_A_VOLTAGE = 0x57  # Reference phase A voltage
        REFERENCE_B_VOLTAGE = 0x58  # Reference phase B voltage
        REFERENCE_C_VOLTAGE = 0x59  # Reference phase C voltage
        BUS_POWER = 0x5A  # DC bus power
        BUS_CURRENT = 0x5B  # DC bus current
        THREE_PHASE_POWER = 0x5C  # Three-phase electrical power
        MECHANICAL_POWER = 0x5D  # Mechanical output power
        INVERTER_EFFICIENCY = 0x5E  # Inverter efficiency
        MOTOR_EFFICIENCY = 0x5F  # Motor efficiency
        ERRORS_ENCODER_INT = 0x60  # Internal encoder error flags
        ERRORS_ENCODER_EXT = 0x61  # External encoder error flags
        ERRORS_OVERRUN = 0x62  # Control-loop overrun error flags
        VBUS = 0x70  # DC bus voltage
        TEMP_PCB = 0x71  # PCB temperature
        TEMP_MOTOR = 0x72  # Motor temperature
        DEBUG_SIGNAL_BOOL = 0x90  # Debug boolean signal
        DEBUG_SIGNAL01 = 0x91  # Debug signal 1
        DEBUG_SIGNAL02 = 0x92  # Debug signal 2
        DEBUG_SIGNAL03 = 0x93  # Debug signal 3
        DEBUG_SIGNAL04 = 0x94  # Debug signal 4
        DEBUG_SIGNAL05 = 0x95  # Debug signal 5
        DEBUG_SIGNAL06 = 0x96  # Debug signal 6
        DEBUG_SIGNAL07 = 0x97  # Debug signal 7
        DEBUG_SIGNAL08 = 0x98  # Debug signal 8
        DEBUG_SIGNAL09 = 0x99  # Debug signal 9
        DEBUG_SIGNAL10 = 0x9A  # Debug signal 10

    def __init__(self, adapter_handler: Any, address: int, logger: Optional[logging.Logger] = None) -> None:
        """
        Initialize a real actuator bound to a PCP adapter and address.

        Args:
            adapter_handler: Transport adapter used to send and receive PCP messages.
            address: PCP actuator address.
            logger: Optional logger used for diagnostics.
        """
        ...

    @property
    def connected(self) -> bool:
        """Return whether the actuator is connected."""
        ...

    @property
    def implementation_version(self) -> str:
        """Return the physical actuator firmware version."""
        ...

    def set_feedback_callback(self, callback: Callable[[int, dict], None]) -> None:
        """
        Set the callback invoked when feedback data is received.

        Args:
            callback: Callable receiving the actuator address and feedback data.
        """
        ...

    def set_error_callback(self, callback: Callable[[int, dict], None]) -> None:
        """
        Set the callback invoked when actuator errors are received.

        Args:
            callback: Callable receiving the actuator address and error data.
        """
        ...

    def set_low_freq_feedback_callback(self, callback: Callable[[Any], None]) -> None:
        """Deprecated compatibility shim for the removed low-frequency callback."""
        ...

    def get_feedback(self) -> Dict[Any, Any]:
        """
        Return the latest feedback values.

        Returns:
            The current feedback dictionary.
        """
        ...

    @staticmethod
    def is_valid_actuator_address(address: int) -> bool:
        """Return whether ``address`` is a valid actuator network address."""
        ...

    def stop(self) -> None:
        """Disable actuator control."""
        ...

    def connect(self, timeout: float = 1.0) -> bool:
        """
        Connect to the actuator by sending a ping request.

        Args:
            timeout: Maximum time to wait for a pong response, in seconds.

        Returns:
            ``True`` when the actuator responds before the timeout expires.
        """
        ...

    def disconnect(self) -> None:
        """Stop the actuator, unregister its callback, and mark it disconnected."""
        ...

    def send_ping(self, timeout: float = 1.0) -> bool:
        """
        Send a ping message and wait for a pong response.

        Args:
            timeout: Maximum time to wait for a pong response, in seconds.

        Returns:
            ``True`` if a pong response is received before the timeout expires.
        """
        ...

    def change_address(self, new_address: int) -> None:
        """
        Write a new PCP address to the actuator.

        Args:
            new_address: New actuator address in the valid actuator range.
        """
        ...

    def start(self) -> None:
        """Enable actuator control."""
        ...

    def change_mode(self, mode: 'PulsarActuatorReal.Mode') -> None:
        """
        Change the actuator control mode.

        Args:
            mode: Control mode to activate.
        """
        ...

    def get_mode(self) -> 'PulsarActuatorReal.Mode':
        """
        Return the current actuator control mode.

        Returns:
            The cached control mode, or a mode read from the actuator.
        """
        ...

    def change_setpoint(self, setpoint: float) -> None:
        """
        Change the setpoint for the current control mode.

        Args:
            setpoint: Setpoint value for the active mode.
        """
        ...

    def change_torque_setpoint(self, setpoint: float, id_Kp: float = nan, id_Ki: float = nan, iq_Kp: float = nan, iq_Ki: float = nan) -> None:
        """
        Switch to torque mode and send a torque setpoint.

        Args:
            setpoint: Torque reference, in Nm.
            id_Kp: Optional d-axis current proportional gain.
            id_Ki: Optional d-axis current integral gain.
            iq_Kp: Optional q-axis current proportional gain.
            iq_Ki: Optional q-axis current integral gain.
        """
        ...

    def change_speed_setpoint(self, setpoint: float, FF_gain: float = nan, spd_Ki: float = nan, spd_Kp: float = nan, ref_ff_torque: float = nan) -> None:
        """
        Switch to speed mode and send a speed setpoint.

        Args:
            setpoint: Speed reference, in rad/s.
            FF_gain: Optional feed-forward gain.
            spd_Ki: Optional speed-loop integral gain.
            spd_Kp: Optional speed-loop proportional gain.
            ref_ff_torque: Optional feed-forward torque reference, in Nm.
        """
        ...

    def change_position_setpoint(self, setpoint: float, FF_gain: float = nan, spd_Ki: float = nan, spd_Kp: float = nan, pos_Kp: float = nan, ref_ff_torque: float = nan) -> None:
        """
        Switch to position mode and send a position setpoint.

        Args:
            setpoint: Position reference, in radians.
            FF_gain: Optional feed-forward gain.
            spd_Ki: Optional speed-loop integral gain.
            spd_Kp: Optional speed-loop proportional gain.
            pos_Kp: Optional position-loop proportional gain.
            ref_ff_torque: Optional feed-forward torque reference, in Nm.
        """
        ...

    def change_impedance_setpoint(self, setpoint: float, FF_gain: float = nan, K_stiff: float = nan, K_damp: float = nan, J_imp: float = nan, ref_ff_torque: float = nan, ref_impedance_spd: float = nan, ref_impedance_acel: float = nan) -> None:
        """
        Switch to impedance mode and send an impedance setpoint.

        Args:
            setpoint: Position reference, in radians.
            FF_gain: Optional feed-forward gain.
            K_stiff: Optional impedance stiffness.
            K_damp: Optional impedance damping.
            J_imp: Optional impedance inertia.
            ref_ff_torque: Optional feed-forward torque reference, in Nm.
            ref_impedance_spd: Optional impedance speed reference, in rad/s.
            ref_impedance_acel: Optional impedance acceleration reference.
        """
        ...

    def internal_change_speed_setpoint(self, setpoint: float, spd_b0: float = nan, spd_wc: float = nan, spd_wo: float = nan) -> None:
        """Send an internal speed-controller setpoint packet."""
        ...

    def internal_change_position_setpoint(self, setpoint: float, pos_Ki: float = nan, pos_Kd: float = nan, pos_b0: float = nan, pos_wc: float = nan, pos_wo: float = nan, spd_b0: float = nan, spd_wc: float = nan, spd_wo: float = nan) -> None:
        """Send an internal position-controller setpoint packet."""
        ...

    def set_home_position(self) -> None:
        """Set the current actuator position as the zero reference."""
        ...

    def set_feedback_items(self, items: List['PulsarActuatorReal.PCP_Items']) -> None:
        """
        Configure the high-frequency feedback item stream.

        Args:
            items: Feedback items to include in telemetry packets.
        """
        ...

    def set_feedback_rate(self, rate: Union['PulsarActuatorReal.Rates', int]) -> None:
        """
        Configure the high-frequency feedback rate.

        Args:
            rate: A ``Rates`` divider enum or an integer target rate in Hz. The
                divider is rounded to the nearest integer. Use ``Rates.DISABLED``
                or ``0`` to disable feedback.
        """
        ...

    def get_items_blocking(self, items: List['PulsarActuatorReal.PCP_Items'], timeout: float = 1.0) -> Dict['PulsarActuatorReal.PCP_Items', float]:
        """
        Request specific feedback items and wait for their response.

        Args:
            items: Feedback items to request. Requests are capped at the protocol
                batch limit.
            timeout: Maximum time to wait for a response, in seconds.

        Returns:
            Mapping from requested feedback items to received values. Returns an
            empty mapping on timeout.
        """
        ...

    def set_parameters(self, parameters: Dict['PulsarActuatorReal.PCP_Parameters', float]) -> None:
        """
        Write actuator parameters.

        Args:
            parameters: Mapping from parameter enum to the float value to write.
        """
        ...

    def get_parameters(self, parameters: List['PulsarActuatorReal.PCP_Parameters'], timeout: float = 1.0) -> Dict['PulsarActuatorReal.PCP_Parameters', float]:
        """
        Read actuator parameters.

        Args:
            parameters: Parameters to request. Long requests are split across
                protocol-sized batches.
            timeout: Maximum time to wait for each response, in seconds.

        Returns:
            Mapping from parameter enum to the most recently received value.
        """
        ...

    def get_parameters_all(self) -> Dict['PulsarActuatorReal.PCP_Parameters', float]:
        """
        Read all known actuator parameters.

        Returns:
            Mapping from parameter enum to current value.
        """
        ...

    def set_can_high_speed(self, high_speed: bool) -> None:
        """Enable or disable CAN BRS/high-speed operation for this actuator."""
        ...

    def set_torque_performance(self, performance: 'PulsarActuatorReal.TorquePerformance') -> None:
        """
        Set the actuator torque-control performance preset.

        Args:
            performance: Torque performance preset to apply.
        """
        ...

    def set_speed_performance(self, performance: 'PulsarActuatorReal.SpeedPerformance') -> None:
        """
        Set the actuator speed-control performance preset.

        Args:
            performance: Speed performance preset to apply.
        """
        ...

    def save_config(self) -> None:
        """Persist the current actuator configuration to non-volatile memory."""
        ...

    def restore_factory_parameters(self, settle_time: float = 1.0) -> None:
        """
        Restore user-writable actuator parameters to firmware factory defaults.

        Args:
            settle_time: Seconds to wait after sending the restore command before
                returning. The actuator may briefly stop answering pings while it
                applies the restored configuration.

        This clears the saved configuration values used for parameters such as
        gains, limits, profile settings, CAN speed, and direction inversion. It
        does not erase factory electrical-machine calibration data.
        """
        ...

    def blink(self) -> None:
        """Blink the actuator LED for physical identification."""
        ...

    def enter_bootloader(self) -> None:
        """Request that the actuator enters bootloader mode."""
        ...

    def changeAddress(self, new_address: int) -> None: ...

    def setFeedbackItems(self, items: List['PulsarActuatorReal.PCP_Items']) -> None: ...

    def setFeedbackRate(self, rate: Union['PulsarActuatorReal.Rates', int]) -> None: ...

    def set_high_freq_feedback_items(self, items: List['PulsarActuatorReal.PCP_Items']) -> None: ...

    def setHighFreqFeedbackItems(self, items: List['PulsarActuatorReal.PCP_Items']) -> None: ...

    def set_high_freq_feedback_rate(self, rate: 'PulsarActuatorReal.Rates') -> None: ...

    def setHighFreqFeedbackRate(self, rate: 'PulsarActuatorReal.Rates') -> None: ...

    def set_low_freq_feedback_items(self, items: List['PulsarActuatorReal.PCP_Items']) -> None: ...

    def setLowFreqFeedbackItems(self, items: List['PulsarActuatorReal.PCP_Items']) -> None: ...

    def set_low_freq_feedback_rate(self, rate: 'PulsarActuatorReal.Rates') -> None: ...

    def setLowFreqFeedbackRate(self, rate: 'PulsarActuatorReal.Rates') -> None: ...

    def getItemsBlocking(self, items: List['PulsarActuatorReal.PCP_Items'], timeout: float = 1.0) -> Dict['PulsarActuatorReal.PCP_Items', float]: ...

    def reset_encoder_position(self) -> None: ...

connected property

Return whether the actuator is connected.

implementation_version property

Return the physical actuator firmware version.

Mode

Bases: Enum

Control modes available for Pulsar actuator implementations.

Source code in pcp_api/pulsar_actuator_real.pyi
class Mode(Enum):
    """Control modes available for Pulsar actuator implementations."""
    FVI = 0x02  # Field voltage injection test mode
    OPEN_LOOP = 0x03  # Open-loop test mode
    DVI = 0x04  # Field oriented voltage injection test mode
    TORQUE = 0x05
    SPEED = 0x06
    POSITION = 0x07
    IMPEDANCE = 0x08

PCP_Items

Bases: Enum

Feedback items available for monitoring actuator state.

Source code in pcp_api/pulsar_actuator_real.pyi
class PCP_Items(Enum):
    """Feedback items available for monitoring actuator state."""
    ENCODER_INT = 0x41  # Internal encoder position
    ENCODER_INT_RAW = 0x42  # Raw internal encoder counts
    ENCODER_EXT = 0x43  # External encoder position
    ENCODER_EXT_RAW = 0x44  # Raw external encoder counts
    SPEED_FB = 0x45  # Speed feedback
    IA = 0x46  # Phase A current
    IB = 0x47  # Phase B current
    IC = 0x48  # Phase C current
    TORQUE_SENS = 0x49  # Torque sensor reading
    TORQUE_SENS_RAW = 0x4A  # Raw torque sensor reading
    POSITION_REF = 0x4B  # Position reference/command
    POSITION_FB = 0x4C  # Position feedback
    POSITION_FB_INTERNAL = 0x73  # Position feedback from internal encoder
    SPEED_REF = 0x4D  # Speed reference/command
    ID_REF = 0x4F  # D-axis current reference
    ID_FB = 0x50  # D-axis current feedback
    IQ_REF = 0x51  # Q-axis current reference
    IQ_FB = 0x52  # Q-axis current feedback
    VD_REF = 0x53  # D-axis voltage reference
    VQ_REF = 0x54  # Q-axis voltage reference
    TORQUE_REF = 0x55  # Torque reference/command
    TORQUE_FB = 0x56  # Torque feedback
    REFERENCE_A_VOLTAGE = 0x57  # Reference phase A voltage
    REFERENCE_B_VOLTAGE = 0x58  # Reference phase B voltage
    REFERENCE_C_VOLTAGE = 0x59  # Reference phase C voltage
    BUS_POWER = 0x5A  # DC bus power
    BUS_CURRENT = 0x5B  # DC bus current
    THREE_PHASE_POWER = 0x5C  # Three-phase electrical power
    MECHANICAL_POWER = 0x5D  # Mechanical output power
    INVERTER_EFFICIENCY = 0x5E  # Inverter efficiency
    MOTOR_EFFICIENCY = 0x5F  # Motor efficiency
    ERRORS_ENCODER_INT = 0x60  # Internal encoder error flags
    ERRORS_ENCODER_EXT = 0x61  # External encoder error flags
    ERRORS_OVERRUN = 0x62  # Control-loop overrun error flags
    VBUS = 0x70  # DC bus voltage
    TEMP_PCB = 0x71  # PCB temperature
    TEMP_MOTOR = 0x72  # Motor temperature
    DEBUG_SIGNAL_BOOL = 0x90  # Debug boolean signal
    DEBUG_SIGNAL01 = 0x91  # Debug signal 1
    DEBUG_SIGNAL02 = 0x92  # Debug signal 2
    DEBUG_SIGNAL03 = 0x93  # Debug signal 3
    DEBUG_SIGNAL04 = 0x94  # Debug signal 4
    DEBUG_SIGNAL05 = 0x95  # Debug signal 5
    DEBUG_SIGNAL06 = 0x96  # Debug signal 6
    DEBUG_SIGNAL07 = 0x97  # Debug signal 7
    DEBUG_SIGNAL08 = 0x98  # Debug signal 8
    DEBUG_SIGNAL09 = 0x99  # Debug signal 9
    DEBUG_SIGNAL10 = 0x9A  # Debug signal 10

PCP_Parameters

Bases: Enum

Parameters that can be read or written through the actuator API.

Source code in pcp_api/pulsar_actuator_real.pyi
class PCP_Parameters(Enum):
    """Parameters that can be read or written through the actuator API."""
    K_DAMPING = 0x01  # Damping coefficient (Nm*s/rad) for impedance control
    K_STIFFNESS = 0x02  # Stiffness coefficient (Nm/rad) for impedance control
    TORQUE_FF = 0x03  # Feed-forward torque value (Nm)
    LIM_TORQUE = 0x04  # Symmetric torque limit in positive/negative directions (Nm)
    LIM_POSITION_MAX = 0x05  # Maximum position limit (rad)
    LIM_POSITION_MIN = 0x06  # Minimum position limit (rad)
    LIM_SPEED_MAX = 0x07  # Maximum speed limit (rad/s)
    LIM_SPEED_MIN = 0x08  # Minimum speed limit (rad/s)
    PROFILE_POSITION_MAX = 0x09  # Maximum positive speed in position-control profile (rad/s)
    PROFILE_POSITION_MIN = 0x0A  # Maximum negative speed in position-control profile (rad/s)
    PROFILE_SPEED_MAX = 0x0B  # Maximum acceleration in speed-control profile (rad/s^2)
    PROFILE_SPEED_MIN = 0x0C  # Maximum deceleration in speed-control profile (rad/s^2)
    KP_SPEED = 0x0D  # Speed-loop proportional gain
    KI_SPEED = 0x0E  # Speed-loop integral gain
    KP_POSITION = 0x0F  # Position-loop proportional gain
    MODE = 0x30  # Operation mode; read-only, set with CHANGE_MODE
    SETPOINT = 0x31  # Current setpoint: position (rad), speed (rad/s), or torque (Nm)
    TORQUE_PERFORMANCE = 0x40  # Torque performance preset
    SPEED_PERFORMANCE = 0x41  # Speed performance preset
    PROFILE_SPEED_MAX_RAD_S = 0x42  # Maximum profile speed (rad/s)
    PROFILE_TORQUE_MAX_NM = 0x43  # Maximum profile torque (Nm)
    INVERT_FLAG = 0x44  # Invert direction of motion (boolean flag, 0 or 1)
    FF_GAIN = 0x45  # Feed-forward gain for friction/inertia compensation
    PCP_PARAM_SPEED_CUTOFF = 0x46  # Speed IIR filter cutoff frequency
    PCP_PARAM_CURRENT_CUTOFF = 0x47  # DQ-current IIR filter cutoff frequency
    FIRMWARE_VERSION = 0x80  # Real actuator firmware version (read-only)
    PCP_ADDRESS = 0x81  # Device PCP address
    SERIAL_NUMBER = 0x82  # Device serial number (read-only)
    DEVICE_MODEL = 0x83  # Device model identifier (read-only)
    CONTROL_VERSION = 0x84  # Control software version (read-only)
    CAN_HIGH_SPEED = 0x85  # CAN high-speed mode enabled/disabled

Rates

Bases: Enum

Feedback update rates for high/low frequency data streams.

Source code in pcp_api/pulsar_actuator_real.pyi
class Rates(Enum):
    """Feedback update rates for high/low frequency data streams."""
    DISABLED = 0  # Feedback disabled
    RATE_2KHZ = 10  # 2 kHz update rate
    RATE_1KHZ = 20  # 1 kHz update rate
    RATE_500HZ = 40  # 500 Hz update rate
    RATE_200HZ = 100  # 200 Hz update rate
    RATE_100HZ = 200  # 100 Hz update rate
    RATE_50HZ = 400  # 50 Hz update rate
    RATE_20HZ = 1_000  # 20 Hz update rate
    RATE_10HZ = 2_000  # 10 Hz update rate
    RATE_5HZ = 4_000  # 5 Hz update rate
    RATE_2HZ = 10_000  # 2 Hz update rate
    RATE_1HZ = 20_000  # 1 Hz update rate

SpeedPerformance

Bases: Enum

Performance presets for speed control mode.

Source code in pcp_api/pulsar_actuator_real.pyi
class SpeedPerformance(Enum):
    """Performance presets for speed control mode."""
    AGGRESSIVE = 1  # Fast, responsive speed control
    BALANCED = 2  # Balanced speed control
    SOFT = 3  # Smooth, gentle speed control
    CUSTOM = 4  # Custom speed control parameters

TorquePerformance

Bases: Enum

Performance presets for torque control mode.

Source code in pcp_api/pulsar_actuator_real.pyi
class TorquePerformance(Enum):
    """Performance presets for torque control mode."""
    AGGRESSIVE = 1  # Fast, responsive torque control
    BALANCED = 2  # Balanced torque control
    SOFT = 3  # Smooth, gentle torque control

__init__(adapter_handler, address, logger=None)

Initialize a real actuator bound to a PCP adapter and address.

Parameters:

Name Type Description Default
adapter_handler Any

Transport adapter used to send and receive PCP messages.

required
address int

PCP actuator address.

required
logger Optional[Logger]

Optional logger used for diagnostics.

None
Source code in pcp_api/pulsar_actuator_real.pyi
def __init__(self, adapter_handler: Any, address: int, logger: Optional[logging.Logger] = None) -> None:
    """
    Initialize a real actuator bound to a PCP adapter and address.

    Args:
        adapter_handler: Transport adapter used to send and receive PCP messages.
        address: PCP actuator address.
        logger: Optional logger used for diagnostics.
    """
    ...

Blink the actuator LED for physical identification.

Source code in pcp_api/pulsar_actuator_real.pyi
def blink(self) -> None:
    """Blink the actuator LED for physical identification."""
    ...

change_address(new_address)

Write a new PCP address to the actuator.

Parameters:

Name Type Description Default
new_address int

New actuator address in the valid actuator range.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def change_address(self, new_address: int) -> None:
    """
    Write a new PCP address to the actuator.

    Args:
        new_address: New actuator address in the valid actuator range.
    """
    ...

change_impedance_setpoint(setpoint, FF_gain=nan, K_stiff=nan, K_damp=nan, J_imp=nan, ref_ff_torque=nan, ref_impedance_spd=nan, ref_impedance_acel=nan)

Switch to impedance mode and send an impedance setpoint.

Parameters:

Name Type Description Default
setpoint float

Position reference, in radians.

required
FF_gain float

Optional feed-forward gain.

nan
K_stiff float

Optional impedance stiffness.

nan
K_damp float

Optional impedance damping.

nan
J_imp float

Optional impedance inertia.

nan
ref_ff_torque float

Optional feed-forward torque reference, in Nm.

nan
ref_impedance_spd float

Optional impedance speed reference, in rad/s.

nan
ref_impedance_acel float

Optional impedance acceleration reference.

nan
Source code in pcp_api/pulsar_actuator_real.pyi
def change_impedance_setpoint(self, setpoint: float, FF_gain: float = nan, K_stiff: float = nan, K_damp: float = nan, J_imp: float = nan, ref_ff_torque: float = nan, ref_impedance_spd: float = nan, ref_impedance_acel: float = nan) -> None:
    """
    Switch to impedance mode and send an impedance setpoint.

    Args:
        setpoint: Position reference, in radians.
        FF_gain: Optional feed-forward gain.
        K_stiff: Optional impedance stiffness.
        K_damp: Optional impedance damping.
        J_imp: Optional impedance inertia.
        ref_ff_torque: Optional feed-forward torque reference, in Nm.
        ref_impedance_spd: Optional impedance speed reference, in rad/s.
        ref_impedance_acel: Optional impedance acceleration reference.
    """
    ...

change_mode(mode)

Change the actuator control mode.

Parameters:

Name Type Description Default
mode Mode

Control mode to activate.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def change_mode(self, mode: 'PulsarActuatorReal.Mode') -> None:
    """
    Change the actuator control mode.

    Args:
        mode: Control mode to activate.
    """
    ...

change_position_setpoint(setpoint, FF_gain=nan, spd_Ki=nan, spd_Kp=nan, pos_Kp=nan, ref_ff_torque=nan)

Switch to position mode and send a position setpoint.

Parameters:

Name Type Description Default
setpoint float

Position reference, in radians.

required
FF_gain float

Optional feed-forward gain.

nan
spd_Ki float

Optional speed-loop integral gain.

nan
spd_Kp float

Optional speed-loop proportional gain.

nan
pos_Kp float

Optional position-loop proportional gain.

nan
ref_ff_torque float

Optional feed-forward torque reference, in Nm.

nan
Source code in pcp_api/pulsar_actuator_real.pyi
def change_position_setpoint(self, setpoint: float, FF_gain: float = nan, spd_Ki: float = nan, spd_Kp: float = nan, pos_Kp: float = nan, ref_ff_torque: float = nan) -> None:
    """
    Switch to position mode and send a position setpoint.

    Args:
        setpoint: Position reference, in radians.
        FF_gain: Optional feed-forward gain.
        spd_Ki: Optional speed-loop integral gain.
        spd_Kp: Optional speed-loop proportional gain.
        pos_Kp: Optional position-loop proportional gain.
        ref_ff_torque: Optional feed-forward torque reference, in Nm.
    """
    ...

change_setpoint(setpoint)

Change the setpoint for the current control mode.

Parameters:

Name Type Description Default
setpoint float

Setpoint value for the active mode.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def change_setpoint(self, setpoint: float) -> None:
    """
    Change the setpoint for the current control mode.

    Args:
        setpoint: Setpoint value for the active mode.
    """
    ...

change_speed_setpoint(setpoint, FF_gain=nan, spd_Ki=nan, spd_Kp=nan, ref_ff_torque=nan)

Switch to speed mode and send a speed setpoint.

Parameters:

Name Type Description Default
setpoint float

Speed reference, in rad/s.

required
FF_gain float

Optional feed-forward gain.

nan
spd_Ki float

Optional speed-loop integral gain.

nan
spd_Kp float

Optional speed-loop proportional gain.

nan
ref_ff_torque float

Optional feed-forward torque reference, in Nm.

nan
Source code in pcp_api/pulsar_actuator_real.pyi
def change_speed_setpoint(self, setpoint: float, FF_gain: float = nan, spd_Ki: float = nan, spd_Kp: float = nan, ref_ff_torque: float = nan) -> None:
    """
    Switch to speed mode and send a speed setpoint.

    Args:
        setpoint: Speed reference, in rad/s.
        FF_gain: Optional feed-forward gain.
        spd_Ki: Optional speed-loop integral gain.
        spd_Kp: Optional speed-loop proportional gain.
        ref_ff_torque: Optional feed-forward torque reference, in Nm.
    """
    ...

change_torque_setpoint(setpoint, id_Kp=nan, id_Ki=nan, iq_Kp=nan, iq_Ki=nan)

Switch to torque mode and send a torque setpoint.

Parameters:

Name Type Description Default
setpoint float

Torque reference, in Nm.

required
id_Kp float

Optional d-axis current proportional gain.

nan
id_Ki float

Optional d-axis current integral gain.

nan
iq_Kp float

Optional q-axis current proportional gain.

nan
iq_Ki float

Optional q-axis current integral gain.

nan
Source code in pcp_api/pulsar_actuator_real.pyi
def change_torque_setpoint(self, setpoint: float, id_Kp: float = nan, id_Ki: float = nan, iq_Kp: float = nan, iq_Ki: float = nan) -> None:
    """
    Switch to torque mode and send a torque setpoint.

    Args:
        setpoint: Torque reference, in Nm.
        id_Kp: Optional d-axis current proportional gain.
        id_Ki: Optional d-axis current integral gain.
        iq_Kp: Optional q-axis current proportional gain.
        iq_Ki: Optional q-axis current integral gain.
    """
    ...

connect(timeout=1.0)

Connect to the actuator by sending a ping request.

Parameters:

Name Type Description Default
timeout float

Maximum time to wait for a pong response, in seconds.

1.0

Returns:

Type Description
bool

True when the actuator responds before the timeout expires.

Source code in pcp_api/pulsar_actuator_real.pyi
def connect(self, timeout: float = 1.0) -> bool:
    """
    Connect to the actuator by sending a ping request.

    Args:
        timeout: Maximum time to wait for a pong response, in seconds.

    Returns:
        ``True`` when the actuator responds before the timeout expires.
    """
    ...

disconnect()

Stop the actuator, unregister its callback, and mark it disconnected.

Source code in pcp_api/pulsar_actuator_real.pyi
def disconnect(self) -> None:
    """Stop the actuator, unregister its callback, and mark it disconnected."""
    ...

enter_bootloader()

Request that the actuator enters bootloader mode.

Source code in pcp_api/pulsar_actuator_real.pyi
def enter_bootloader(self) -> None:
    """Request that the actuator enters bootloader mode."""
    ...

get_feedback()

Return the latest feedback values.

Returns:

Type Description
Dict[Any, Any]

The current feedback dictionary.

Source code in pcp_api/pulsar_actuator_real.pyi
def get_feedback(self) -> Dict[Any, Any]:
    """
    Return the latest feedback values.

    Returns:
        The current feedback dictionary.
    """
    ...

get_items_blocking(items, timeout=1.0)

Request specific feedback items and wait for their response.

Parameters:

Name Type Description Default
items List[PCP_Items]

Feedback items to request. Requests are capped at the protocol batch limit.

required
timeout float

Maximum time to wait for a response, in seconds.

1.0

Returns:

Type Description
Dict[PCP_Items, float]

Mapping from requested feedback items to received values. Returns an

Dict[PCP_Items, float]

empty mapping on timeout.

Source code in pcp_api/pulsar_actuator_real.pyi
def get_items_blocking(self, items: List['PulsarActuatorReal.PCP_Items'], timeout: float = 1.0) -> Dict['PulsarActuatorReal.PCP_Items', float]:
    """
    Request specific feedback items and wait for their response.

    Args:
        items: Feedback items to request. Requests are capped at the protocol
            batch limit.
        timeout: Maximum time to wait for a response, in seconds.

    Returns:
        Mapping from requested feedback items to received values. Returns an
        empty mapping on timeout.
    """
    ...

get_mode()

Return the current actuator control mode.

Returns:

Type Description
Mode

The cached control mode, or a mode read from the actuator.

Source code in pcp_api/pulsar_actuator_real.pyi
def get_mode(self) -> 'PulsarActuatorReal.Mode':
    """
    Return the current actuator control mode.

    Returns:
        The cached control mode, or a mode read from the actuator.
    """
    ...

get_parameters(parameters, timeout=1.0)

Read actuator parameters.

Parameters:

Name Type Description Default
parameters List[PCP_Parameters]

Parameters to request. Long requests are split across protocol-sized batches.

required
timeout float

Maximum time to wait for each response, in seconds.

1.0

Returns:

Type Description
Dict[PCP_Parameters, float]

Mapping from parameter enum to the most recently received value.

Source code in pcp_api/pulsar_actuator_real.pyi
def get_parameters(self, parameters: List['PulsarActuatorReal.PCP_Parameters'], timeout: float = 1.0) -> Dict['PulsarActuatorReal.PCP_Parameters', float]:
    """
    Read actuator parameters.

    Args:
        parameters: Parameters to request. Long requests are split across
            protocol-sized batches.
        timeout: Maximum time to wait for each response, in seconds.

    Returns:
        Mapping from parameter enum to the most recently received value.
    """
    ...

get_parameters_all()

Read all known actuator parameters.

Returns:

Type Description
Dict[PCP_Parameters, float]

Mapping from parameter enum to current value.

Source code in pcp_api/pulsar_actuator_real.pyi
def get_parameters_all(self) -> Dict['PulsarActuatorReal.PCP_Parameters', float]:
    """
    Read all known actuator parameters.

    Returns:
        Mapping from parameter enum to current value.
    """
    ...

internal_change_position_setpoint(setpoint, pos_Ki=nan, pos_Kd=nan, pos_b0=nan, pos_wc=nan, pos_wo=nan, spd_b0=nan, spd_wc=nan, spd_wo=nan)

Send an internal position-controller setpoint packet.

Source code in pcp_api/pulsar_actuator_real.pyi
def internal_change_position_setpoint(self, setpoint: float, pos_Ki: float = nan, pos_Kd: float = nan, pos_b0: float = nan, pos_wc: float = nan, pos_wo: float = nan, spd_b0: float = nan, spd_wc: float = nan, spd_wo: float = nan) -> None:
    """Send an internal position-controller setpoint packet."""
    ...

internal_change_speed_setpoint(setpoint, spd_b0=nan, spd_wc=nan, spd_wo=nan)

Send an internal speed-controller setpoint packet.

Source code in pcp_api/pulsar_actuator_real.pyi
def internal_change_speed_setpoint(self, setpoint: float, spd_b0: float = nan, spd_wc: float = nan, spd_wo: float = nan) -> None:
    """Send an internal speed-controller setpoint packet."""
    ...

is_valid_actuator_address(address) staticmethod

Return whether address is a valid actuator network address.

Source code in pcp_api/pulsar_actuator_real.pyi
@staticmethod
def is_valid_actuator_address(address: int) -> bool:
    """Return whether ``address`` is a valid actuator network address."""
    ...

restore_factory_parameters(settle_time=1.0)

Restore user-writable actuator parameters to firmware factory defaults.

Parameters:

Name Type Description Default
settle_time float

Seconds to wait after sending the restore command before returning. The actuator may briefly stop answering pings while it applies the restored configuration.

1.0

This clears the saved configuration values used for parameters such as gains, limits, profile settings, CAN speed, and direction inversion. It does not erase factory electrical-machine calibration data.

Source code in pcp_api/pulsar_actuator_real.pyi
def restore_factory_parameters(self, settle_time: float = 1.0) -> None:
    """
    Restore user-writable actuator parameters to firmware factory defaults.

    Args:
        settle_time: Seconds to wait after sending the restore command before
            returning. The actuator may briefly stop answering pings while it
            applies the restored configuration.

    This clears the saved configuration values used for parameters such as
    gains, limits, profile settings, CAN speed, and direction inversion. It
    does not erase factory electrical-machine calibration data.
    """
    ...

save_config()

Persist the current actuator configuration to non-volatile memory.

Source code in pcp_api/pulsar_actuator_real.pyi
def save_config(self) -> None:
    """Persist the current actuator configuration to non-volatile memory."""
    ...

send_ping(timeout=1.0)

Send a ping message and wait for a pong response.

Parameters:

Name Type Description Default
timeout float

Maximum time to wait for a pong response, in seconds.

1.0

Returns:

Type Description
bool

True if a pong response is received before the timeout expires.

Source code in pcp_api/pulsar_actuator_real.pyi
def send_ping(self, timeout: float = 1.0) -> bool:
    """
    Send a ping message and wait for a pong response.

    Args:
        timeout: Maximum time to wait for a pong response, in seconds.

    Returns:
        ``True`` if a pong response is received before the timeout expires.
    """
    ...

set_can_high_speed(high_speed)

Enable or disable CAN BRS/high-speed operation for this actuator.

Source code in pcp_api/pulsar_actuator_real.pyi
def set_can_high_speed(self, high_speed: bool) -> None:
    """Enable or disable CAN BRS/high-speed operation for this actuator."""
    ...

set_error_callback(callback)

Set the callback invoked when actuator errors are received.

Parameters:

Name Type Description Default
callback Callable[[int, dict], None]

Callable receiving the actuator address and error data.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_error_callback(self, callback: Callable[[int, dict], None]) -> None:
    """
    Set the callback invoked when actuator errors are received.

    Args:
        callback: Callable receiving the actuator address and error data.
    """
    ...

set_feedback_callback(callback)

Set the callback invoked when feedback data is received.

Parameters:

Name Type Description Default
callback Callable[[int, dict], None]

Callable receiving the actuator address and feedback data.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_feedback_callback(self, callback: Callable[[int, dict], None]) -> None:
    """
    Set the callback invoked when feedback data is received.

    Args:
        callback: Callable receiving the actuator address and feedback data.
    """
    ...

set_feedback_items(items)

Configure the high-frequency feedback item stream.

Parameters:

Name Type Description Default
items List[PCP_Items]

Feedback items to include in telemetry packets.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_feedback_items(self, items: List['PulsarActuatorReal.PCP_Items']) -> None:
    """
    Configure the high-frequency feedback item stream.

    Args:
        items: Feedback items to include in telemetry packets.
    """
    ...

set_feedback_rate(rate)

Configure the high-frequency feedback rate.

Parameters:

Name Type Description Default
rate Union[Rates, int]

A Rates divider enum or an integer target rate in Hz. The divider is rounded to the nearest integer. Use Rates.DISABLED or 0 to disable feedback.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_feedback_rate(self, rate: Union['PulsarActuatorReal.Rates', int]) -> None:
    """
    Configure the high-frequency feedback rate.

    Args:
        rate: A ``Rates`` divider enum or an integer target rate in Hz. The
            divider is rounded to the nearest integer. Use ``Rates.DISABLED``
            or ``0`` to disable feedback.
    """
    ...

set_home_position()

Set the current actuator position as the zero reference.

Source code in pcp_api/pulsar_actuator_real.pyi
def set_home_position(self) -> None:
    """Set the current actuator position as the zero reference."""
    ...

set_low_freq_feedback_callback(callback)

Deprecated compatibility shim for the removed low-frequency callback.

Source code in pcp_api/pulsar_actuator_real.pyi
def set_low_freq_feedback_callback(self, callback: Callable[[Any], None]) -> None:
    """Deprecated compatibility shim for the removed low-frequency callback."""
    ...

set_parameters(parameters)

Write actuator parameters.

Parameters:

Name Type Description Default
parameters Dict[PCP_Parameters, float]

Mapping from parameter enum to the float value to write.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_parameters(self, parameters: Dict['PulsarActuatorReal.PCP_Parameters', float]) -> None:
    """
    Write actuator parameters.

    Args:
        parameters: Mapping from parameter enum to the float value to write.
    """
    ...

set_speed_performance(performance)

Set the actuator speed-control performance preset.

Parameters:

Name Type Description Default
performance SpeedPerformance

Speed performance preset to apply.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_speed_performance(self, performance: 'PulsarActuatorReal.SpeedPerformance') -> None:
    """
    Set the actuator speed-control performance preset.

    Args:
        performance: Speed performance preset to apply.
    """
    ...

set_torque_performance(performance)

Set the actuator torque-control performance preset.

Parameters:

Name Type Description Default
performance TorquePerformance

Torque performance preset to apply.

required
Source code in pcp_api/pulsar_actuator_real.pyi
def set_torque_performance(self, performance: 'PulsarActuatorReal.TorquePerformance') -> None:
    """
    Set the actuator torque-control performance preset.

    Args:
        performance: Torque performance preset to apply.
    """
    ...

start()

Enable actuator control.

Source code in pcp_api/pulsar_actuator_real.pyi
def start(self) -> None:
    """Enable actuator control."""
    ...

stop()

Disable actuator control.

Source code in pcp_api/pulsar_actuator_real.pyi
def stop(self) -> None:
    """Disable actuator control."""
    ...

PulsarActuatorScannerReal

PulsarActuatorScannerReal scans a PCP network for responding physical actuators.

Bases: PulsarActuatorReal

Discover real actuators through a connected CAN adapter.

Source code in pcp_api/pulsar_actuator_real.pyi
class PulsarActuatorScannerReal(PulsarActuatorReal):
    """Discover real actuators through a connected CAN adapter."""

    def __init__(self, adapter_handler: Any, logger: Optional[logging.Logger] = None) -> None:
        """Initialize a scanner using an adapter-local address."""
        ...

    def scan(self, begin: int = 1, end: int = ...) -> List[int]:
        """
        Scan an address range for responding actuator devices.

        Args:
            begin: First address to probe.
            end: Last address to probe.

        Returns:
            Addresses that responded to ping.
        """
        ...

    @property
    def is_connected(self) -> bool:
        """Return whether the scanner is connected to a valid CAN adapter."""
        ...

is_connected property

Return whether the scanner is connected to a valid CAN adapter.

__init__(adapter_handler, logger=None)

Initialize a scanner using an adapter-local address.

Source code in pcp_api/pulsar_actuator_real.pyi
def __init__(self, adapter_handler: Any, logger: Optional[logging.Logger] = None) -> None:
    """Initialize a scanner using an adapter-local address."""
    ...

scan(begin=1, end=...)

Scan an address range for responding actuator devices.

Parameters:

Name Type Description Default
begin int

First address to probe.

1
end int

Last address to probe.

...

Returns:

Type Description
List[int]

Addresses that responded to ping.

Source code in pcp_api/pulsar_actuator_real.pyi
def scan(self, begin: int = 1, end: int = ...) -> List[int]:
    """
    Scan an address range for responding actuator devices.

    Args:
        begin: First address to probe.
        end: Last address to probe.

    Returns:
        Addresses that responded to ping.
    """
    ...