Esempio n. 1
0
def get_random_spot(on_right_side: bool,
                    kind: int,
                    min_width: float = 0.3) -> ParkingSpot:
    width = (min_width + random.random()) if on_right_side else 0.35

    obstacle = None
    if kind == ParkingSpot.OCCUPIED or (kind == ParkingSpot.BLOCKED
                                        and random.random() > 0.5):
        obs_width = (random.random() / 2 + 0.5) * width
        obstacle = ParkingObstacle(
            width=obs_width,
            x=0.2,
            y=-(width - (0.5 - random.random()) * obs_width / 2) / 2,
        )

    return ParkingSpot(width=width, kind=kind, obstacle=obstacle)
 def get_spot(side=0):
     width = (0.5 + random.random()) * (0.2 + ROAD_WIDTH * side)
     obs_width = (random.random() / 2 + 0.5) * width
     return ParkingSpot(
         width=width,
         kind=random.choice([ParkingSpot.FREE, ParkingSpot.BLOCKED]),
         obstacle=random.choice([
             ParkingObstacle(
                 width=obs_width,
                 x=0.2,
                 y=-(width - random.random() / 2 * obs_width) / 2,
             ),
             ParkingObstacle(
                 width=obs_width,
                 x=0.2,
                 y=-(width - random.random() / 2 * obs_width) / 2,
             ),
             None,
         ]),
     )
        return default
    return e == "True" or e == "1"


PARKING_LOT_RIGHT = env_as_bool("PARKING_LOT_RIGHT", True)
PARKING_LOT_LEFT = env_as_bool("PARKING_LOT_LEFT", True)

road = Road()
road.append(StraightRoad(length=2))

right_lots = ([
    ParkingLot(
        start=1,
        spots=[
            ParkingSpot(width=0.3,
                        kind=ParkingSpot.OCCUPIED,
                        obstacle=ParkingObstacle()),
            ParkingSpot(width=0.4, kind=ParkingSpot.BLOCKED),
            ParkingSpot(width=1),
            ParkingSpot(width=0.3,
                        kind=ParkingSpot.OCCUPIED,
                        obstacle=ParkingObstacle()),
        ],
    )
] if PARKING_LOT_RIGHT else [])

