Sabertooth

javadoc

The Sabertooth 2X25 is a dual motor driver. It is suitable for high powered robots - up to 100lbs in combat or 300lbs for general purpose robotics.

 
Out of the box, the Sabertooth can supply two DC brushed motors with up to 25A each. Peak currents of 50A per channel are achievable for a few seconds.
 
 
 
 
FTDI cable from Computer to Sabertooth is all that is needed.
 
 
 

References

 

Examples:


#file : service/Sabertooth.py edit raw
#########################################
# Sabertooth.py
# categories: motor
# more info @: http://myrobotlab.org/service/Sabertooth
#########################################
# uncomment for virtual hardware
from org.myrobotlab.service import Serial
# virtual = True

# sabertooth serial port - if on windows might be COM4
# port = "COM14"
# port = "/dev/ttyUSB0"
# I use udev rules to always make it the same port
port = "/dev/ftdi0"

# controller index for the joystick
controllerIndex = 0

# start optional virtual serial service, used for test
if ("virtual" in globals() and virtual):
    # use static method Serial.connectVirtualUart to create
    # a virtual hardware uart for the serial service to
    # connect to
    uart = Serial.connectVirtualUart(port)
    uart.logRecv(True) # dump bytes sent from sabertooth

# TODO - list & print controllers
# TODO - list & print controllers
# TODO - list & print axis

# start the services
sabertooth = Runtime.start("sabertooth","Sabertooth")
m1 = Runtime.start("m1","MotorPort")
m2 = Runtime.start("m2","MotorPort")
joy = Runtime.start("joy","Joystick")
joy.setController(controllerIndex)

# configure services
m1.setPort("m1")
m2.setPort("m2")

# in some cases its necessary to "invert" a motor
m1.setInverted(True)
m2.setInverted(True)

# attach services
sabertooth.attach(m1)
sabertooth.attach(m2)
m1.attach(joy.getAxis("y"))
m2.attach(joy.getAxis("rz"))

# FIXME - sabertooth.attach(motor1) & sabertooth.attach(motor2)
# FIXME - motor1.attach(joystick) !
sabertooth.connect(port)

m1.stop();
m2.stop();

# call the function autoTest if you want code to
# run through a test vs joystick input
def autoTest():
    # speed up the motor
    for x in range(0,100):
      pwr = x * .01
      print('power ', pwr)
      m1.move(pwr)
      sleep(0.01)

    sleep(1)

    # slow down the motor
    for x in range(100, -1, -1):
      pwr = x * .01
      print('power ', pwr)
      m1.move(pwr)
      sleep(0.01)

    # move motor clockwise
    m1.move(0.3)
    sleep(1)
    m1.stop()

    # move motor counter-clockwise
    m1.move(-0.3)
    sleep(1)
    m1.stop()

sleep(3)
autoTest()