SUMO(三)——TraCI的基本应用

TraCI是"Traffic Control Interface"的简称。它允许访问正在运行的道路交通模拟,允许检索模拟对象的值并在线操纵其行为。简单来说,它可以一帧一帧地对路网进行模拟,然后给出模拟对象的各种状态信息。

一切以官方文档为准。

一切以官方文档为准。

一切以官方文档为准。

0 TraCI的安装

懒得写了,以下内容摘自我的好兄弟公牛奶的文章sumo与python的接口——TraCI

首先找到traci的安装目录:sumo\tools

打开python的安装目录(或者anaconda安装目录)–> Lib --> site-packages,在该目录下新建traci.pth文件,在该文件中输入traci的安装目录。

ps:可通过cmd打开python输入import traci 检验是否安装成功。

1 使用的基本模板

官网上的模板我总结一下,是这样的:

from __future__ import absolute_import
from __future__ import print_function

import os
import sys
import optparse
import random

# we need to import python modules from the $SUMO_HOME/tools directory
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 sumolib import checkBinary  # noqa
import traci  # noqa

def run():
    while traci.simulation.getMinExpectedNumber() > 0:
        traci.simulationStep()
        if traci.trafficlight.getPhase("0") == 2:
            # we are not already switching
            if traci.inductionloop.getLastStepVehicleNumber("0") > 0:
                ......
        step += 1
    traci.close()
    sys.stdout.flush()

def get_options():
    optParser = optparse.OptionParser()
    optParser.add_option("--nogui", action="store_true",
                         default=False, help="run the commandline version of sumo")
    options, args = optParser.parse_args()
    return options

if __name__ == "__main__":
    options = get_options()

    # this script has been called from the command line. It will start sumo as a
    # server, then connect and run
    if options.nogui:
        sumoBinary = checkBinary('sumo')
    else:
        sumoBinary = checkBinary('sumo-gui')

    # first, generate the route file for this simulation
    generate_routefile()

    # this is the normal way of using traci. sumo is started as a
    # subprocess and then the python script connects and runs
    traci.start([sumoBinary, "-c", "data/cross.sumocfg",
                             "--tripinfo-output", "tripinfo.xml"])
    run()

真的好长,但是我个人感觉有很多并不是必须的,比如说前两行,就是让 p y t h o n 2 python2 python2 超前应用 p y t h o n 3 python3 python3 的一些语法。但我们的电脑上本来就是 p y t h o n 3 python3 python3 ,有必要吗?没有必要!

再比如说,一开始的判断 S U M O _ H O M E SUMO\_HOME SUMO_HOME 是否在环境变量中。那这个我们都已经设置过了肯定在啊,又不用在别人电脑上跑,那这一段很明显我们也是可以删掉的。

再比如说,它运行 s u m o sumo sumo 需要判断参数是否要打开 G U I GUI GUI 界面,确实有点多余了。数据分析一般也用不到可视化界面吧?一般都要跑好多次,可视化界面只会变得运行超级慢!

综上所述,我总结了我使用的,比较简单的模板:

import sys
from sumolib import checkBinary 
import traci

def run():  # 所需要进行的操作就放在这里面
    step = 0
    while traci.simulation.getMinExpectedNumber() > 0:  # 意思就是还有车需要处理就处理
        traci.simulationStep()  # 仿真一步
        ......
        step += 1
    traci.close()  # 仿真结束 关闭TraCI
    sys.stdout.flush()  # 清除缓冲区

if __name__ == "__main__":
    sumoBinary = checkBinary('sumo')  # 找到sumo的位置
    traci.start([sumoBinary, "-c", "xxx.sumocfg",
                             "--tripinfo-output", "tripinfo.xml"])
    # TraCI,启动!注意这里输出了仿真信息,保存为tripinfo.xml
    run()

我觉得这样比较好捏!

2 TraCI的一些指令

指令有好多类,我们分别来进行吧

2.1 查询类指令

2.1.1 查询交通讯息类

2.1.1.1 查询车辆信息

指令模式都是

traci.vehicle.xxx

下面就来介绍一下不同的 x x x xxx xxx

i d   l i s t id\ list id list 返回所有的正在仿真系统中运行的车的id。指令为getIDList()

c o u n t count count 返回正在仿真系统中运行的车的数量。指令为getIDCount()

s p e e d speed speed 返回要查询的车在上一步仿真时的速度。指令为getSpeed(vheID)

