SUMO交通仿真-核心概念和基础知识速览

sumo环境变量设置

sumo1.7默认安装在c盘eclipse目录下。
用户变量添加SUMO_HOME官网说明
在这里插入图片描述

注意事项

  • 速度默认单位为m/s。 (recall that SUMO always uses m/s as the unit for speed, 36.11m/s ~ 130km/h)http://sumo.sourceforge.net/userdoc/Tutorials/Autobahn.html

路网配置

sumo仿真需要两个基本文件net.xml和rou.xml,即路网文件和车辆行为文件,在sumocfg配置文件中指定要用的net.xml文件和rou.xml文件即可运行仿真。路网net.xml文件生成有几种方法:

  1. OSM导出。在OSM官网下载需要仿真的路段,下载为osm格式,修改文件后缀名为xml,之后打开sumo命令行输入netconvert转换语句。--ramps.guess猜测匝道。
netconvert --osm-files D:\sumo\3.osm.xml --ramps.guess -o D:\sumo\3.net.xml
  1. 编写nod.xml节点文件和edg.xml边文件,然后通过netconvert工具去将这两个文件结合成net.xml文件。

JOSM对地图进行清洗

交通需求建模

rou文件即交通需求建模,具体有几种方法。

route & trip

trip是车辆从一地到另一地,通过设定起始边edge、终止边edge和驶离时间。而route可以看作扩大的trip,不值包含车辆经过的第一条边和最后一条,而是包括车辆经过的所有边。route2trips.py可以将route拆分成trip。

输入数据方法

  1. 使用trip定义。每个trip包括the starting edge、 the ending edge and the departure time。
  2. 使用flow定义。与trip基本相同,但是可将有相同到达和离开边的车辆作为一个流处理。注意:如果使用每小时交通量来控制车辆数,最终仿真生成的结果会基本接近设定的每小时交通量
  3. randomTrip,根据net.xml文件随机生成交通流,但是结果不一定真实。-o是使用randomtrip脚本生成的是trip文件,参数添加-r则调用duarouter根据trip转为rou文件。
randomTrips.py -n D:\sumo\3.net.xml -o D:\sumo\3.trips.xml -e 3600 --trip-attributes="departLane=\"best\" departSpeed=\"max\" departPos=\"random\"" -r D:\sumo\3.rou.xml
  1. 其他

流量路由分配

  • OD2Tripseg
    导入OD矩阵转为单个车辆行程trip
  • JTRrouter
    基于交通流量和交叉口转向率计算路径。
  • DUArouter
    基于最短路径算法计算车辆路径。使用动态用户分配算法DUA达到用户均衡状态DUE
    duarouter将flow转rou
  • DFrouter
    基于线圈数据计算车辆路径route
  • MArouter
    计算宏观用户分配,可使用incremental、user equilibrium、stochastic user equilibrium三个选择。

检测线圈

<additional>
  <inductionLoop id="myLoop1" lane="foo_0" pos="42" freq="900" file="out.xml"/>
  <inductionLoop id="myLoop2" lane="foo_2" pos="42" freq="900" file="out.xml"/>
  ....
</additional>

id是给E1线圈起个标识名字,lane和pos是线圈放在何车道何处。freq是收集到的数据累加的频次,file是指定输出结果的文件名。
线圈检测的输出结果为:

  <interval begin="''<BEGIN_TIME>''" end="''<END_TIME>''" id="''<DETECTOR_ID>''" \
      nVehContrib="''<MEASURED_VEHICLES>''" flow="''<FLOW>''" occupancy="''<OCCUPANCY>''" \
      speed="''<MEAN_SPEED>''" harmonicMeanSpeed="''<HARM_MEAN_SPEED>''" length="''<MEAN_LENGTH>''" nVehEntered="''<ENTERED_VEHICLES>''"/>
   ... further intervals ...

