Source code for igp2.core.config
import logging
from igp2.planlibrary.maneuver import Maneuver, Stop
from igp2.core.trajectory import Trajectory
from igp2.planlibrary.maneuver import SwitchLane, GiveWay
from igp2.planlibrary.macro_action import ChangeLane
from igp2.recognition.astar import AStar
logger = logging.getLogger(__name__)
[docs]
class Configuration:
    """ Class that serves as central location to get or set global IGP2 parameters,
    such as maximum speed or swerving distance. """
    __FPS = 20
[docs]
    @classmethod
    def set_properties(cls, **kwargs):
        """ Set any properties of IGP2 using a dictionary. """
        for k, v in kwargs.items():
            try:
                getattr(cls, k).fset(cls, v)
            except AttributeError:
                continue 
    @property
    def fps(self) -> int:
        """ Framerate of simulation. """
        return self.__FPS
    @fps.setter
    def fps(self, value: int):
        assert isinstance(value, int) and value > 0, f"FPS must be a positive integer and not {value}."
        self.__FPS = value
    @property
    def max_speed(self) -> float:
        """ Global speed limit. """
        return Maneuver.MAX_SPEED
    @max_speed.setter
    def max_speed(self, value: float):
        assert value > 0, f"Maximum speed cannot be {value}."
        Maneuver.MAX_SPEED = value
    @property
    def min_speed(self) -> float:
        """ Minimum speed in turns. """
        return Maneuver.MIN_SPEED
    @min_speed.setter
    def min_speed(self, value: float):
        assert isinstance(value, float) and value > 0, f"Minimum turn speed cannot be {value}."
        Maneuver.MIN_SPEED = value
    @property
    def velocity_stop(self) -> float:
        """ The threshold in m/s to classify velocities as stopped. """
        return Trajectory.VELOCITY_STOP
    @velocity_stop.setter
    def velocity_stop(self, value: float):
        Trajectory.VELOCITY_STOP = value
    @property
    def target_switch_length(self):
        """ The ideal target length for a lane switch. """
        return SwitchLane.TARGET_SWITCH_LENGTH
    @target_switch_length.setter
    def target_switch_length(self, value: float):
        isinstance(value, float) and value > 0, f"Minimum switch lane length was {value}."
        SwitchLane.TARGET_SWITCH_LENGTH = value
    @property
    def max_oncoming_vehicle_dist(self):
        """ The maximum distance for a vehicle to be considered when giving way. """
        return GiveWay.MAX_ONCOMING_VEHICLE_DIST
    @max_oncoming_vehicle_dist.setter
    def max_oncoming_vehicle_dist(self, value: float):
        isinstance(value, float) and value > 0, f"Maximum oncoming vehicle distance for give way was {value}."
        GiveWay.MAX_ONCOMING_VEHICLE_DIST = value
    @property
    def next_lane_offset(self) -> float:
        """ The lane offset used in AStar for getting the next lane. """
        return AStar.NEXT_LANE_OFFSET
    @next_lane_offset.setter
    def next_lane_offset(self, value):
        AStar.NEXT_LANE_OFFSET = value
    @property
    def default_stop_duration(self) -> float:
        """ The default duration for a stop maneuver. """
        return Stop.DEFAULT_STOP_DURATION
    @default_stop_duration.setter
    def default_stop_duration(self, value):
        """ The default duration for a stop maneuver. """
        Stop.DEFAULT_STOP_DURATION = value
    @property
    def give_way_distance(self) -> float:
        """ The distance from a junction at which to begin the GiveWay maneuver. """
        return GiveWay.GIVE_WAY_DISTANCE
    @give_way_distance.setter
    def give_way_distance(self, value):
        """ The distance from the junction at which to begin the GiveWay maneuver."""
        GiveWay.GIVE_WAY_DISTANCE = value
    @property
    def check_oncoming(self) -> bool:
        """ Whether to check for oncoming vehicles when changing lanes."""
        return ChangeLane.CHECK_ONCOMING
    @check_oncoming.setter
    def check_oncoming(self, value: bool):
        ChangeLane.CHECK_ONCOMING = value