class TestVisionService(TestCase): A_TARGET = 1200 ANOTHER_TARGET = 1300 def setUp(self) -> None: self.embedded_camera = MagicMock() self.letter_position_extractor = MagicMock() self.vision_service = VisionService( self.embedded_camera, self.letter_position_extractor, self.A_TARGET, self.ANOTHER_TARGET, ) def test_givenTarget_whenRotateCameraHorizontally_thenCameraIsRotated( self): self.vision_service.rotate_camera_horizontally(self.A_TARGET) self.embedded_camera.rotate_horizontally.assert_called_with( self.A_TARGET) def test_givenTarget_whenRotateCameraVertically_thenCameraIsRotated(self): self.vision_service.rotate_camera_vertically(self.A_TARGET) self.embedded_camera.rotate_vertically.assert_called_with( self.A_TARGET) def test_whenMakeCameraLookDown_thenCameraRotatesVerticallyWithLookDownTarget( self, ): self.vision_service.make_camera_look_down() self.embedded_camera.rotate_vertically.assert_called_with( self.A_TARGET) def test_whenMakeCameraLookUp_thenCameraRotatesVerticallyWithLookUpTarget( self, ): self.vision_service.make_camera_look_up() self.embedded_camera.rotate_vertically.assert_called_with( self.ANOTHER_TARGET) def test_givenIndex_whenTakeImage_thenImageTaken(self): self.vision_service.take_image() self.embedded_camera.take_image.assert_called()
OHMMETER_ALIGNMENT_THRESHOLD = 10 movement_service = MovementService(movement_command_factory, motor_controller) starting_zone_line_detector = OpenCvStartingZoneLineDetector() ohmmeter_alignment_corrector = OhmmeterAlignmentCorrector( Position(ALIGNED_OHMMETER_HORIZONTAL_POSITION, 0), OHMMETER_ALIGNMENT_THRESHOLD, starting_zone_line_detector, ) while True: instruction = input("ready? (y/n)") if instruction == "y": break current_image = vision_service.take_image() adjustment_movement_command = ( ohmmeter_alignment_corrector.calculate_horizontal_correction(current_image) ) if adjustment_movement_command.get_direction() == Direction.STOP: print("align") else: movement_service.execute_movement_command(adjustment_movement_command) while adjustment_movement_command.get_direction() != Direction.STOP: time.sleep(0.5) current_image = vision_service.take_image() horizontal_movement_command = ( ohmmeter_alignment_corrector.calculate_horizontal_correction( current_image )