a c c e l e r a t i o n acceleration acceleration 返回要查询的车在前几步的仿真中的加速度。指令为getAcceleration(vheID)

p o s i t i o n position position 返回要查询的车在上一步仿真时的位置,返回结果为[m; m]。指令为getPosition(vheID)

p o s i t i o n 3 D position 3D position3D 和上一条一样,不过返回的是三维结果[m; m; m]。指令为getPosition3D(vheID)

a n g l e angle angle 返回要查询的车在上一步仿真的角度(好怪)。指令为GetAngle(vheID)

r o a d   i d road\ id road id 返回要查询的车在上一步仿真所在的道路的id。指令为getRoadID(vheID)

l a n e   i d lane\ id lane id 返回要查询的车在上一步仿真所在的车道的id。指令为getLaneID(vheID)

l a n e   i n d e x lane\ index lane index 返回要查询的车在上一步仿真所在的车道的index。指令为getLaneIndex(vheID)

r o u t e   i d route\ id route id 返回要查询的车的路线id。指令为getRouteIndex(vheID)

e d g e s edges edges 返回要查询的车的路线所包含的边,以 s t r i n g string string形式返回。指令为getRoute(vheID)

l a n e   p o s i t o i n lane\ positoin lane positoin 返回 要查询的车在目前所在的车道的位置。指令为getLanePosition(vheID)

d i s t a n c e distance distance 返回要查询的车辆已经行驶过的路程。指令为getDistance(vheID)

其他的指令详见官网

2.1.1.2 查询行人信息

指令模式都是

traci.person.xxx

基本都与 2.1.1.1 一样,但是也有一些行人特有的指令,在这里进行列举:

s l o p e slope slope: 返回当前行人所在位置的坡度。指令为getSlope(personID)

m i n G a p minGap minGap:返回当前行人的偏移量(如果是停止的,那就返回与前面的人的间距)。指令为getMinGap(personID)

w i d t h width width:返回当前行人的宽度(啊??还有这样的??)。指令为getWidth(personID)

w a i t i n g   t i m e waiting\ time waiting time:返回当前行人的等待时间。指令为getWaitingTime(personID)

n e x t   e d g e next\ edge next edge:返回行人接下来会走的路。如果已经没有要走的路了,就会返回空的字符串。指令为GetNextEdge(personID)

2.1.1.3 查询一个类型的车辆信息

指令模式都是

traci.vehicletype.xxx

常用的函数有:

i d   l i s t id\ list id list 返回现在已经加载了的车辆的所有类型的id。指令为getIDList()

c o u n t count count 返回现在已经加载了的车辆的类型数量。指令为getIDCount()

l e n g t h length length 返回这种类型的车辆的长度。指令为getLength(typeID)

v m a x vmax vmax 返回这种车辆的最大速度。指令为getMaxSpeed(typeID)

a c c e l accel accel 返回这种车辆的最大加速度。指令为getAccel(typeID)

d e c e l decel decel 返回这种车辆的最大减速度。指令为getDecelt(typeID)

t a u tau tau 返回这种类型的司机的期望前进时间(?我不理解)。指令为getTau(typeID)

s i g m a sigma sigma 返回这种类型的司机的不足之处(磨蹭程度),返回一个0~1的数字来表示。指令为getImperfection(typeID)

s p e e d F a c t o r speedFactor speedFactor 返回这种类型的司机的速度因子。指令为getSpeedFactor(typeID)

s p e e d D e v speedDev speedDev 返回这种类型的司机的速度因子的偏离值。指令为getSpeedDeviation(typeID)

2.1.1.4 查询一种线路的信息

指令都是

traci.route.xxx

常用的函数有:

i d   l i s t id\ list id list 返回现在已经加载了的所有线路的id。指令为getIDList()

c o u n t count count 返回现在已经加载了的所有线路数量。指令为getIDCount()

e d g e s edges edges 返回这一条线路所包含的所有的边。指令为getEdges(routeID)

2.1.2 查询Detector状态

2.1.2.1 查询线圈(E1 Detectior)状态
traci.inductionloop.xxx

i d   l i s t id\ list id list 返回现在已经加载了的所有线圈的id。指令为getIDList()

p o s i t o n positon positon: 返回这个线圈在这根车道上的坐标。指令为getPosition()

l a n e   I D lane\ ID lane ID:返回这个线圈在哪条边。指令为getLaneID()

c o u n t count count:返回图上有几个线圈。指令为getIDCount()

