Source code for simulation.utils.road.sections.traffic_sign

from dataclasses import dataclass
from typing import Tuple

from simulation.utils.road.sections.road_element import RoadElementRect

from . import ID


[docs]@dataclass class SignTuple: mesh: str id_: int = None large_sign_collision_box_size = (0.015, 0.15, 0.3) large_sign_collision_box_position = (0, 0, 0.15) small_sign_collision_box_size = (0.015, 0.1, 0.275) small_sign_collision_box_position = (0, 0, 0.1375) collision_box_size: Tuple[float, float, float] = large_sign_collision_box_size collision_box_position: Tuple[float, float, float] = large_sign_collision_box_position def __post_init__(self): self.id_ = ID.register(ns=100)
[docs]def get_all_signs(): sign_dict = TrafficSign.__dict__ return [ v for k, v in sign_dict.items() if not k.startswith("__") and k != "kind" and k != "visible" ]
[docs]@dataclass class TrafficSign(RoadElementRect): ZONE_10_START = SignTuple(mesh="speed_limit_zone_10_start_sign") ZONE_20_START = SignTuple(mesh="speed_limit_zone_20_start_sign") ZONE_30_START = SignTuple(mesh="speed_limit_zone_30_start_sign") ZONE_40_START = SignTuple(mesh="speed_limit_zone_40_start_sign") ZONE_50_START = SignTuple(mesh="speed_limit_zone_50_start_sign") ZONE_60_START = SignTuple(mesh="speed_limit_zone_60_start_sign") ZONE_70_START = SignTuple(mesh="speed_limit_zone_70_start_sign") ZONE_80_START = SignTuple(mesh="speed_limit_zone_80_start_sign") ZONE_90_START = SignTuple(mesh="speed_limit_zone_90_start_sign") ZONE_10_END = SignTuple(mesh="speed_limit_zone_10_end_sign") ZONE_20_END = SignTuple(mesh="speed_limit_zone_20_end_sign") ZONE_30_END = SignTuple(mesh="speed_limit_zone_30_end_sign") ZONE_40_END = SignTuple(mesh="speed_limit_zone_40_end_sign") ZONE_50_END = SignTuple(mesh="speed_limit_zone_50_end_sign") ZONE_60_END = SignTuple(mesh="speed_limit_zone_60_end_sign") ZONE_70_END = SignTuple(mesh="speed_limit_zone_70_end_sign") ZONE_80_END = SignTuple(mesh="speed_limit_zone_80_end_sign") ZONE_90_END = SignTuple(mesh="speed_limit_zone_90_end_sign") RAMP_START = SignTuple(mesh="uphill_grade_sign") RAMP_END = SignTuple(mesh="downhill_grade_sign") PRIORITY = SignTuple( mesh="priority_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) YIELD = SignTuple(mesh="yield_sign") STOP = SignTuple(mesh="stop_sign") ONCOMING_TRAFFIC = SignTuple( mesh="oncoming_traffic_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) NO_OVERTAKING_START = SignTuple( mesh="no_overtaking_start_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) NO_OVERTAKING_END = SignTuple( mesh="no_overtaking_end_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) TURN_RIGHT = SignTuple( mesh="turn_right_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) TURN_LEFT = SignTuple( mesh="turn_left_sign", collision_box_size=SignTuple.small_sign_collision_box_size, collision_box_position=SignTuple.small_sign_collision_box_position, ) PASS_RIGHT = SignTuple( mesh="pass_right_sign", collision_box_size=(0.015, 0.1, 0.125), collision_box_position=(0, 0, 0.0625), ) PASS_LEFT = SignTuple( mesh="pass_left_sign", collision_box_size=(0.015, 0.1, 0.125), collision_box_position=(0, 0, 0.0625), ) SHARP_TURN_RIGHT_SMALL = SignTuple( mesh="sharp_turn_right_small_sign", collision_box_size=(0.015, 0.1, 0.125), collision_box_position=(0, 0, 0.0625), ) SHARP_TURN_RIGHT = SignTuple( mesh="sharp_turn_right_sign", collision_box_size=(0.015, 0.3, 0.125), collision_box_position=(0, 0, 0.0625), ) SHARP_TURN_LEFT_SMALL = SignTuple( mesh="sharp_turn_left_small_sign", collision_box_size=(0.015, 0.1, 0.125), collision_box_position=(0, 0, 0.0625), ) SHARP_TURN_LEFT = SignTuple( mesh="sharp_turn_left_sign", collision_box_size=(0.015, 0.3, 0.125), collision_box_position=(0, 0, 0.0625), ) ZEBRA_CROSSING = SignTuple(mesh="zebra_crossing_sign") PARKING = SignTuple(mesh="parking_sign") EXPRESSWAY_START = SignTuple(mesh="expressway_start_sign") EXPRESSWAY_END = SignTuple(mesh="expressway_end_sign") kind: SignTuple = None visible: bool = True """Indicate whether the traffic sign is visible while driving on the road.""" def __init__( self, kind: SignTuple, arc_length: float, y: float = -0.5, angle=0, normalize_x: bool = True, visible: bool = True, ): self.kind = kind self.visible = visible super().__init__( arc_length=arc_length, y=y, width=kind.collision_box_size[1], depth=kind.collision_box_size[0], angle=angle, normalize_x=normalize_x, z=self.kind.collision_box_position[2], height=self.kind.collision_box_size[2] - self.kind.collision_box_position[2], )