# @author Leonhard Luecken # @date 2017-04-09 import os import sys if 'SUMO_HOME' in os.environ: tools = os.path.join(os.environ['SUMO_HOME'], 'tools') sys.path.append(tools) else: sys.exit("please declare environment variable 'SUMO_HOME'") from simpla._platoonmode import PlatoonMode # noqa import simpla._reporting as rp # noqa warn = rp.Warner("Platoon") report = rp.Reporter("Platoon") class Platoon(object): ''' ''' # static platoon ID counter _nextID = 0 def __init__(self, vehicles, controlInterval, registerVehicles=True): '''Platoon(list(PVehicle), float, bool) -> Platoon Create a Platoon object that holds an ordered list of its members, which is inititialized with 'vehicles'. Creator is responsible for setting the platoon mode of the vehicles. If registerVehicles is set, the vehicle's
if 'SUMO_HOME' in os.environ: tools = os.path.join(os.environ['SUMO_HOME'], 'tools') sys.path.append(tools) else: sys.exit("please declare environment variable 'SUMO_HOME'") import traci # noqa import traci.constants as tc # noqa from simpla._platoon import Platoon # noqa import simpla._reporting as rp # noqa import simpla._config as cfg # noqa from simpla._platoonmode import PlatoonMode # noqa warn = rp.Warner("PVehicle") report = rp.Reporter("PVehicle") # lookup table for vType parameters vTypeParameters = defaultdict(dict) WARNED_DEFAULT = dict([(mode, False) for mode in PlatoonMode]) class pVehicleState(object): def __init__(self, ID): self.speed = traci.vehicle.getSpeed(ID) self.edgeID = traci.vehicle.getRoadID(ID) self.laneID = traci.vehicle.getLaneID(ID) self.laneIX = traci.vehicle.getLaneIndex(ID)
# TODO: For CATCHUP_FOLLOWER mode could also be set active if intra-platoon gap becomes too large import traci from traci.exceptions import TraCIException import traci.constants as tc import simpla._reporting as rp import simpla._config as cfg import simpla._pvehicle from simpla import SimplaException from simpla._platoonmode import PlatoonMode from _collections import defaultdict warn = rp.Warner("PlatoonManager") report = rp.Reporter("PlatoonManager") class PlatoonManager(traci.StepListener): ''' A PlatoonManager coordinates the initialization of platoons and adapts the vehicles in a platoon to change their controls accordingly. To use it, create a PlatoonManager and call its update() method in each simulation step. Do not create more than one PlatoonManager, if you cannot guarantee that the associated vehicle types are exclusive for each. ''' def __init__(self):
if 'SUMO_HOME' in os.environ: tools = os.path.join(os.environ['SUMO_HOME'], 'tools') sys.path.append(tools) else: sys.exit("please declare environment variable 'SUMO_HOME'") import traci # noqa from ._utils import openGap # noqa from ._utils import SimplaException # noqa import simpla._config # noqa import simpla._reporting as rp # noqa import simpla._platoonmanager # noqa warn = rp.Warner("simpla") _mgr = None _mgr_listenerID = None _useStepListener = 'addStepListener' in dir(traci) _emergencyDecelImplemented = 'VAR_EMERGENCY_DECEL' in dir(traci.constants) if not _emergencyDecelImplemented: # Old traci version. No emergency decel present. if rp.VERBOSITY >= 1: warn("Using old traci version assuming emergency decel == decel", True) # Set emergency decel to decel traci.constants.VAR_EMERGENCY_DECEL = 0x7b traci.vehicletype.getEmergencyDecel = traci.vehicletype.getDecel def load(config_filename):
from collections import defaultdict import os import sys import xml.etree.ElementTree as ET if 'SUMO_HOME' in os.environ: tools = os.path.join(os.environ['SUMO_HOME'], 'tools') sys.path.append(tools) else: sys.exit("please declare environment variable 'SUMO_HOME'") from simpla._platoonmode import PlatoonMode # noqa import simpla._reporting as rp # noqa from simpla import SimplaException # noqa warn = rp.Warner("Config") report = rp.Reporter("Config") def initDefaults(): ''' Init default values for the configuration parameters. They are overriden by specification in a configuration file (see load() method). ''' global CONTROL_RATE, VEH_SELECTORS, MAX_PLATOON_GAP, CATCHUP_DIST, PLATOON_SPLIT_TIME global VTYPE_FILE, PLATOON_VTYPES, LC_MODE, SPEEDFACTOR, SWITCH_IMPATIENCE_FACTOR # Rate for updating the platoon manager checks and advices CONTROL_RATE = 1.0 # specify substring for vtypes, that should be controlled by platoon manager