def test_turn_radius_always_positive_and_inversely_proportional_to_rudder_angle(self): vehicle = SimulatedVehicle(self.reliable_gps,self.globe,self.mock_logger) self.assertEqual(vehicle._turn_radius(30),0.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-30),0.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-15),1 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-10),1.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(3),5 + MIN_TURN_RADIUS)
def test_turn_radius_always_positive_and_inversely_proportional_to_rudder_angle( self): vehicle = SimulatedVehicle(self.reliable_gps, self.globe, self.mock_logger) self.assertEqual(vehicle._turn_radius(30), 0.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-30), 0.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-15), 1 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(-10), 1.5 + MIN_TURN_RADIUS) self.assertEqual(vehicle._turn_radius(3), 5 + MIN_TURN_RADIUS)
def test_should_turn_a_corner_if_the_rudder_is_deflected(self): bearing,time_s = 30,2 starting_position = Position(53,-2) rudder_deflection = 10 gps = SimulatedGPS(starting_position,bearing,INITIAL_SPEED_IN_MS,True) vehicle = SimulatedVehicle(gps,self.globe,self.mock_logger) turn_radius = vehicle._turn_radius(rudder_deflection) bearing_change = - vehicle._track_delta(INITIAL_SPEED_IN_MS*time_s,turn_radius) expected_track = to_360(bearing + bearing_change) expected_position = self.globe.new_position(starting_position,bearing + (0.5 * bearing_change),vehicle._straightline_distance(turn_radius,bearing_change)) vehicle.rudder.set_position(rudder_deflection) vehicle.timer.wait_for(time_s) new_position = vehicle.gps.position self.assertEqual(new_position.longitude, expected_position.longitude) self.assertEqual(new_position.latitude, expected_position.latitude) self.assertEqual(round(expected_track,5),round(vehicle.gps.track,5)) self.assertEqual(round(expected_track,5), round(vehicle.compass.bearing,5))
def test_should_turn_a_corner_if_the_rudder_is_deflected(self): bearing, time_s = 30, 2 starting_position = Position(53, -2) rudder_deflection = 10 gps = SimulatedGPS(starting_position, bearing, INITIAL_SPEED_IN_MS, True) vehicle = SimulatedVehicle(gps, self.globe, self.mock_logger) turn_radius = vehicle._turn_radius(rudder_deflection) bearing_change = -vehicle._track_delta(INITIAL_SPEED_IN_MS * time_s, turn_radius) expected_track = to_360(bearing + bearing_change) expected_position = self.globe.new_position( starting_position, bearing + (0.5 * bearing_change), vehicle._straightline_distance(turn_radius, bearing_change)) vehicle.rudder.set_position(rudder_deflection) vehicle.timer.wait_for(time_s) new_position = vehicle.gps.position self.assertEqual(new_position.longitude, expected_position.longitude) self.assertEqual(new_position.latitude, expected_position.latitude) self.assertEqual(round(expected_track, 5), round(vehicle.gps.track, 5)) self.assertEqual(round(expected_track, 5), round(vehicle.compass.bearing, 5))