Package: mini-cheetah-motor-driver-socketcan
Python Motor Driver for Mini Cheetah-type Actuators from T-Motor/CubeMarsThis driver was developed at the Underactuated Lab in Robotics Innovation Center at DFKI GmbH, Bremen.It assumes the use of a CAN to USB adapter (such asPEAK System's PCAN-USBorESD's CAN-USB/2) connected to a linux (tested on Ubuntu) computer. The SocketCAN interface is used, thus allowing the use of Python Socket library.Initial tests show communication (send-reply) frequencies of ~800Hz  using PCAN-USB and ~1500Hz using ESD CAN-USB/2 with a single motor connected.Dependencies:bitstringInstall via:pip3 install bitstringDocumentationUseful videos:From T-MotorFrom SkyentificMotor DatasheetsBen Katz DocumentationPre-requisites:Setting up the CAN interface:Run this command and make sure thatcan0(or any other can interface depending on the system)shows up as an interface after connecting the USB cable to your laptop:ip link showConfigure thecan0interface to have a 1 Mbaud communication frequency:sudo ip link set can0 type can bitrate 1000000To bring up thecan0interface, run:sudo ip link set up can0To change motor parameters such as CAN ID or to calibrate the encoder, a serial connection is used. The serial terminal used on linux for this purpose isscreen. Example usage:sudo apt-get install screen
screen /dev/ttyUSB0 921600Usage:Import:from motor_driver.canmotorlib import CanMotorControllerif installed viapip. Otherwise, adjust import statement based on system'sPYTHONPATH(e.g. when cloned from GitHub).Example Motor Initialization:motor = CanMotorController(can_socket='can0', motor_id=0x01, motor_type='AK80_6_V2', socket_timeout=0.5)Available Functions:enable_motor()disable_motor()set_zero_position()send_deg_command(position_in_degrees, velocity_in_degrees, Kp, Kd, tau_ff):send_rad_command(position_in_radians, velocity_in_radians, Kp, Kd, tau_ff):change_motor_constants(P_MIN_NEW, P_MAX_NEW, V_MIN_NEW, V_MAX_NEW, KP_MIN_NEW, KP_MAX_NEW, KD_MIN_NEW, KD_MAX_NEW, T_MIN_NEW, T_MAX_NEW)All motor communication functions return current position, velocity, torque in SI units except forsend_deg_command.change_motor_constantsdoes not return anything.Supported Motor Configurations:AK80-6 (From Cubemars, Firmware versions V1, V1.1, and V2):motor_type='AK80_6_V1',motor_type='AK80_6_V1p1'andmotor_type='AK80_6_V2'AK80-9 (From Cubemars, Firmware version V1.1 and V2):motor_type='AK80_9_V1p1'andmotor_type='AK80_9_V2'AK70-10 (From Cubemars, Firmware version V1.1):motor_type='AK70_10_V1p1'AK10-9 (From Cubemars, Firmware version V1.1):motor_type='AK10_9_V1p1'.TODO:The temperature and error codes are received but not yet decoded for the new firmware for this motor.# Working parameters for AK80-6 V1.0 firmware
AK80_6_V1_PARAMS = {
                "P_MIN" : -95.5,
                "P_MAX" : 95.5,
                "V_MIN" : -45.0,
                "V_MAX" : 45.0,
                "KP_MIN" : 0.0,
                "KP_MAX" : 500,
                "KD_MIN" : 0.0,
                "KD_MAX" : 5.0,
                "T_MIN" : -18.0,
                "T_MAX" : 18.0,
                "AXIS_DIRECTION" : -1
                }

# Working parameters for AK80-6 V1.1 firmware
AK80_6_V1p1_PARAMS = {
                "P_MIN" : -12.5,
                "P_MAX" : 12.5,
                "V_MIN" : -22.5,
                "V_MAX" : 22.5,
                "KP_MIN" : 0.0,
                "KP_MAX" : 500,
                "KD_MIN" : 0.0,
                "KD_MAX" : 5.0,
                "T_MIN" : -12.0,
                "T_MAX" : 12.0,
                "AXIS_DIRECTION" : -1
                }

# Working parameters for AK80-6 V2.0 firmware
AK80_6_V2_PARAMS = {
                "P_MIN" : -12.5,
                "P_MAX" : 12.5,
                "V_MIN" : -38.2,
                "V_MAX" : 38.2,
                "KP_MIN" : 0.0,
                "KP_MAX" : 500.0,
                "KD_MIN" : 0.0,
                "KD_MAX" : 5.0,
                "T_MIN" : -12.0,
                "T_MAX" : 12.0,
                "AXIS_DIRECTION" : 1
                }

# Working parameters for AK80-9 V1.1 firmware
AK80_9_V1p1_PARAMS = {
                "P_MIN" : -12.5,
                "P_MAX" : 12.5,
                "V_MIN" : -22.5,
                "V_MAX" : 22.5,
                "KP_MIN" : 0.0,
                "KP_MAX" : 500,
                "KD_MIN" : 0.0,
                "KD_MAX" : 5.0,
                "T_MIN" : -18.0,
                "T_MAX" : 18.0,
                "AXIS_DIRECTION" : 1
                }

# Working parameters for AK80-9 V2.0 firmware
AK80_9_V2_PARAMS = {
                    "P_MIN" : -12.5,
                    "P_MAX" : 12.5,
                    "V_MIN" : -25.64,
                    "V_MAX" : 25.64,
                    "KP_MIN" : 0.0,
                    "KP_MAX" : 500.0,
                    "KD_MIN" : 0.0,
                    "KD_MAX" : 5.0,
                    "T_MIN" : -18.0,
                    "T_MAX" : 18.0,
                    "AXIS_DIRECTION" : 1
                    }

// Working parameters for AK70-10 V1.1 firmware
AK70_10_V1p1_params = {
                      "P_MIN" :  -12.5,
                      "P_MAX" :  12.5,
                      "V_MIN" :  -50,
                      "V_MAX" :  50,
                      "KP_MIN" :  0,
                      "KP_MAX" :  500,
                      "KD_MIN" :  0,
                      "KD_MAX" :  5,
                      "T_MIN" :  -24.0,
                      "T_MAX" :  24.0,
                      "AXIS_DIRECTION" :  1
                    }

# Working parameters for AK10-9 V1.1 firmware
AK10_9_V1p1_PARAMS = {
                "P_MIN" : -12.5,
                "P_MAX" : 12.5,
                "V_MIN" : -50.0,
                "V_MAX" : 50.0,
                "KP_MIN" : 0.0,
                "KP_MAX" : 500,
                "KD_MIN" : 0.0,
                "KD_MAX" : 5.0,
                "T_MIN" : -65.0,
                "T_MAX" : 65.0,
                "AXIS_DIRECTION" : -1
                }To add a new constants configuration use thechange_motor_constantsfunction or create an issue with the constants and motor information on the GitHub page to be added to the driver.Known IssuesCurrently, the driver does not support multiple CAN busses i.e. multiple CAN2USB devices. The fix for this is in the works...As this is experimental software, there might be other unknown issues.