Example #1
0
def main(argv):
    ardu = arduino.Arduino()
    motor_left = arduino.Motor(ardu, 0, 9, 8) # current pin, direction pin, pwm pin
    motor_right = arduino.Motor(ardu, 0, 7, 6)
    bump_right = arduino.DigitalInput(ardu, 22)
    bump_left = arduino.DigitalInput(ardu, 23)
    ardu.run() # start ardu comm thread

    vis = Vision(True)
    end_now = False
    start_time = time.time()
    try:
        while not end_now:
            if time.time() - start_time  > 180:
                break
            if bump_right.getValue():
                print 'right bump'
                motor_right.setSpeed(-200)
                motor_left.setSpeed(-50)
                cv2.waitKey(1000)
                motor_right.setSpeed(-100)
                motor_left.setSpeed(100)
                cv2.waitKey(500)
                motor_right.setSpeed(0)
                motor_left.setSpeed(0)
            if bump_left.getValue():
                print 'left bump'
                motor_right.setSpeed(-50)
                motor_left.setSpeed(-200)
                cv2.waitKey(1000)
                motor_right.setSpeed(100)
                motor_left.setSpeed(-100)
                cv2.waitKey(500)
                motor_right.setSpeed(0)
                motor_left.setSpeed(0)
            vis.grab_frame()
            feats = vis.detect_balls(side)
            if len(feats) >0:
                angle = int(feats[0].angle)
                print angle 
                motor_right.setSpeed( 64 - angle*4 )
                motor_left.setSpeed( 64 + angle*4 )
            else:
                print "No ball"
                motor_right.setSpeed(-50)
                motor_left.setSpeed(50)
            cv2.waitKey(20)
    except KeyboardInterrupt:
        print "ending..."
    time.sleep(0.1)
    motor_right.setSpeed(0)
    motor_left.setSpeed(0)
    time.sleep(0.1)
    ardu.stop()
Example #2
0
def main(argv):
    # side = "red"

    # try:
    #     opts, args = getopt.getopt(argv,'', ['color='])
    # except getopt.GetoptError:
    #     print "usage: 'main.py --color=<c>', where <c> is 'red' or 'green'"
    # for opt, arg in opts:
    #     if opt == '--color':
    #         if arg == 'green':
    #             side = "green"
    #             print 'looking for green balls'
    #         elif arg == 'red':
    #             print 'looking for red balls'

    ardu = arduino.Arduino()
    motor_left = arduino.Motor(ardu, 0, 9, 8) # current pin, direction pin, pwm pin
    motor_right = arduino.Motor(ardu, 0, 7, 6)
    motor_pickup = arduino.Motor(ardu, 0, 12, 11)
    bump_right = arduino.DigitalInput(ardu, 22)
    bump_left = arduino.DigitalInput(ardu, 23)
    ardu.run()

    vis = Vision(True)
    end_now = False

    start_code = bump_left.getValue() - bump_right.getValue()
    while start_code == 0:
        start_code = bump_left.getValue() - bump_right.getValue()
    if start_code > 0:
        side = "green"
        print "green"
    else:
        side = "red"
        print "red"
    cv2.waitKey(1000)

    motor_pickup.setSpeed(60)

    start_time = time.time()
    try:
        while not end_now:
            time_elapsed = time.time() - start_time
            if bump_right.getValue():
                print 'right bump'
                motor_right.setSpeed(-200)
                motor_left.setSpeed(-50)
                cv2.waitKey(1000)
                motor_right.setSpeed(-100)
                motor_left.setSpeed(100)
                cv2.waitKey(500)
                motor_right.setSpeed(0)
                motor_left.setSpeed(0)
            if bump_left.getValue():
                print 'left bump'
                motor_right.setSpeed(-50)
                motor_left.setSpeed(-200)
                cv2.waitKey(1000)
                motor_right.setSpeed(100)
                motor_left.setSpeed(-100)
                cv2.waitKey(500)
                motor_right.setSpeed(0)
                motor_left.setSpeed(0)
            vis.grab_frame()
            if time_elapsed < 120:
                feat_pos = vis.detect_balls(side)
            else:
                feat_pos = vis.detect_walls()
            if feat_pos != None:
                angle = int(feat_pos)
                print angle 
                motor_right.setSpeed(60 - angle)
                motor_left.setSpeed(60 + angle)
            else:
                print "No ball"
                motor_right.setSpeed(-40)
                motor_left.setSpeed(40)
            cv2.waitKey(20)
            if time_elapsed > 170:
                end_now = True
                break
    except KeyboardInterrupt:
        print "ending..."
    time.sleep(0.1)
    motor_right.setSpeed(0)
    motor_left.setSpeed(0)
    motor_pickup.setSpeed(0)
    time.sleep(0.1)
    ardu.stop()