Esempio n. 1
0
 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)
Esempio n. 2
0
 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)
Esempio n. 5
0
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
Esempio n. 6
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
Esempio n. 7
0
    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"])
Esempio n. 8
0
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
Esempio n. 9
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)
Esempio n. 10
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
Esempio n. 11
0
 def _create_road(self):
     self.road = Road(network=RoadNetwork.straight_road_network(
         self.config["lanes_count"]),
                      np_random=self.np_random)