예제 #1
0
파일: logo.py 프로젝트: hopkira/3dvision
def init_rc():
    global rc
    global rc_address
    #  Initialise the roboclaw motorcontroller
    print("logo: initialising roboclaw driver...")
    from roboclaw_3 import Roboclaw
    rc_address = 0x80
    rc = Roboclaw("/dev/roboclaw", 115200)
    rc.Open()
    # Get roboclaw version to test if is attached
    version = rc.ReadVersion(rc_address)
    if version[0] is False:
        print("logo init: roboclaw get version failed")
        sys.exit()
    else:
        print("logo init:",repr(version[1]))

    # Set motor controller variables to those required by K9
    rc.SetM1VelocityPID(rc_address, M1_P, M1_I, M1_D, M1_QPPS)
    rc.SetM2VelocityPID(rc_address, M2_P, M2_I, M2_D, M2_QPPS)
    rc.SetMainVoltages(rc_address,240,292) # 24V min, 29.2V max
    rc.SetPinFunctions(rc_address,2,0,0)
    # Zero the motor encoders
    rc.ResetEncoders(rc_address)

    # Print Motor PID Settings
    m1pid = rc.ReadM1VelocityPID(rc_address)
    m2pid = rc.ReadM2VelocityPID(rc_address)
    print("logo init: m1 p: " + str(m1pid[1]) + ", i:" + str(m1pid[2]) + ", d:" + str(m1pid[3]))
    print("m2 p: " + str(m2pid[1]) + ", i:" + str(m2pid[2]) + ", d:" + str(m2pid[3]))
    # Print Min and Max Main Battery Settings
    minmaxv = rc.ReadMinMaxMainVoltages(rc_address) # get min max volts
    print ("logo init: min main battery: " + str(int(minmaxv[1])/10.0) + "V")
    print ("logo init: max main battery: " + str(int(minmaxv[2])/10.0) + "V")
    # Print S3, S4 and S5 Modes
    S3mode=['Default','E-Stop (latching)','E-Stop','Voltage Clamp','Undefined']
    S4mode=['Disabled','E-Stop (latching)','E-Stop','Voltage Clamp','M1 Home']
    S5mode=['Disabled','E-Stop (latching)','E-Stop','Voltage Clamp','M2 Home']
    pinfunc = rc.ReadPinFunctions(rc_address)
    print ("logo init: s3 pin: " + S3mode[pinfunc[1]])
    print ("logo init: s4 pin: " + S4mode[pinfunc[2]])
    print ("logo init: s5 pin: " + S5mode[pinfunc[3]])
    print("logo init: roboclaw motor controller initialised...")
예제 #2
0
class Swag:
    def __init__(self):
        self.rc = Roboclaw("/dev/ttyACM0", 115200)  # Linux comport name
        self.address = 0x80
        self.rc.Open()
        self.ready = True
        version = self.rc.ReadVersion(self.address)
        if not version[0]:
            print("GETVERSION Failed")
            exit()
        else:
            print(repr(version[1]))
            print("Car main battery voltage at start of script: ", self.rc.ReadMainBatteryVoltage(self.address))
        for i in range(1000):
            try:
                self.rc.ForwardM2(self.address, i)
                time.sleep(0.1)
                print(i)
            except Exception as e:
                print(e)


    def control_speed(self, mc, adr, speed_m1, speed_m2):
        # speedM1 = leftMotorSpeed, speedM2 = rightMotorSpeed
        if speed_m1 > 0:
            mc.ForwardM1(adr, speed_m1)
        elif speed_m1 < 0:
            speed_m1 = speed_m1 * (-1)
            mc.BackwardM1(adr, speed_m1)
        else:
            mc.ForwardM1(adr, 0)

        if speed_m2 > 0:
            mc.ForwardM2(adr, speed_m2)
        elif speed_m2 < 0:
            speed_m2 = speed_m2 * (-1)
            mc.BackwardM2(adr, speed_m2)
        else:
            mc.ForwardM2(adr, 0)
예제 #3
0
import time
from roboclaw_3 import Roboclaw

#Windows comport name
rc = Roboclaw("/dev/ttyACM0", 115200)
#Linux comport name
#rc = Roboclaw("/dev/ttyACM0",115200)

rc.Open()