l a s t   s t e p   v e h i c l e   n u m b e r last\ step\ vehicle\ number last step vehicle number:返回上一个仿真时间有几辆车在这个线圈上。指令为getLastStepVehicleNumber()

l a s t   s t e p   m e a n   s p e e d last\ step\ mean\ speed last step mean speed:返回上一个仿真时间在线圈上的车的平均速度。指令为getLastStepMeanSpeed()

l a s t   s t e p   v e h i c l e   n u m b e r last\ step\ vehicle\ number last step vehicle number:返回上一个仿真时间在这个线圈上的车的id。指令为getLastStepVehicleIDs()

l a s t   s t e p   o c c u p a n c y last\ step\ occupancy last step occupancy:返回上一个仿真时间在线圈上的车霸占了线圈的多大地方(百分比)。指令为getLastStepOccupancy()

l a s t   s t e p   v e h i c l e   d a t a last\ step\ vehicle\ data last step vehicle data:这位更是重量级。直接返回上一个仿真时间在这个线圈上的车的信息。指令为getVehicleData()

2.1.2.2 查询Lane Area Detector(E2 Detector)的状态

真不会翻译了,咋翻译啊?基本就是能够监控一整条车道的情况,类似于监控摄像头?

traci.lanearea.xxx

基本常用指令跟E1 Detector一个样。说几个不一样的:

长文字警告!!

l a s t   s t e p   j a m   l e n g t h   i n   n u m b e r   o f   v e h i c l e last\ step\ jam\ length\ in\ number\ of\ vehicle last step jam length in number of vehicle:返回上一个仿真时间内这条路上排队的(被堵住的)有几辆车。指令为getJamLengthVehicle()

l a s t   s t e p   j a m   l e n g t h   i n   m e t e r s last\ step\ jam\ length\ in\ meters last step jam length in meters:返回上一个仿真时间内这条路上排队的(被堵住的)队伍有几米。指令为getJamLengthMeters()

2.1.2.3 查询E3 Detector的状态

还没明白这个是啥。等明白过来了再更新。

2.1.3 查询路网相关参数

2.1.3.1 查询节点(junction)相关参数
traci.junction.xxx

i d   l i s t id\ list id list 返回图里所有节点的id。指令为getIDList()

c o u n t count count:返回图上有几个节点。指令为getIDCount()

p o s i t o n positon positon: 返回这个节点的位置。指令为getPosition()

s h a p e shape shape:返回这个节点是个啥形状,返回的是2D点阵。指令为getShape(juntionID)

2.1.3.2 查询边(Edge)相关参数
traci.edge.xxx

i d   l i s t id\ list id list 返回图里所有边的id。指令为getIDList()

c o u n t count count:返回图上有几条边。指令为getIDCount()

l a n e   n u m b e r lane\ number lane number:返回这条边有几条车道。指令为getLaneNumber()

s t r e e t   n a m e street\ name street name:返回这条边叫啥名字。指令为getStreetName()

c u r r e n t   t r a v e l   t i m e current\ travel\ time current travel time:返回经过这条边的平均行程时间(总长度除以平均速度)。指令为getTravelTime()

x x x   e m i s s i o n s xxx\ emissions xxx emissions:返回这条边的相关气体排放。xxx可以是noise、CO2、CO、HC、PMx、NOx。指令为getxxxEmission()

f u e l   e m i s s i o n fuel\ emission fuel emission:返回这条边在这个仿真时间的车辆燃油消耗之和。指令为getFuelConsumption()

e l e c t r i c i t y   e m i s s i o n electricity\ emission electricity emission:返回这条边在这个仿真时间的车辆电量消耗之和。指令为getElectricityConsumption()

l a s t   s t e p   v e h i c l e   n u m b e r last\ step\ vehicle\ number last step vehicle number:返回上一个仿真时间有几辆车在这条路上。指令为getLastStepVehicleNumber()

l a s t   s t e p   m e a n   s p e e d last\ step\ mean\ speed last step mean speed:返回上一个仿真时间在这条路上的车的平均速度。指令为getLastStepMeanSpeed()

l a s t   s t e p   v e h i c l e   n u m b e r last\ step\ vehicle\ number last step vehicle number:返回上一个仿真时间在这条路上的车的id。指令为getLastStepVehicleIDs()

l a s t   s t e p   o c c u p a n c y last\ step\ occupancy last step occupancy:返回上一个仿真时间在这条路上的车霸占了这条路的多大地方(百分比)。指令为getLastStepOccupancy()

2.1.3.3 查询车道(Lane)相关参数
traci.lane.xxx

