예제 #1
0
class FindRed(Behavior):
    """
    Uses the camera to find out if there is a red object in front of the robot
    """
    def __init__(self, sensob=None, debug=False):
        super().__init__()
        self.priority = MED
        self.debug = debug
        self.imager = Imager(width=IMG_WIDTH, height=IMG_HEIGHT)
        self.motor_recommendations = [Motors.forward]

    def __name__(self):
        return "FindRed"

    def sense_and_act(self):
        """
        Take a picture, find the percentage of red pixels
        """
        def red_only(p):
            """
            Maps red pixels to white, everything else to black
            """
            lower = (155, 25, 0)
            upper = (255, 100, 100)
            r, g, b = p
            if (lower[0] <= r <= upper[0] and lower[1] <= g <= upper[1]
                    and lower[2] <= b <= upper[2]):
                return (255, 255, 255)
            return (0, 0, 0)

        image = self.bbcon.get_sensob_value(Camera)
        mapped = self.imager.map_image2(red_only, image=image)

        if self.debug:
            mapped.dump_image(fid='image_mapped', type='png')

        im_arr = np.array(mapped.image)
        white_pixels = np.sum(im_arr == (255, 255, 255))

        ratio = white_pixels / (len(im_arr[0]) * len(im_arr))

        if ratio > 0.5:
            self.match_degree = 0.8
            self.motor_speed = 1
        else:
            self.match_degree = 0
            self.motor_speed = 0.3
예제 #2
0
파일: bbcon.py 프로젝트: ivhak/TDT4113
class FindRed(Behavior):
    """
    This behaviour advices the robot to accelerate whenever the camera spots
    something red.
    """

    def __init__(self, sensob=None, debug=False):
        self.priority = 1
        self.debug = debug
        self.imager = Imager(width=IMG_WIDTH, height=IMG_HEIGHT)
        super().__init__()

    def sense_and_act(self):
        """
        Take a picture, find the percentage of red pixels
        """

        def red_only(p):
            """
            Maps red pixels to white, everything else to black
            """
            lower = (155, 25, 0)
            upper = (255, 100, 100)
            # r, g, b = p
            # if (lower[0] <= r <= upper[0] and
            #     lower[1] <= g <= upper[1] and
            #         lower[2] <= b <= upper[2]):
            #     return (255, 255, 255)
            if lower <= p <= upper:
                return (255, 255, 255)
            return (0, 0, 0)

        image = self.bbcon.sensobs.values['camera']
        mapped = self.imager.map_image2(red_only, image=image)

        if self.debug:
            mapped.dump_image(fid='image_mapped', type='png')

        im_arr = np.array(mapped.image)
        white_pixels = np.sum(im_arr == (255, 255, 255))

        ratio = white_pixels/(len(im_arr[0])*len(im_arr))

        return 0.8 if ratio > 0.05 else 0, 5