Skip to main content
Low-level async interface for individual motors. The API is Python, but every CAN frame is sent and received by the Rust axol-rt transport; Python never opens SocketCAN. Most users work through Axol — this layer is exposed for diagnostics, custom control modes, and bench testing individual motors.

Motor methods

Configuration parameters

Both motor families expose a named configuration table — MyActuator’s 0xC0 parameters and Damiao’s 0x7FF registers — for servicing a motor over CAN without the vendor setup software. These back the motor.dump-config, motor.set-config, and motor.restore-config commands; the CLI is the usual way in, but the same surface is on Motor.
MyActuator motors apply a low undervoltage threshold (LOW_VOLTAGE, -2 V) on enable() so a brief bus-voltage sag can’t latch the level-2 undervoltage fault. Parameters whose ParamSpec.min_firmware is newer than the motor’s firmware are left out of dumps and restores, and read_config / write_config raise MotorError for them. Read-only parameters are never written, and protected ones (factory calibration and identity, CAN IDs, baud rate) are skipped by a restore unless you opt in, since rewriting them can leave a motor unable to commutate or unreachable on the bus.

ControlMode values

MotorStatus values

OK, DISABLED, OVER_VOLTAGE, UNDER_VOLTAGE, OVER_CURRENT, OVER_TEMPERATURE, MOS_OVER_TEMP, ROTOR_OVER_TEMP, LOST_COMM, OVERLOAD, MOTOR_STALL*, ENCODER_ERROR*, CALIBRATION_ERROR*, POWER_OVERRUN*, SPEEDING*, UNKNOWN * MyActuator only

Joint → driver mapping