示例#1
0
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
                )