和上面都一样,就是有几个是特殊的。

( d i s ) a l l o w e d   v e h i c l e   c l a s s e s (dis)allowed\ vehicle\ classes (dis)allowed vehicle classes:返回这条车道(不)允许的可以通过的车辆类型。指令为get(Dis)Allowed()

w i d t h width width:返回这条车道有多宽。指令为getWidth()

2.1.4 查询其他设施的状态

2.1.4.1 查询红绿灯状态
traci.trafficlight.xxx

i d   l i s t id\ list id list 返回图里所有红绿灯的id。指令为getIDList()

c o u n t count count:返回图上有几个红绿灯。指令为getIDCount()

s t a t e state state:返回红绿灯的相位信息,表示方法为GgYyRrOo。小写字母表示车流必须要减速。指令为getRedYellowGreenState()

d e f a u l t   c u r r e n t   p h a s e   d u r a t i o n default\ current\ phase\ duration default current phase duration:返回现在这个相位总共的持续时间。指令为getPhaseDuration()

c o n t r o l l e d   l i n k s controlled\ links controlled links:这个红绿灯控制着哪些车道。指令为getControlledLanes()

c u r r e n t   p h a s e current\ phase current phase:返回现在的相位id。指令为getPhase()

a s s u m e d   t i m e   o f   n e x t   s w i t c h assumed\ time\ of\ next\ switch assumed time of next switch:什么时候切换到下一个相位。请注意,切换时间不是相对于当前模拟时间而言的(查询返回的结果将是绝对时间,从模拟开始计算);要获得相对时间,需要从该查询返回的结果中减去当前模拟时间。还请注意,在执行/适应性交通灯的情况下,时间可能会有所不同。指令为getNextSwitch()

p r i o r i t y   v e h i c l e s priority\ vehicles priority vehicles:返回可以优先通过的车辆id。指令为getPriorityVehicles()

2.1.4.2 查询公交车站状态
traci.busstop.xxx

e n d   p o s end\ pos end pos:公交车站尾部位置。指令为getEndPos()

l a n e   I D lane\ ID lane ID:返回所在的车道id。指令为getLaneID()

n a m e name namestring:返回公交车站的名字。指令为getName()

p e r s o n   c o u n t person\ count person count:返回在车站等车的人的总数。指令为getPersonCount()

p e r s o n   I D person\ ID person ID:返回在等车的人的id。指令为getPersonIDs()

s t a r t   p o s start\ pos start pos:公交车站头部位置。指令为getStartPos()

v e h i c l e   c o u n t vehicle\ count vehicle count:有多少车会在这里停。指令为getVehicleCount()

v e h i c l e   I D vehicle\ ID vehicle ID:返回在这里停靠的车的id。指令为getVehicleIDs()

2.1.4.3 查询停车场状态
traci.parkingarea.xxx

e n d   p o s end\ pos end pos:停车场尾部位置。指令为getEndPos()

l a n e   I D lane\ ID lane ID:返回所在的车道id。指令为getLaneID()

n a m e name namestring:返回停车场的名字。指令为getName()

s t a r t   p o s start\ pos start pos:停车场头部位置。指令为getStartPos()

v e h i c l e   c o u n t vehicle\ count vehicle count:有多少车会在这里停。指令为getVehicleCount()

v e h i c l e   I D vehicle\ ID vehicle ID:返回在这里停靠的车的id。指令为getVehicleIDs()

2.1.5 其他状态查询

2.1.5.1 仿真状态查询
traci.simulation.xxx

c u r r e n t   s i m u l a t i o n   t i m e current\ simulation\ time current simulation time:目前的仿真时间,单位为秒。指令为getTime()

c u r r e n t   s i m u l a t i o n   t i m e current\ simulation\ time current simulation time:目前的仿真时间,单位为毫秒。指令为getCurrentTime()

n u m b e r   o f   l o a d e d   v e h i c l e s number\ of\ loaded\ vehicles number of loaded vehicles:目前已经加载的车的数量。指令为getLoadedNumber()

i d s   o f   l o a d e d   v e h i c l e s ids\ of\ loaded\ vehicles ids of loaded vehicles:目前已经加载的车的id。指令为getLoadedIDList()

n u m b e r   o f   d e p a r t e d   v e h i c l e s number\ of\ departed\ vehicles number of departed vehicles:目前已经离开仿真的车辆数。指令为getDepartedNumber()

