예제 #1
0
    def __init__(self):
        self.brick = nxt.locator.find_one_brick()
        self.__init_light_sensor()
        self.__init_motors()

        self.scanner = BarcodeServer(self.callback)
        self.location_found = False
예제 #2
0
    def __init__(self):
        self.kb = KnowledgeBase()

        self.location = BarcodeServer(self.location_callback)
        self.flight_path = FlightPath()
        self.motion = Motion(self.kb)

        self.node_a = NodeAServer()
예제 #3
0
class Controller(object):

    def __init__(self):
        self.kb = KnowledgeBase()



        self.location = BarcodeServer(self.location_callback)
        self.flight_path = FlightPath()
        self.motion = Motion(self.kb)

        self.node_a = NodeAServer()


    def _init_fp(self):
        self.flight_path.build_full_graph()



    def location_callback(self, position):
        """
        Location callback.

        This function is used by the threaded location module to
        update the current location for the controller.

        Parameters
        ----------
        position : str
            String representation of six digit number indicating current position.

        """
        self.kb.current_location = position
        # print "Position: ", self.kb.current_location
        
        

    def run(self):
        self.location.start()
        self.node_a.start()

        path = [100001, 100002, 100003, 100004, 100005, 100006, 100007]

        for p in path:
            self.motion.move_until_location(p)
            if p == 100001:
                tic = time.time()
            else:
                toc = time.time()
                self.kb.duration.append(toc-tic)
                tic = time.time()
        print "kb.duration: ", self.kb.duration



    def shutdown(self):
        self.motion.shutdown()
        self.node_a.join()
예제 #4
0
class Controller(object):
    def __init__(self):
        self.kb = KnowledgeBase()

        self.location = BarcodeServer(self.location_callback)
        self.flight_path = FlightPath()
        self.motion = Motion(self.kb)

        self.node_a = NodeAServer()

    def _init_fp(self):
        self.flight_path.build_full_graph()

    def location_callback(self, position):
        """
        Location callback.

        This function is used by the threaded location module to
        update the current location for the controller.

        Parameters
        ----------
        position : str
            String representation of six digit number indicating current position.

        """
        self.kb.current_location = position
        # print "Position: ", self.kb.current_location

    def run(self):
        self.location.start()
        self.node_a.start()

        path = [100001, 100002, 100003, 100004, 100005, 100006, 100007]

        for p in path:
            self.motion.move_until_location(p)
            if p == 100001:
                tic = time.time()
            else:
                toc = time.time()
                self.kb.duration.append(toc - tic)
                tic = time.time()
        print "kb.duration: ", self.kb.duration

    def shutdown(self):
        self.motion.shutdown()
        self.node_a.join()
예제 #5
0
    def __init__(self):
        self.brick = nxt.locator.find_one_brick()
        self.__init_light_sensor()
        self.__init_motors()

        self.scanner = BarcodeServer(self.callback)
        self.location_found = False
        self.location = ''
예제 #6
0
    def __init__(self):
        self.kb = KnowledgeBase()



        self.location = BarcodeServer(self.location_callback)
        self.flight_path = FlightPath()
        self.motion = Motion(self.kb)

        self.node_a = NodeAServer()
예제 #7
0
class ThreadedTest(object):
    def __init__(self):
        self.scanner = BarcodeServer(self.callback)


    def callback(self, barcode):
        print "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        print "\n current location: ", barcode
        print "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"

    def run(self):
        self.scanner.start()
        while True:
            print time.time()
            time.sleep(1)



    def shutdown(self):
        self.scanner.join()
예제 #8
0
 def __init__(self):
     self.scanner = BarcodeServer(self.callback)
