def get_colors(self) -> {Color, Color, Color}: first_digit = self.find_nth_digit(0) second_digit = self.find_nth_digit(1) multiplication_factor = self._find_multiplication_factor() return ( Color.value_of_resistance_digit(first_digit), Color.value_of_resistance_digit(second_digit), Color.value_of_resistance_digit(multiplication_factor), )
def _route_station_command(self): command: Message = self._communication_service.receive_object() topic = command.get_topic() if topic == Topic.START_STAGE: self._send_confirmation_to_station(Topic.START_STAGE, Stage.TRANSPORT_PUCK) elif topic == Topic.MOVEMENTS: self._move(command.get_payload()) self._send_confirmation_to_station(Topic.MOVEMENTS, Stage.STAGE_COMPLETED) elif topic == Topic.ROTATION: self._rotate(command.get_payload()) self._send_confirmation_to_station(Topic.ROTATION, Stage.STAGE_COMPLETED) elif topic == Topic.GRAB_PUCK: self._grab_puck(Color.value_of_resistance_digit(command.get_payload())) self._send_confirmation_to_station(Topic.GRAB_PUCK, Stage.STAGE_COMPLETED) elif topic == Topic.DROP_PUCK: self._drop_puck() self._gripper_service.elevate_gripper() self._send_confirmation_to_station(Topic.DROP_PUCK, Stage.STAGE_COMPLETED) elif topic == Topic.STAGE_COMPLETED: self._send_confirmation_to_station( Topic.STAGE_COMPLETED, Stage.TRANSPORT_PUCK ) raise StageComplete
def test_givenNumberFour_whenGettingValueOfResistanceDigit_thenReturnYellow( self): single_digit = 4 color = Color.value_of_resistance_digit(single_digit) self.assertEqual(color, Color.YELLOW)
def test_givenNumberEight_whenGettingValueOfResistanceDigit_thenReturnGrey( self): single_digit = 8 color = Color.value_of_resistance_digit(single_digit) self.assertEqual(color, Color.GREY)
def detect(self, image: np.array, color: Color) -> Position: image = self._cut_image(image) template = cv2.imread(color.get_template()) res = cv2.matchTemplate(image, template, method=cv2.TM_CCORR_NORMED) _, _, _, max_loc = cv2.minMaxLoc(res) top_left = max_loc return Position( top_left[0] + self.PUCK_RADIUS + self.HORIZONTAL_CROP[0], top_left[1] + self.PUCK_RADIUS + self.VERTICAL_CROP[0], )
def _apply_two_mask(self, image: np.ndarray, color: Color) -> np.ndarray: hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) hsv_bounds = color.get_hsv_bounds() first_range = hsv_bounds[0][0] second_range = hsv_bounds[0][1] first_mask = cv2.inRange(hsv_image, np.array(first_range[0]), np.array(first_range[1])) second_mask = cv2.inRange(hsv_image, np.array(second_range[0]), np.array(second_range[1])) mask = first_mask + second_mask hsv_image[np.where(mask == 0)] = 0 prepared_image = cv2.cvtColor(hsv_image, cv2.COLOR_HSV2BGR) return cv2.cvtColor(prepared_image, cv2.COLOR_BGR2GRAY)
def route_station_command(self): command: Message = self._communication_service.receive_object() topic = command.get_topic() if topic == Topic.START_CYCLE: print("Stage started") self.send_confirmation_to_station(Topic.START_CYCLE, Stage.TRANSPORT_PUCK) elif topic == Topic.MOVEMENTS: print("Moving to puck") self.move(command.get_payload()) print("Sending movement confirmation") grab_puck_it.send_confirmation_to_station( Topic.MOVEMENTS, Stage.STAGE_COMPLETED ) elif topic == Topic.ROTATION: print("Rotating") self.rotate(command.get_payload()) print("Sending rotation confirmation") grab_puck_it.send_confirmation_to_station( Topic.ROTATION, Stage.STAGE_COMPLETED ) elif topic == Topic.GRAB_PUCK: print("Grabbing puck") self.grab_puck(Color.value_of_resistance_digit(command.get_payload())) print("Sending grab puck confirmation to station") grab_puck_it.send_confirmation_to_station( Topic.GRAB_PUCK, Stage.STAGE_COMPLETED ) elif topic == Topic.DROP_PUCK: print("Dropping puck") self.drop_puck() print("Sending drop puck confirmation to station") grab_puck_it.send_confirmation_to_station( Topic.DROP_PUCK, Stage.STAGE_COMPLETED ) elif topic == Topic.STAGE_COMPLETED: print("Stage completed") self.send_confirmation_to_station( Topic.STAGE_COMPLETED, Stage.TRANSPORT_PUCK ) raise RuntimeError("Stage complete !")
def _new_prepared_image(self, image: np.ndarray, puck_color: Color) -> np.ndarray: hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) hsv_bounds = puck_color.get_hsv_bounds() return cv2.inRange(hsv_image, np.array(hsv_bounds[0][0]), np.array(hsv_bounds[0][1]))