def test_bad_trust_at_start(self, part: AngleRoadPart): assert part.run(road_ellipse=Ellipse((70, 71), (100, 200), 135.0, trust=0.1)) == 0.0, \ 'Angle should be ignored when no previous value and bad trust value' assert part.run(road_ellipse=Ellipse((70, 71), (100, 200), 135.0, trust=0.1)) == 0.0, \ 'No previous angle value' assert part.run(road_ellipse=Ellipse((70, 71), (100, 200), 135.0, trust=0.5)) == -0.5, \ 'At startup, use average between angle and straight ahead'
def test_straight_ahead(self, part: AngleRoadPart): assert 0 < part.run( road_ellipse=Ellipse((70, 71), (100, 200), 89.0, 1.0)) < 0.1 assert -0.1 < part.run( road_ellipse=Ellipse((70, 71), (100, 200), 91.0, 1.0)) < 0.0 assert 0 < part.run( road_ellipse=Ellipse((70, 71), (100, 200), 269.0, 1.0)) < 0.1 assert -0.1 < part.run( road_ellipse=Ellipse((70, 71), (100, 200), 271.0, 1.0)) < 0.0
def fixture_vehicle(video_camera: VideoCamera, road_config: RoadConfigController, throttle_config: ThrottleConfigController) -> Vehicle: vehicle = Vehicle() vehicle.register(video_camera) vehicle.register(ComponentRoadPart2()) vehicle.register(AngleRoadPart()) vehicle.register(ThrottleEllipsePart(throttle_config_controller=throttle_config)) vehicle.register(RoadEllipseDebugPart()) vehicle.register(ThrottleDebugPart(input_img_key=RoadEllipseDebugPart.IMG_ROAD_ELLIPSE)) return vehicle
def _configure_angle_part(self, cfg): if 'keras' == cfg.ANGLE_ALGO: self.register(KerasPilot(img_input=CAM_IMAGE, model_path=Path(cfg.KERAS_MODEL))) else: self.register(AngleRoadPart()) self.register(RoadEllipseDebugPart())
def test_trust_not_perfect(self, part: AngleRoadPart): # Record previous value assert part.run( road_ellipse=Ellipse((70, 71), (100, 200), 45.0, trust=1.0)) == 1.0 assert part.run(road_ellipse=Ellipse((70, 71), (100, 200), 135.0, trust=0.5)) == 0.25, \ 'At startup, use weighted average between current and previous angles'
def test_bad_trust(self, part: AngleRoadPart): assert 0 < part.run( road_ellipse=Ellipse((70, 71), (100, 200), 89.0, trust=1.0)) < 0.1 assert 0 < part.run(road_ellipse=Ellipse((70, 71), (100, 200), 135.0, trust=0.1)) < 0.1, \ 'Previous value should be used when trust < 0.5'
def test_turn_left(self, part: AngleRoadPart): assert part.run( road_ellipse=Ellipse((70, 71), (100, 200), 135.0, 1.0)) == -1.0 assert part.run( road_ellipse=Ellipse((70, 71), (100, 200), 180.0, 1.0)) == -1.0
def test_turn_right(self, part: AngleRoadPart): assert part.run( road_ellipse=Ellipse((70, 71), (100, 200), 45.0, 1.0)) == 1.0 assert part.run( road_ellipse=Ellipse((70, 71), (100, 200), 0.1, 1.0)) == 1.0
def fixture_part(self) -> AngleRoadPart: part = AngleRoadPart() yield part part.shutdown()