예제 #9
0
class BasicMotion(object):
    def __init__(self):
        self.brick = nxt.locator.find_one_brick()
        self.__init_light_sensor()
        self.__init_motors()

        self.scanner = BarcodeServer(self.callback)
        self.location_found = False
    



    def __init_light_sensor(self):
        self.light = Light(self.brick, PORT_1)
        self.light.set_illuminated(True)

    def __init_motors(self):
        self.motor_left = Motor(self.brick, PORT_A)
        self.motor_right = Motor(self.brick, PORT_B)


    def __servo_rotation(self, distance, wheel_diameter = 2.221):
        return (180.0 * distance) / (math.pi * wheel_diameter / 2.0)





    def callback(self, barcode):
        self.location_found = True
        print "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        print "\n current location: ", barcode
        print "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"




    def run(self):
        self.scanner.start()

        while True:
            self.follow_line()
            self.find_line()

        # self.follow_line()
        # for i in range (10):
        #     print "Light sensor reading: ", self.get_light_reading()
        #     time.sleep(0.1)

        # self.turn_in_place(-90)

        # for i in range (10):
        #     print "Light sensor reading: ", self.get_light_reading()
        #     time.sleep(0.1)
        # self.shutdown()


    def shutdown(self):
        self.halt_motion('coast')
        self.light.set_illuminated(False)
        self.scanner.join()
        





    def turn_in_place(self, yaw, power = 75, axle_length = 4.5):
        arc_distance = (math.pi / 180.0) * abs(yaw) * (axle_length / 2.0)
        wheel_rotation = self.__servo_rotation(arc_distance)
        # print "arc_distance: ", arc_distance
        # print "wheel_rotation", wheel_rotation
        if (yaw > 0):
            self.motor_left.weak_turn(power, int(wheel_rotation))
            self.motor_right.weak_turn(-power, int(wheel_rotation))
        elif (yaw < 0):
            self.motor_left.weak_turn(-power, int(wheel_rotation))
            self.motor_right.weak_turn(power, int(wheel_rotation))
        else:
            print "desired yaw angle is 0, nothing to do"




    def get_light_reading(self, illumination=True):        
        self.light.set_illuminated(illumination)
        return self.light.get_sample()



    def move_forward(self, power = 15, regulated = True):
        self.motor_left.run(power, regulated)
        self.motor_right.run(power, regulated)


    def halt_motion(self, method):
        if method not in ['brake',  'coast']:
            print "`method` must be one of {`brake`|`coast`}"
            raise ValueError
        if method == 'brake':
            self.motor_left.brake()
            self.motor_right.brake()
        else:
            self.motor_left.idle()
            self.motor_right.idle()
            


        
    def follow_line(self):
        # print "following line"
        self.move_forward()
        while True:
            reflected_light = self.get_light_reading()
            # print "Light sensor reading: ", self.get_light_reading()
            if reflected_light > 500:
                self.halt_motion('brake')
                # print "lost line, stopping motion"
                return



    def find_line(self):
        # print "finding line"
        sweep_angle = [10, -20, 30, -40, 60, -80, 120, -160, 240, -320]
        line_found = False
        is_turning = True

        while not line_found:
            for sweep in sweep_angle:
                # print "find line: sweeping %d degrees" % sweep
                self.turn_in_place(sweep)

                state = self.motor_left._read_state()
                run_state = state[0].run_state
                # print "run_state: ", run_state
                while run_state != 0: 
                    reflected_light = self.get_light_reading()
                
                    if reflected_light < 400:
                        line_found = True
                        self.halt_motion('brake')
                        # print "found line, stopping search"
                        return
                    state = self.motor_left._read_state()
                    run_state = state[0].run_state