i d s   o f   d e p a r t e d   v e h i c l e s ids\ of\ departed\ vehicles ids of departed vehicles 目前已经离开的车辆id。指令为getDepartedIDList()

n u m b e r   o f   v e h i c l e s   t h a t   b e g i n   a   s t o p number\ of\ vehicles\ that\ begin\ a\ stop number of vehicles that begin a stop有多少车开始停下。指令为getStopStartingVehiclesNumber()

i d s   o f   v e h i c l e s   t h a t   b e g i n   a   s t o p ids\ of\ vehicles\ that\ begin\ a\ stop ids of vehicles that begin a stop 开始停下的车的id。指令为getStopStartingVehiclesID
L i s t n u m b e r   o f   v e h i c l e s   t h a t   e n d   a   s t o p Listnumber\ of\ vehicles\ that\ end\ a\ stop Listnumber of vehicles that end a stop 开始行动的车的数量。指令为step.getStopEndingVehiclesNumber()

i d s   o f   v e h i c l e s   t h a t   e n d   a   s t o p ids\ of\ vehicles\ that\ end\ a\ stop ids of vehicles that end a stop 开始行动的车的id。指令为step.getStopEndingVehiclesIDList()

n u m b e r   o f   v e h i c l e s   i n v o l v e d   i n   a   c o l l i s i o n number\ of\ vehicles\ involved\ in\ a\ collision number of vehicles involved in a collision 被卷入撞车事故的车的数量。指令为step.getCollidingVehiclesNumber()

i d s   o f   v e h i c l e s   i n v o l v e d   i n   a   c o l l i s i o n ids\ of\ vehicles\ involved\ in\ a\ collision ids of vehicles involved in a collision 被卷入撞车事故的车的id。指令为step.getCollidingVehiclesIDList()

2.1.5.2 别的

感觉不大常用,不整理了。以后用到了再说!

2.2 修改类指令

2.2.1 修改交通讯息类

2.2.1.1 修改车辆状态

同样 格式还是

traci.vehicle.xxx

stop 停车

setStop(self, vehID, edgeID, pos=1.0, laneIndex=0, duration=-1073741824.0, flags=0, startPos=-1073741824.0, until=-1073741824.0)

让指定车辆在某一条边的某一个车道的某一个位置停车一段时间。如果重复对这个地方进行这个命令,就会修改停车时间,修改为0就会取消这个停车。

ChangeLane 修改车道

changeLane(self, vehID, laneIndex, duration)

让指定的车辆变道去某一个车道。会在指定的时间内

SlowDown 减速

slowDown(self, vehID, speed, duration)

让指定的车在指定的时间内减速到一定的速度。

ChangeTarget 改变目标

changeTarget(self, vehID, edgeID)

让指定的车辆把行驶目标改成所选的边。

SpeedMax 改变最大速度

setMaxSpeed(self, vehID, speed)

让指定的车辆的最大速度变为设定的速度。

Speed 改变速度

setSpeed(self, vehID, speed)

这位更是重量级。直接简单粗暴,让指定的车辆的速度变为设定的速度。

Accelerate 加速

setAcceleration(self, vehID, acceleration, duration)

跟减速一样,不多说了。

SetRoute byID 通过ID改变线路

setRouteID(self, vehID, routeID)

让指定的车辆的线路改成指定的ID对应的线路。

SetRoute 改变线路

setRoute(self, vheID, edgeList)

这个真的重量级,直接让指定的车辆按照我们自己写的边表来行驶!

MoveToXY 开往指定位置

moveToXY(self, vehID, edgeID, lane, x, y, angle=-1073741824.0, keepRoute=1, matchThreshold=100)

将车辆放置在给定的x, y坐标处,并将其角度设定为给定值(用于绘图)。
如果角度被设置为INVALID_DOUBLE_VALUE,则车辆会假定它所行驶的路的自然角度。
如果keepRoute被设置为1,则采取现有路线中最近的位置。如果keepRoute设置为0,车辆可以移动到网络中的任何路,但它的路线只包括路。
如果keepRoute被设置为2,车辆有keepRoute=0的所有自由,但除此之外,甚至可以移动到道路网络之外。edgeID和车道是可选的位置提示,用于解决不明确的问题。如果在matchThreshold给定的距离内没有找到合适的目标位置,该命令就会失败。

BestLanes 最佳路线

updateBestLanes(self, vehID)

让指定的车走最佳路线。但其实也不大用,因为在设定目标之后会自动选择最优路线的。

Add 加车

