def _create_road(self): """ Create a road composed of straight adjacent lanes. """ self.road = Road(network=RoadNetwork.straight_road_network( self.config["lanes_count"]), np_random=self.np_random)
def _create_road(self): """ Create a road composed of straight adjacent lanes. """ self.road = Road(network=RoadNetwork.straight_road_network( self.config["lanes_count"]), np_random=self.np_random, record_history=self.config["show_trajectories"])
def test_partial(): road = Road(RoadNetwork.straight_road_network()) v = IntervalVehicle(road, position=[0, 0], velocity=20, heading=0) for _ in range(2 * FPS): v.step(dt=1/FPS, mode="partial") assert v.interval.position[0, 0] <= v.position[0] <= v.interval.position[1, 0] assert v.interval.position[0, 1] <= v.position[1] <= v.interval.position[1, 1] assert v.interval.heading[0] <= v.heading <= v.interval.heading[1]
def test_front(): r = Road(RoadNetwork.straight_road_network(1)) v1 = Vehicle(road=r, position=[0, 0], velocity=20) v2 = Vehicle(road=r, position=[10, 0], velocity=10) r.vehicles.extend([v1, v2]) assert v1.lane_distance_to(v2) == pytest.approx(10) assert v2.lane_distance_to(v1) == pytest.approx(-10)
def test_speed_control(): road = Road(RoadNetwork.straight_road_network(1)) v = ControlledVehicle(road=road, position=road.network.get_lane(("0", "1", 0)).position(0, 0), speed=20, heading=0) v.act('FASTER') for _ in range(int(3 * v.TAU_ACC * FPS)): v.act() v.step(dt=1/FPS) assert v.speed == pytest.approx(20 + v.DELTA_SPEED, abs=0.5) assert v.position[1] == pytest.approx(0) assert v.lane_index[2] == 0
def test_lane_change(): road = Road(RoadNetwork.straight_road_network(2)) v = ControlledVehicle(road=road, position=road.network.get_lane(("0", "1", 0)).position(0, 0), speed=20, heading=0) v.act('LANE_RIGHT') for _ in range(3 * FPS): v.act() v.step(dt=1/FPS) assert v.speed == pytest.approx(20) assert v.position[1] == pytest.approx(StraightLane.DEFAULT_WIDTH, abs=StraightLane.DEFAULT_WIDTH/4) assert v.lane_index[2] == 1
def _create_road(self, road_length=1000, exit_position=400, exit_length=100) -> None: net = RoadNetwork.straight_road_network(self.config["lanes_count"], start=0, length=exit_position, nodes_str=("0", "1")) net = RoadNetwork.straight_road_network(self.config["lanes_count"] + 1, start=exit_position, length=exit_length, nodes_str=("1", "2"), net=net) net = RoadNetwork.straight_road_network( self.config["lanes_count"], start=exit_position + exit_length, length=road_length - exit_position - exit_length, nodes_str=("2", "3"), net=net) for _from in net.graph: for _to in net.graph[_from]: for _id in range(len(net.graph[_from][_to])): net.get_lane( (_from, _to, _id)).speed_limit = 26 - 3.4 * _id exit_position = np.array([ exit_position + exit_length, self.config["lanes_count"] * CircularLane.DEFAULT_WIDTH ]) radius = 150 exit_center = exit_position + np.array([0, radius]) lane = CircularLane(center=exit_center, radius=radius, start_phase=3 * np.pi / 2, end_phase=2 * np.pi, forbidden=True) net.add_lane("2", "exit", lane) self.road = Road(network=net, np_random=self.np_random, record_history=self.config["show_trajectories"])
def test_velocity_control(): road = Road(RoadNetwork.straight_road_network(1)) v = ControlledVehicle(road=road, position=road.network.get_lane( (0, 1, 0)).position(0, 0), velocity=20, heading=0) v.act('FASTER') for _ in range(int(3 * v.TAU_A * FPS)): v.act() v.step(dt=1 / FPS) assert v.velocity == pytest.approx(20 + v.DELTA_VELOCITY, abs=0.5) assert v.position[1] == pytest.approx(0) assert v.lane_index[2] == 0
def test_stop_before_obstacle(vehicle_type): road = Road(RoadNetwork.straight_road_network(lanes=1)) vehicle = vehicle_type(road=road, position=[0, 0], speed=20, heading=0) obstacle = Obstacle(road=road, position=[80, 0]) road.vehicles.append(vehicle) road.objects.append(obstacle) for _ in range(10 * FPS): road.act() road.step(dt=1/FPS) assert not vehicle.crashed assert vehicle.position[0] == pytest.approx(obstacle.position[0] - vehicle_type.DISTANCE_WANTED, abs=1) assert vehicle.position[1] == pytest.approx(0) assert vehicle.speed == pytest.approx(0, abs=1) assert vehicle.heading == pytest.approx(0)
def test_collision(): # Collision between two vehicles r = Road(RoadNetwork.straight_road_network(1)) v1 = Vehicle(road=r, position=[0, 0], speed=10) v2 = Vehicle(road=r, position=[4, 0], speed=20) v1.check_collision(v2) assert v1.crashed and v2.crashed # Collision between a vehicle and an obstacle v3 = Vehicle(road=r, position=[20, 0], speed=10) o = Obstacle(road=r, position=[23, 0]) v3.check_collision(o) assert v3.crashed and o.hit # Collision between a vehicle and a landmark v4 = Vehicle(road=r, position=[40, 0], speed=10) l = Landmark(road=r, position=[43, 0]) v4.check_collision(l) assert v4.crashed is False assert l.hit
def _create_road(self): self.road = Road(network=RoadNetwork.straight_road_network( self.config["lanes_count"]), np_random=self.np_random)