예제 #10
0
class BasicMotion(object):
    def __init__(self):
        self.brick = nxt.locator.find_one_brick()
        self.__init_light_sensor()
        self.__init_motors()

        self.scanner = BarcodeServer(self.callback)
        self.location_found = False
        self.location = ''



    def __init_light_sensor(self):
        self.light = Light(self.brick, PORT_1)
        self.light.set_illuminated(True)

    def __init_motors(self):
        self.motor_left = Motor(self.brick, PORT_A)
        self.motor_right = Motor(self.brick, PORT_B)


    def __servo_rotation(self, distance, wheel_diameter = 2.221):
        return (180.0 * distance) / (math.pi * wheel_diameter / 2.0)





    def callback(self, barcode):
        self.location = barcode
        # self.location_found = True
        # print "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
        # print "\n current location: ", barcode
        # print "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"




    def run(self):
        
        # self.go_forward_n(3, -75)
        # sys.exit(1)
        self.scanner.start()

        while True:
            self.follow_line()
            # self.halt_motion('coast')
            if self.location == '100004':
                self.location = ''
                break
            self.find_line()
            # self.halt_motion('coast')

        print "Please enter path choice: L(eft) C(enter) R(ight)"
        path_choice = raw_input("choice: ")
        if path_choice == 'L' or path_choice == 'l':
            angle = -45
        elif path_choice == 'C' or path_choice == 'c':
            angle = 0
        elif path_choice == 'R' or path_choice == 'r':
            angle = 45
        else:
            print "+++ you fail +++"
            sys.exit(1)
        
        self.acquire_path(angle)
        while True:
            self.follow_line()
            self.find_line()


    def acquire_path(self, angle):
        self.go_forward_n(3, 75)
        state = self.motor_left._read_state()
        run_state = state[0].run_state
        while run_state != 0: 
            state = self.motor_left._read_state()
            run_state = state[0].run_state

        self.turn_in_place(angle)
        state = self.motor_left._read_state()
        run_state = state[0].run_state
        while run_state != 0: 
            state = self.motor_left._read_state()
            run_state = state[0].run_state
        self.find_line()


        


    def shutdown(self):
        self.halt_motion('coast')
        self.light.set_illuminated(False)
        self.scanner.join()
        





    def turn_in_place(self, yaw, power = 75, axle_length = 4.5):
        arc_distance = (math.pi / 180.0) * abs(yaw) * (axle_length / 2.0)
        wheel_rotation = self.__servo_rotation(arc_distance)
        # print "arc_distance: ", arc_distance
        # print "wheel_rotation", wheel_rotation
        if (yaw > 0):
            self.motor_left.weak_turn(power, int(wheel_rotation))
            self.motor_right.weak_turn(-power, int(wheel_rotation))
        elif (yaw < 0):
            self.motor_left.weak_turn(-power, int(wheel_rotation))
            self.motor_right.weak_turn(power, int(wheel_rotation))
        else:
            print "desired yaw angle is 0, nothing to do"




    def get_light_reading(self, illumination=True):        
        self.light.set_illuminated(illumination)
        return self.light.get_sample()



    def move_forward(self, power = 15, regulated = True):
        self.motor_left.run(power, regulated)
        self.motor_right.run(power, regulated)


    def go_forward_n(self, n, power):
        wheel_rotation = self.__servo_rotation(n)
        self.motor_left.weak_turn(power, int(wheel_rotation))
        self.motor_right.weak_turn(power, int(wheel_rotation))




    def halt_motion(self, method):
        if method not in ['brake',  'coast']:
            print "`method` must be one of {`brake`|`coast`}"
            raise ValueError
        if method == 'brake':
            self.motor_left.brake()
            self.motor_right.brake()
        else:
            self.motor_left.idle()
            self.motor_right.idle()
            



        
    def follow_line(self):
        print "following line"
        self.move_forward()
        while True:
            reflected_light = self.get_light_reading()
            if reflected_light > 500:
                self.halt_motion('brake')
                return
            if self.location == '100004':
                self.halt_motion('brake')
                print "\n\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
                print "\n arrived at desired location: ", self.location
                print "\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n\n"
                return 



    def find_line(self):
        # sweep_angle = [5, -10, 15, -20, 30, -40, 60, -80, 120, -160, 240, -320]
        sweep_angle = [10, -20, 30, -40, 60, -80, 120, -160, 240, -320]
        print "finding line"

        line_found = False
        is_turning = True

        while not line_found:
            for sweep in sweep_angle:
                # print "find line: sweeping %d degrees" % sweep
                self.turn_in_place(sweep)

                state = self.motor_left._read_state()
                run_state = state[0].run_state
                # print "run_state: ", run_state
                while run_state != 0: 
                    reflected_light = self.get_light_reading()
                
                    if reflected_light < 400:
                        line_found = True
                        self.halt_motion('brake')
                        print "found line, stopping search"
                        return
                    state = self.motor_left._read_state()
                    run_state = state[0].run_state