add(self, vehID, routeID, typeID='DEFAULT_VEHTYPE', depart='now', departLane='first', departPos='base', departSpeed='0', arrivalLane='current', arrivalPos='max', arrivalSpeed='current', fromTaz='', toTaz='', line='', personCapacity=0, personNumber=0)

加车。routeID为空则会随机走如果两条路不通的话,就会自动找一条能连接两条路的最短路线。别的参数跟我之前的文章也一样,就很无所谓了捏。

Highlight 高亮

highlight(self, vehID, color=(255, 0, 0, 255), size=-1, alphaMax=-1, duration=-1, type=0)

给选定的车加个圈。
size是负的就是默认大小,alphaMax和duuation都是正的话,那就会在指定的时间内逐渐消失。

2.2.1.2 修改行人状态

常用的函数有add、move to XY、speed,用法与2.2.1.1一样。

2.2.1.3 修改类型状态

SpeedMax 改变最大速度

setMaxSpeed(self, typeID, speed)

让指定的车辆的最大速度变为设定的速度。

Acceleration 加速

setAccel(self, typeID, accel)

让指定的车辆类型的最大加速度变为指定的加速度。

Deceleration 加速

setDecel(self, typeID, decel)

让指定的车辆类型的最大减速度变为指定的减速度。

Length 长度

setLength(self, typeID, length)

让指定的车辆类型的车的长度都变为指定长度。

2.2.1.4 修改路线状态

Add 增加

add(self, routeID, edges)

用指定的路线增加一个路线。

2.2.2 修改Detector状态

2.2.2.1 修改线圈(E1 Detector)状态

Time 时间

overrideTimeSinceDetection(self, loopID, time)

用给定的值覆盖测量时间。设为负数就会重置。

2.2.2.2 修改Lane Area Detector(E2 Detector)状态

VehicleNumber 车辆数量

overrideVehicleNumber(self, detID, vehNum)

用给定的值覆盖测量车辆数。设为负数就会重置。

2.2.3 修改路网相关参数

2.2.3.1 修改边(Edge)状态

MaxSpeed 最大速度

setMaxSpeed(self, edgeID, speed)

将指定的路的最大速度调成设定值。

2.2.3.2 修改车道(Lane)状态

AllowedVehicleClasses 允许通过的车辆类型

setAllowed(self, laneID, allowedClasses)

重新设定允许哪些车通过,空则为全都允许。

DisallowedVehicleClasses 不允许通过的车辆类型

setDisallowed(self, laneID, disallowedClasses)

Length 长度

setLength(self, laneID, length)

将车道修改为指定长度。

MaxSpeed 最大速度

setMaxSpeed(self, laneID, speed)

将指定的车道的最大速度设为设定值。

2.2.4 修改其他交通设施参数

2.2.4.1 修改红绿灯相关参数

state 状态

setRedYellowGreenState(self, tlsID, state)

将红绿灯修改为指定状态。state应该是一个字符串,以GgYyRrOo组成。

PhaseIndex 相位

setPhase(self, tlsID, index)

将指定的红绿灯设定为指定相位(第几相位)。

PhaseDuration 相位持续时间

setPhaseDuration(self, tlsID, phaseDuration)

目前相位的剩余时间改为指定时长。

2.2.5 修改其他参数

2.2.5.1 修改仿真参数

ClearPendingVehicles 清除车辆

clearPending(self, routeID='')

还没进来的车统统不要了!如果指定了routeID的话,那就只有指定的routeID的车全都舍弃掉。

SaveState 保存状态

saveState(self, fileName)

将现在的状态保存为指定名称的文件。

LoadState 加载状态

loadState(self, fileName)

加载之前保存的状态。

2.3 订阅(Subscription)

如果说,每一步仿真都有共同的变量是需要查询的,那我们就可以订阅这些变量。这样,每个访问时间都会对这些变量进行查询并保存下来,不用再一个一个去查询了。

具体形式就比如:

import traci
import traci.constants as tc

traci.vehicle.subscribe(vehID, (tc.VAR_ROAD_ID, tc.VAR_LANEPOSITION))
print traci.vehicle.getSubscriptionResults(vehID)
for step in range(3):
   print "step", step
   traci.simulationStep()
   print traci.vehicle.getSubscriptionResults(vehID)
traci.close()

可以查询些什么可以去参考traci.constants

以上。只是总结了一些常用的方法,如果有一些(我觉得)不常用的或者其他想要实现的功能,可以去参考官方文档的!

  • 19
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值