Festlegen unterschiedlicher Geschwindigkeitsbegrenzungen für verschiedene Fahrzeugtypen in Aimsun Next

Technische Mitteilung #52

Oktober 2020

Von Tessa Hayman

Viele ModellierInnen kennen diese unglaublich nützliche 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 einsetzen können.

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

Schritt 1: Fügen Sie über das 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«.

Verkehrsituationsgrößen
Verkehrsituationsgrößen

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

Festlegen unterschiedlicher Geschwindigkeitsbegrenzungen für verschiedene Fahrzeugtypen in Aimsun Next

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

Festlegen unterschiedlicher Geschwindigkeitsbegrenzungen für verschiedene Fahrzeugtypen 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 dies 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 wird anschließend über alle im Modell vorhandenen Strecken des angegebenen Straßentyps iteriert und fügt jeder Strecke eine Geschwindigkeitsreduzierung hinzu.

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

Wenn section.roadtype==roadtype und section.numberoflanes:

Geschwindigkeitsreduzierungsmaßnahme erstellen
Geschwindigkeitsreduzierung der Verkehrssituation hinzufügen

				
					'''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, und rufen Sie die Registerkarte „Strategies and Conditions“ auf. Aktivieren Sie die neue Verkehrssituation.

Verkehrssituation im Szenario aktivieren
Verkehrssituation im Szenario aktivieren

  • Hast du eine Frage? Nimm Kontakt auf.
  • Hast du eine Frage? Nimm Kontakt auf.

TEILEN

Share on linkedin
Share on twitter
Share on email