如何在Aimsun Next中为不同类型的车辆设置不同的限速

技术注解 #52

2020年10月

作者:Tessa Hayman

许多模型师并不了解Aimsun Next中这一非常有用的功能。 在本技术注解中,Tessa Hayman揭示了如何在动态模型中为不同类型的车辆设置不同的限速。

在某些情况下,每种类型的车辆的限速是不同的。 For instance, on a single-carriageway road in the UK, vehicles over 7.5 tonnes can only travel at 50 miles per hour but other vehicles can travel at 60 miles per hour. 你可以在Aimsun Next中通过对微观和中观模型使用交通管理,或在宏观模型的延迟函数中进行编码。

对于微观和中观模型,道路的速度是由 “限速 “参数设定的。 这可以通过名为 “减速 “的交通管理行动来为某个类别的车辆减速,你也可以用它来降低大型车辆的转向速度。

如何在路段/转弯中加入减速行动

第1步:增加一个交通条件:“项目”> “交通管理” > “新建” > “交通条件”

第2步: 双击“交通条件”打开它。 选择”激活条件”:“总是”并勾选“在仿真预热中应用”。

交通条件参数
“交通条件”参数

第3步: 右击“交通条件”添加一个“减速“行动:“交通条件” > “新建” > “减速”

如何在Aimsun Next中为不同类型的车辆设置不同的限速

第4步: 选择“减速”参数。

如何在Aimsun Next中为不同类型的车辆设置不同的限速

在”减速“菜单中,你可以指定该行动适用于哪个路段/转弯,新的速度是多少,并选择只适用于哪个车辆类别。 在上面的例子中,我们选择了重型车类别,其中包括所有超过7.5吨的车辆类型。

上述方法对一次一个路段或一个转弯有效;对于一个有大量道路的模型来说,这将是一项艰巨的任务,因为在这些道路上,HGV有不同的速度限制。 然而,你也可以选择将速度变化应用于一组路段、一组转弯或一种道路类型。

使用编程对具有设定车道数的道路类型中的所有路段实施减速

然而,你可能想对一个道路类型的子集路段进行减速,例如每小时限速60英里的单车道道路,而不必将其作为一个单独的道路类型。

下面的脚本可以用来为一个给定的道路类型应用减速行动,同时也检查该路段的车道数。 你需要指定”交通条件“名称、新的速度、车辆类别和道路类型以及新速度适用的车道。 然后,该脚本将搜索模型中所有指定道路类型的路段,并为每个路段添加减速行动。

这个程序的伪代码:
Get/Create Traffic Condition
Get vehicle class
For all sections:

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")
				
			

采用“交通条件“

最后,你需要将”交通条件“应用到”场景“中,无论它是通过脚本还是手动添加的;打开场景目标,进入“策略和条件”页。 勾选新的交通条件。

激活情景中的交通条件
激活情景中的交通条件

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

  • 有问题吗? 请联系我们。

    我们在这里提供帮助!

分享