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,
# - 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,
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),
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), ], ) ],