Festlegen unterschiedlicher Geschwindigkeitsbegrenzungen für verschiedene Fahrzeugtypen in Aimsun Next

Technische Mitteilung #52
Oktober 2020

Von Tessa Hayman

Viele ModellierInnen kennen diese unglaublich praktische Aimsun Next-Funktion gar nicht. In dieser Technischen Mitteilung zeigt Tessa Hayman, wie Sie unterschiedliche Geschwindigkeitsbegrenzungen für verschiedene Fahrzeugtypen in dynamischen Modellen festlegen.

In bestimmten Situationen bestehen für jeden Fahrzeugtyp unterschiedliche Geschwindigkeitsbegrenzungen. Auf einbahnigen Landstraßen in Großbritannien beispielsweise beträgt die zulässige Höchstgeschwindigkeit für Fahrzeuge über 7,5 Tonnen 50 mph bzw. 80 km/h, für alle anderen Fahrzeuge jedoch 60 mph bzw. 100 km/h. In Aimsun Next können Sie dies für mikro- und mesoskopische Modelle mithilfe von Verkehrsmanagementmaßnahmen oder für makroskopische Modelle innerhalb der CR-Funktionen kodieren.

Bei mikroskopischen und mesoskopischen Modellen wird die Geschwindigkeitsbegrenzung für eine Straße durch den Parameter „Speed Limit“ festgelegt. Die Geschwindigkeitsbegrenzung für eine Fahrzeugklasse kann mithilfe einer Verkehrsmanagementmaßnahme namens „Speed Reduction“ reduziert werden, die Sie auch zur Reduzierung der Abbiegegeschwindigkeiten für größere Fahrzeuge verwenden können.


So fügen Sie einer Strecke oder einem Abbieger eine Geschwindigkeitsreduzierung hinzu

Schritt 1: Fügen Sie über Projektmenü -> „Traffic Management“ -> „New“ -> „Traffic Condition“ eine neue Verkehrssituation hinzu

Schritt 2: Rufen Sie mit einem Doppelklick auf die Verkehrssituation den entsprechenden Editor auf. Wählen Sie unter „Activation Condition“ die Aktivierungsbedingung „Always“ aus, und aktivieren Sie die Checkbox „Apply to Warm up“.

Traffic Condition parameters
Verkehrssituationsparameter

 

Schritt 3: Fügen Sie jetzt eine Geschwindigkeitsreduzierung hinzu, indem Sie mit der rechten Maustaste auf „Traffic Condition“ -> „New“ -> „Speed Reduction“ klicken.

How to set different speed limits for different vehicle types in Aimsun Next

 

Schritt 4: Wählen Sie die entsprechenden Geschwindigkeitsreduzierungsparameter aus:

How to set different speed limits for different vehicle types in Aimsun Next

 

Im entsprechenden Menü können Sie festlegen, auf welche Strecke bzw. welchen Abbieger die Geschwindigkeitsreduzierung angewendet werden soll, die neue Höchstgeschwindigkeit eingeben und die Anwendung auf eine bestimmte Fahrzeugklasse beschränken. Im obigen Beispiel wurde die Fahrzeugklasse „Heavy Class“ (Lkw) ausgewählt, die alle Fahrzeugtypen mit Fahrzeugen über 7,5 t umfasst.

Die oben beschriebenen Einstellungen gelten jeweils immer nur für eine Strecke bzw. einen Abbieger; bei einem Modell mit zahlreichen Straßen, auf denen unterschiedliche Geschwindigkeitsbegrenzungen für Lkw gelten, wäre die Festlegung mit dieser Vorgehensweise ein äußerst mühsames Unterfangen. Sie können Geschwindigkeitsänderungen jedoch auch auf eine Gruppierung von Strecken bzw. Abbiegern oder einen bestimmten Straßentyp anwenden.


Geschwindigkeitsreduzierungen auf alle Strecken eines Straßentyps mit einer bestimmten Fahrstreifenanzahl mithilfe eines Skripts anwenden

