Sumo学习记录1——单车辆仿真


前言

在进行交通管理与控制课程学习时,老师突然要我们学习Sumo来进行交叉口仿真。由于本学期已经学习过Vissim,起初有些不情愿,后面了解到Sumo开源,无需付费也不用找一些破解,而且它可以联合python进行仿真,让我一下子来了兴趣。由于网络上相关资料较少,且大多比较抽象,故记录下来以供以后回顾。


初识

在B站看了点视频,网上也找了一些文章,初步对Sumo认识应该是这样:Sumo仿真需要建立路网,有3种方式,一种是去OpenStreetMap上下,一种是自己画,还有一种是编写xml代码。第一种其实很不错,但是网站进不去。第二种有点像Vissim,试了一下还挺方便。第三种就有点繁琐,不过可以练习帮助了解一些属性。

建立路网后,还需要配置文件和路由文件。配置文件就是声明一下仿真需要啥。路由文件里就是仿真最重要的部分了,包括车辆流向、车辆定义等。


sumo文件类型

sumo官网下载安装sumo后,可以看到它自身带了教程和文档还有一些小案例,可以经常去查看。
自带文档和教程案例
刚开始主要用到的是userdoc下的Definition_of_Vehicles,_Vehicle_Types,_and_Routes和SUMO_edge_type_file,可以了解到sumo的点、边、路线、车辆分别都有什么属性。
在这里插入图片描述

路网文件

我们先说说路网文件(.net.xml),它里面主要是点、边和其他比如信号灯等说明。可以利用sumo自带的netedit,像Vissim那样直接绘制。
在这里插入图片描述

画完之后,可以用pycharm或者vs打开生成net.xml文件,对照自己画的和代码可以帮助我们了解一些点、边的基本属性。
在这里插入图片描述
最后的路网长这样(源文件太长了,我就不放出来了,我还设置了红红绿灯和其他东西):
在这里插入图片描述

路由文件

再说说路由文件(.rou.xml),这里面主要是定义的车辆和路线。

如下面的代码,就定义了一辆车,id是veh1,进入仿真的时间是1,是一辆出租车,加速度为0.8,减速度为4.5,车长为4,跟驰模型为IDM,最大速度为60,换道模型为SL2015。进入的车道是0号车道(最右侧车道开始是0),进入时的速度随机生成,是从边e走到边-w(这些边是你在画路网的时候自己取的名字)。

<routes>
	<vType id="myType" vclass="taxi" accel="0.8" decle="4.5" length="4"
	           callFollwMode="IDM" maxspeed="60" laneChangeModel="SL2015"/>
	<route id="e_st" edges="e -w"/>
	<vehicle id="veh1" depart="1" type="myType" departLane="0"
	             departSpeed="random" route="e_st"/>
</routes>

文档里都是英文,可能直接翻译依然看不太懂,要自己改变值,看看仿真后会出现哪些变化,才能更好地理解这些参数的意义。我这里也做了一些翻译,如下表所示。

在这里插入图片描述

在这里插入图片描述

配置文件

配置文件的后缀是.sumocfg,里面是对这次仿真的一些说明,说明仿真的路网是哪个,路由是哪个,然后仿真时长是多少。

<configuration>
    <input>
        <net-file value="learn.net.xml"/>
        <route-files value="routes.rou.xml"/>
    </input>
    <time>
        <begin value="0"/>
        <end value="1000"/>
    </time> 
</configuration>

把之前画的路网文件(我这里是叫learn.net.xml)和定义的路由文件(routes.rou.xml)放在同一目录下,用sumo的gui打开配置文件即可实现仿真,我们来看看效果。

在这里插入图片描述
仿真如果想看一下效果,记得把Delay开一下(也就是上图左边箭头的右边923,最高是1000),不然太快了.车辆在1秒时候进入了,在最右边车道。


写在最后

sumo其实相对是很友好的,不仅开源,很多文档和案例都附在安装包里了。尽管文档是英文,但是里面的参数都是见名知意的。本文只是最基本的入门,由于我也没学几天,就先写到这里。后面再说说如何生成大量车流,设置信号灯和进行延误评价。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SUMO仿真软件中,可以通过使用TraCI接口实时获取车辆的各种信息,如车辆的位置、速度、加速度、方向等。具体步骤如下: 1. 在SUMO仿真中打开TraCI接口,可以使用以下代码: ```python import traci import traci.constants as tc sumoBinary = "sumo-gui" # sumo可执行文件路径 sumoCmd = [sumoBinary, "-c", "path/to/sumocfg"] # sumo配置文件路径 traci.start(sumoCmd) # 启动TraCI接口 ``` 2. 在仿真过程中,可以使用以下代码实时获取车辆信息: ```python vehicle_id_list = traci.vehicle.getIDList() # 获取所有车辆ID列表 for vehicle_id in vehicle_id_list: position = traci.vehicle.getPosition(vehicle_id) # 获取车辆位置 speed = traci.vehicle.getSpeed(vehicle_id) # 获取车辆速度 acceleration = traci.vehicle.getAcceleration(vehicle_id) # 获取车辆加速度 lane_index = traci.vehicle.getLaneIndex(vehicle_id) # 获取车辆所在车道的索引 lane_position = traci.vehicle.getLanePosition(vehicle_id) # 获取车辆在当前车道上的位置 lane_angle = traci.vehicle.getLaneAngle(vehicle_id) # 获取车辆所在车道的角度 lane_width = traci.lane.getWidth(lane_index) # 获取车辆所在车道的宽度 lane_length = traci.lane.getLength(lane_index) # 获取车辆所在车道的长度 direction = traci.vehicle.getDrivingDirection(vehicle_id) # 获取车辆行驶方向 ``` 以上代码仅提供了获取车辆部分信息的示例,TraCI接口还支持获取其他车辆信息,如车辆类型、路线等。具体的接口函数可以参考SUMO官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Douglassssssss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值