while 1:
    #Get version string
    version = rc.ReadVersion(0x80)
    if version[0] == False:
        print("GETVERSION Failed")
    else:
        print(repr(version[1]))
    time.sleep(1)
    print("Speed1:")
    if speed1[0]:
        print(speed1[1])
    else:
        print("failed")
    print("Speed2:")
    if speed2[0]:
        print(speed2[1])
    else:
        print("failed")


rc.open()
address = 0x80

version = rc.ReadVersion(address)

if not version[0]:
    print("GET VERSION Failed")
else:
    print(repr(version[1]))

nb = 0
while nb < 100:
    rc.SpeedM1(address, 2000)
    rc.SpeedM2(address, -2000)
    for i in range(0, 200):
        display_speed()
        time.sleep(0.01)

    rc.SpeedM1(address, -2000)
예제 #5
0
class Footballmachine:
    def __init__(self, address=0x80, baudrate=38400, port="/dev/ttyS0"):
        self.address = address
        self.rc = Roboclaw(port, baudrate)
        self.rc.Open()
        version = self.rc.ReadVersion(self.address)
        if version[0] == False:
            print("GETVERSION Failed - check power supply and conections")
            return
        else:
            print(repr(version[1]))

    def has_angle_motor_stopped_moving(self):
        interval = 1
        first = self.rc.ReadEncM1(self.address)
        sleep(interval)
        second = self.rc.ReadEncM1(self.address)
        while (first != second):
            first = self.rc.ReadEncM1(self.address)
            sleep(interval)
            second = self.rc.ReadEncM1(self.address)

    def init_motors(self):
        print("Initializing all motors...")
        self.rc.BackwardM1(self.address, 126)
        self.has_angle_motor_stopped_moving()
        self.rc.BackwardM1(self.address, 0)
        self.rc.ResetEncoders(self.address)
        print("Angle encoder:", self.rc.ReadEncM1(self.address)[1])

    def displayspeed(self):
        enc1 = self.rc.ReadEncM1(self.address)
        enc2 = self.rc.ReadEncM2(self.address)
        speed1 = self.rc.ReadSpeedM1(self.address)
        speed2 = self.rc.ReadSpeedM2(self.address)

        print(("Encoder1:"), end=' ')
        if (enc1[0] == 1):
            print(enc1[1], end=' ')
            print(format(enc1[2], '02x'), end=' ')
        else:
            print("failed", end=' ')
        print("Encoder2:", end=' ')
        if (enc2[0] == 1):
            print(enc2[1], end=' ')
            print(format(enc2[2], '02x'), end=' ')
        else:
            print("failed ", end=' ')
        print("Speed1:", end=' ')
        if (speed1[0]):
            print(speed1[1], end=' ')
        else:
            print("failed", end=' ')
        print(("Speed2:"), end=' ')
        if (speed2[0]):
            print(speed2[1])
        else:
            print("failed ")

    def speed_to_QPPS(self, speed):
        radius = 0.1
        encoder_pulses_per_rad = 1024 / 2
        angular_speed = speed / (2 * pi * radius)
        QPPS = encoder_pulses_per_rad * angular_speed
        return int(QPPS)

    def angle_to_QP(self, angle):
        range_min = 0
        range_max = 225
        angle_min = 0
        angle_max = 55
        a1 = int(angle) - angle_min
        a2 = range_max - range_min
        a3 = angle_max - angle_min
        angle = int((a1 * a2) / a3 + range_min)
        return angle

    def set_angle(self, angle):
        print("Set_angle: ", angle)
        angle = self.angle_to_QP(angle)
        print("Target position M1:", angle)
        self.rc.SpeedAccelDeccelPositionM1(self.address, 10, 10, 10, angle, 0)
        self.has_angle_motor_stopped_moving()
        print("Angle encoder:", self.rc.ReadEncM1(self.address)[1])

    def set_speed_then_stop(self, speed):
        print("Set_speed: ", speed)
        speed = self.speed_to_QPPS(int(speed))
        self.rc.SpeedAccelM2(self.address, 22000, speed)
        sleep(4)
        self.rc.SpeedAccelM2(self.address, 22000, 0)

    def set_speed(self, speed):
        print("Set_speed: ", speed)
        speed = self.speed_to_QPPS(int(speed))
        self.rc.SpeedAccelM2(self.address, 22000, speed)
        for i in range(0, 50):
            print(("{} # ".format(i)), end=' ')
            self.displayspeed()
            sleep(0.1)

    def check_encoders(self, seconds):
        for i in range(0, seconds):
            print(("{} # ".format(i)), end=' ')
            self.displayspeed()
            sleep(0.1)