nVehContrib是仿真时段完全通过检测器的车辆数,而nVehEntered是所有接触到检测器的车辆数(包括换道未经过、到达或仿真结束时仍在检测器的车辆)。flow是车辆数换算成辆/小时occupancy是占有率,speed是时间平均车速,harmonicMeanSpeed是空间平均车速。
generateTLSE1Detectors.py根据net文件为某个交叉口生成E1检测器。
注意需要把仿真进程停止即关闭sumocfg后感应线圈数据才能输出。

  • Lanearea Detectors(E2)
    面域检查器,类似摄像头,本身具有长度 length或pos,endPos,输出结果可用于测量排队长度。
  • Multi-Entry-Exit Detectors(E3)

车辆属性设置

  • 通过vType定义车辆属性和跟驰、换道模型参数。注意xml的语法,vType<>属性下子属性的添加时可用将子属性包括其中如<laneChanging-LC2013 …/>,子属性结尾加/表示子属性结束
<additional>
  <vType id="myType" length="5"  maxSpeed="27" vClass="passenger" guiShape="passenger"><!-- guiShape="passenger" -->
   <carFollowing-Krauss accel="0.8" decel="4.5" sigma="0.5"/>
   <laneChanging-LC2013 lcStrategic="0.5" lcCooperative="0.0"/>
  </vType>
</additional>

制定一个跟驰模型:

<vType id="idmAlternative" length="5" minGap="2" carFollowModel="IDM" tau="1.0" .../>

对于换道模型:

The parameters are set within the <vType>:

<vType id="myType" lcStrategic="0.5" lcCooperative="0.0"/>

速度分布

http://sumo.sourceforge.net/userdoc/Definition_of_Vehicles,_Vehicle_Types,_and_Routes.html#speed_distributions
speedFactor指速度超过道路限速值的比例, speedDev指The deviation of the speedFactor。
speedFactor=“normc(1,0.1,0.2,2)” will result in a speed distribution where 95% of the vehicles drive between 80% and 120% of the legal speed limit

特殊设置

<additional>
  <variableSpeedSign id="VSS_ID" lanes="LANE_IDS" file="DEF_FILE">
     <step time="<TIME>" speed="<SPEED>"/>

     ... further entries ...

  </variableSpeedSign>
</additional>

time="

<vss>
  <step time="<TIME>" speed="<SPEED>"/>
  <step time="<TIME>" speed="<SPEED>"/>

  ... further entries ...

</vss>
  • sublane通常情况下一根车道只能行驶一辆车,sublane是子车道设置,允许多辆车并列行驶在一个车道上。
    子车道设置可用于三辆车并行在两个车道上、紧急救援车辆仿真、车辆横向移动仿真(横向加速度和速度、冒进型驾驶员的横向侵犯、变道时的动态纵向间隙接受等)
    参数latAlignment: prefered lateral alignment within a lane,latAlignment="compact"时compact: stay close to the neighboring vehicle on the right。
  • SSM交通安全评价设备

驾驶员状态

考虑驾驶员状态Driver_State

事故仿真

仿真运行设置

sumocfg

  • sumocfg可选参数语法
    注意sumocfg即为配置文件的后缀名附加文件value可以写多个xml文件。
    additional-files value=“input_additional.add.xml,input_additional2.add.xml”
 <input>
        <net-file value="net.net.xml"/>
        <route-files value="input_routes.rou.xml"/>
        <additional-files value="input_additional.add.xml,input_additional2.add.xml"/>
    </input>
 <time>
        <begin value="0"/>
        <end value="1000"/>
    </time>

应注意的是,仿真停止是在所有生成的车辆都离开路网后才停止仿真,如果仿真时长达到时还有车辆未离开路网,则仿真还会继续运行。

  • 仿真步长
    仿真步长单位为秒,默认为1秒,--step-length 0.01可改为0.01秒,注意步长关系驾驶员反应时间的下界,因此不建议设置步长大于1.
  • 多次仿真
    根据sumocfg文件,设置不同的随机种子多次仿真,-n即次数。
python <SUMO_HOME>/tools/averageRuns.py example.sumocfg -n 100

输出结果

文件后缀名查询

sumo中所有类型的文件后缀名

demo

英国高速公路
交通流基本图实现

Traci

改变车速和换道等车辆状态

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值