left_lots = ([
    ParkingLot(
        start=1,
        spots=[
            ParkingSpot(kind=ParkingSpot.OCCUPIED, obstacle=ParkingObstacle()),
    def test_parking_area(self):
        TF = Transform([1, 1], math.pi / 2)
        left_spot1 = ParkingSpot(width=0.4, kind=ParkingSpot.FREE)
        left_spot2 = ParkingSpot(width=0.4, kind=ParkingSpot.OCCUPIED)
        right_spot = ParkingSpot(width=0.6, kind=ParkingSpot.BLOCKED)

        # opening_angle 55 degrees
        OPENING_ANGLE = math.radians(55)
        LEFT_START = 2.25
        LEFT_DEPTH = 0.5
        RIGHT_START = 1.75
        RIGHT_DEPTH = 0.3
        LENGTH = 4

        left_lot = ParkingLot(
            start=LEFT_START,
            opening_angle=OPENING_ANGLE,
            depth=LEFT_DEPTH,
            spots=[left_spot1, left_spot2],
        )
        right_lot = ParkingLot(
            start=RIGHT_START,
            opening_angle=OPENING_ANGLE,
            depth=RIGHT_DEPTH,
            spots=[right_spot],
        )

        pa = ParkingArea(
            length=LENGTH,
            left_lots=[left_lot],
            right_lots=[right_lot],
            transform=TF,
        )
        self.assertEqual(pa.__class__.TYPE, road_section_type.PARKING_AREA)

        # test points for left_border calculated by hand
        # left_lot start at 2.25, depth 0.5
        # start_inner
        si = Point(LEFT_START, Config.road_width)
        # start_outer
        so = Point(
            si.x + LEFT_DEPTH / math.tan(OPENING_ANGLE),
            Config.road_width + LEFT_DEPTH,
        )
        # end outer, both lots have 0.4 width
        eo = Point(so.x + 0.8, so.y)
        # end inner
        ei = Point(eo.x + LEFT_DEPTH / math.tan(OPENING_ANGLE),
                   Config.road_width)
        self.assertLineAlmostEqual(pa.left_lots[0].border,
                                   TF * Line([si, so, eo, ei]))

        # check first parking spot on left side width: 0.4
        self.assertEqual(
            pa.left_lots[0].spots[0].frame,
            TF * Polygon([
                Point(so.x, si.y), so,
                Point(so.x + 0.4, so.y),
                Point(so.x + 0.4, si.y)
            ]),
        )
        self.assertEqual(pa.left_lots[0].spots[0].kind, ParkingSpot.FREE)
        # check second parking spot on left side width: 0.4
        self.assertEqual(
            pa.left_lots[0].spots[1].frame,
            TF * Polygon([
                Point(so.x + 0.4, si.y),
                Point(so.x + 0.4, so.y), eo,
                Point(eo.x, ei.y)
            ]),
        )
        self.assertEqual(pa.left_lots[0].spots[1].kind, ParkingSpot.OCCUPIED)

        # test points for right_border calculated by hand
        # left_lot start at 1.75, depth 0.3
        # start_inner
        si = Point(RIGHT_START, -Config.road_width)
        # start_outer
        so = Point(
            si.x + RIGHT_DEPTH / math.tan(OPENING_ANGLE),
            -Config.road_width - RIGHT_DEPTH,
        )
        # end outer, lot has 0.6 width
        eo = Point(so.x + 0.6, -Config.road_width - RIGHT_DEPTH)
        # end inner
        ei = Point(eo.x + RIGHT_DEPTH / math.tan(OPENING_ANGLE),
                   -Config.road_width)
        self.assertLineAlmostEqual(pa.right_lots[0].border,
                                   TF * Line([si, so, eo, ei]))
        # check first parking spot on right side width: 0.6
        # polygon points on right side are reversed
        self.assertEqual(
            pa.right_lots[0].spots[0].frame,
            TF * Polygon([Point(eo.x, ei.y), eo, so,
                          Point(so.x, si.y)]),
        )
        self.assertEqual(
            pa.right_lots[0].spots[0].kind,
            ParkingSpot.BLOCKED,
        )
    ParkingSpot,
    RightCircularArc,
    StraightRoad,
)

road = Road()
road.append(ParkingArea(length=0.06, start_line=True))
road.append(StraightRoad(length=0.62))
road.append(
    ParkingArea(
        length=2.9,
        right_lots=[
            ParkingLot(
                depth=0.32,
                spots=[
                    ParkingSpot(width=1.15),
                    ParkingSpot(
                        width=0.25, kind=ParkingSpot.OCCUPIED, obstacle=ParkingObstacle()
                    ),
                    ParkingSpot(width=0.045),
                    ParkingSpot(width=0.56, kind=ParkingSpot.BLOCKED),
                    ParkingSpot(width=0.32),
                ],
            )
        ],
    )
)
road.append(StraightRoad(length=0.53))
road.append(
    ParkingArea(
        length=3.8,
Esempio n. 6
0
# - Beginning sphinx straight_road -
straight_road = StraightRoad(length=2)
# - Ending sphinx straight_road -

# - Beginning sphinx straight_road_obs -
straight_road_obs = StraightRoad(length=2)
straight_road_obs.add_obstacle(arc_length=1, y_offset=0, width=0.2, length=0.1)
# - Ending sphinx straight_road_obs -

# - Beginning sphinx parking_area -
parking_area = ParkingArea(
    length=4,
    start_line=True,
    left_lots=[
        ParkingLot(spots=[
            ParkingSpot(kind=ParkingSpot.OCCUPIED, obstacle=ParkingObstacle()),
            ParkingSpot(kind=ParkingSpot.BLOCKED),
        ], ),
        ParkingLot(
            start=2,
            opening_angle=math.radians(40),
            spots=[
                ParkingSpot(),
                ParkingSpot(kind=ParkingSpot.OCCUPIED,
                            obstacle=ParkingObstacle()),
            ],
        ),
    ],
    right_lots=[
        ParkingLot(
            start=1,
Esempio n. 7
0
    ZebraCrossing,
)
from simulation.utils.road.sections.road_section import RoadSection

road = Road()
road.append(StraightRoad(length=1))

# Create a parking area with different kinds of parking spots
road.append(
    ParkingArea(
        length=4,
        start_line=True,
        left_lots=[
            ParkingLot(
                start=1,
                spots=[ParkingSpot(),
                       ParkingSpot(kind=ParkingSpot.BLOCKED)])
        ],
        right_lots=[
            ParkingLot(
                start=0.2,
                spots=[
                    ParkingSpot(
                        kind=ParkingSpot.OCCUPIED,
                        width=0.7,
                        obstacle=ParkingObstacle(x=0.15,
                                                 y=-0.2,
                                                 width=0.3,
                                                 depth=0.25),
                    ),
                    ParkingSpot(kind=ParkingSpot.BLOCKED),
Esempio n. 8
0
    ParkingObstacle,
    StaticObstacle,
)
from simulation.utils.road.sections.road_section import RoadSection

road = Road()
road.append(StraightRoad(length=1))

# Create a parking area with different kinds of parking spots
road.append(
    ParkingArea(
        length=4,
        start_line=True,
        left_lots=[
            ParkingLot(
                start=1, spots=[ParkingSpot(), ParkingSpot(kind=ParkingSpot.BLOCKED)]
            )
        ],
        right_lots=[
            ParkingLot(
                start=0.2,
                spots=[
                    ParkingSpot(
                        kind=ParkingSpot.OCCUPIED,
                        width=0.7,
                        obstacle=ParkingObstacle(center=[0.2, -0.2], width=0.3, depth=0.4),
                    ),
                    ParkingSpot(kind=ParkingSpot.BLOCKED),
                ],
            )
        ],