In einigen Fällen möchten Sie möglicherweise eine Geschwindigkeitsreduzierung auf eine Teilmenge von Strecken eines bestimmten Straßentyps wie z. B. einbahnige Straßen mit einer Geschwindigkeitsbegrenzung von 60 mph anwenden, ohne hierfür einen eigenen Straßentyp anzulegen.

Um eine Geschwindigkeitsreduzierung auf einen bestimmten Straßentyp anzuwenden und gleichzeitig die Anzahl der Fahrstreifen auf der Strecke zu überprüfen, können Sie das folgende Skript verwenden. Hierfür müssen Sie die entsprechende Verkehrssituation, die neue Geschwindigkeit, die Fahrzeugklasse und den Straßentyp sowie die Fahrstreifenanzahl angeben, auf die die neue Geschwindigkeit angewendet werden soll. Das Skript iteriert anschließend über alle im Modell vorhandenen Strecken des angegebenen Straßentyps und fügt jeder Strecke eine Geschwindigkeitsreduzierung hinzu.

Der Pseudocode hierfür lautet:
Get/Create Traffic Condition
Get vehicle class
Für alle Strecken:

If section.roadtype==roadtype and section.numberoflanes:

Create speed reduction action
Add speed reduction to Traffic Condition

'''This script applies a speed reduction for all sections in a road type. The User must specify the road type and the new speed'''

TrafficConditionName="Speed Reduction"
RoadTypeName="SingleCarriageway60" #96kph
VehicleClassName="Heavy Class"
NewSpeed=80 #50mph
NumberofLanes=1

def createSpeedReduction(section,Speed, VehicleClassname): #Add a speed reduction action
	change = GKSystem.getSystem().newObject("GKSpeedChange", model)
	change.setSection(section)
	change.setSpeed(str(Speed)) #set the new speed
	VehicleClassType=model.getType("GKVehicleClass")
	VehicleClass=model.getCatalog().findByName(VehicleClassname,VehicleClassType)
	change.setVehicleClass(VehicleClass) #add a filter for the vehicle class 
	return change

def NewTrafficCondition():#add a new TrafficConditionName
	cmd = model.createNewCmd( model.getType( "GKTrafficCondition" ))
	model.getCommander().addCommand( cmd )
	res = cmd.createdObject()
	res.setActivationType(GKSimulationEvent.eAlways) #set it to be active throughout the modelled period
	applyToWarmUpAtt = model.getColumn("GKPolicy::applyOnWarmupAtt") #set it to be active in the warm up
	res.setDataValue(applyToWarmUpAtt, QVariant(True))
	return res

def GetVehicleClass( model, name): # get the vehicle class object
	vehicleClassType=model.getType("GKVehicleClass")
	vehicleClass = model.getCatalog().findByName(name, vehicleClassType)
	if vehicleClass == None:
		print ("No Vehicle Class Found")
		return None
	return vehicleClass

condition=model.getCatalog().findByName(TrafficConditionName, model.getType("GKTrafficCondition"))

if condition==None: #find condition or add new one
	condition=NewTrafficCondition()
	condition.setName(TrafficConditionName)

sections=model.getCatalog().getObjectsByType(model.getType("GKSection")) 
for section in sections: #for all sections in road type, if the section has x lanes, make a new speed change in the given Traffic Condition
	section=sections[section]
	nooflanes=section.getNbFullLanes() #get the number of full lanes for this section 
	if section.getRoadType().getName()==RoadTypeName and nooflanes==NumberofLanes:
		speedreductionaction=createSpeedReduction(section,NewSpeed,VehicleClassName)
		speedreductionaction.setName("Speed reduction for section %s" %(section.getId()))
		condition.addChange(speedreductionaction)
		print ("new change")

print ("done")

Anwenden der Verkehrssituation

Zuletzt müssen Sie die Verkehrssituation auf das entsprechende Szenario anwenden, unabhängig davon, ob diese über ein Skript oder manuell hinzugefügt wurde. Öffnen Sie hierzu das entsprechende Szenario, rufen Sie die Registerkarte „Strategies and Conditions“ auf, und aktivieren Sie die neue Verkehrssituation.

Activating Traffic Condition in the Scenario
Verkehrssituation im Szenario aktivieren