sumo的简单使用
sumo简单教程
- 安装
- 配置环境变量
- 文件配置
- 运行
- python文件生成真实路网
- python调用
如果你也对交通仿真感兴趣,且是一个小白,但是有python基础,我想我可以帮到你。
安装
首先安装为我们入门的第一步:
-
下载地址:https://sumo.dlr.de/docs/Downloads.php;推荐安装windos,乌班图啥的也可以但是在环境问题很难搞。
-
双击安装;这里推荐msi很方便,几乎是傻瓜式安装。
-
不同于pyhcarm,sumo不会为我们添加环境变量,所以安装时你要记住自己的安装路径,方便一会配置。如果你是默认安装方式那你的路径大概是:C:\Program Files (x86)\Eclipse\Sumo
配置环境变量
这步很重要,因为后期我们要配合Python:
- 方法在官网:https://sumo.dlr.de/docs/Basics/Basic_Computer_Skills.html#additional_environment_variables
- 如果你成功了应该是这样:
- 好了你现在已经成功了,你用好友了两个软件:
- gui是仿真界面,netedit是你将来画或修改路网的。
文件配置
一般的仿真文件会有三个:
.net.xml:车辆配置文件
.rou.xml:路网配置文件
.sumocfg:仿真配置文件
文件的编写为大家提供以为大哥的参考:https://blog.csdn.net/weixin_46870466/article/details/115558448
实际上sumo也为我们提供了演示文件:
运行
下一步让我们跑起来:
- 找到之前说的.sumocfg文件比如上面的hello.sumocfg,右键用sumo-gui打开,箭头1是运行,箭头2是延迟(如果跑的太快左拉就会变慢),如果看不清,可以用鼠标拖动,配合滑轮调整图大小这都是基本操作啦:
- 找到之前说的.rou.xml文件比如上面的hello.rou.xml右键用netedit打开就可以修改路网,这部分教程太复杂为大家推荐一个教学视频:https://www.bilibili.com/video/BV1Kt411N7Xp/?spm_id_from=autoNext&vd_source=f9a4b1d50147e488803b17ca19871210
当然我们的目标是python自动生成真实的路网啦。
python文件生成真实路网
现在就是利用真实地图生成真实路网啦,这真的很有意思:
-
首先你得有python解释器,所以说有Python基础是我们的前提,然后我们用Spyder打开这个文件(pycharm打开不好使原因暂时未知),地图能否成功打开极大的依赖你的网速,所以建议大家用手机开个热点:
-
打开以后是这样的,1是我们设置路网的地方,3可以框选区域,2可以培植我们想要的车辆。
-
然后点击这里生成文件;稍等一会,他会自己打开gui界面。
-
生成的文件应该在这里,文件名是你的日期;
-
看着真的很有趣;
python调用
现在就是用python跑起来,让python调用sumo:
- 直接给大家上代码:
import os
import sys
import optparse
import traci
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
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()
print(1)
if options.nogui:
sumoBinary = checkBinary('sumo')
else:
sumoBinary = checkBinary('sumo-gui')
traci.start([sumoBinary, "-c", r"C:\Users\glp10765\Sumo\2022-10-14-10-33-00\osm.sumocfg"])
for step in range(0,3600000):
# traci.vehicle.setSpeed('a12.5',10)
# print(traci.vehicle.getIDList())
# print(traci.edge.getIDList())
# print(traci.inductionloop.getVehicleData('abcd'))
traci.simulationStep()
if step <= 10:
print(traci.vehicle.getIDList())
traci.close()
2.记得在这里修改自己的.sumocfg文件路径哦,这个for循环是你运行的次数;
3.最后对于自动生成的路网,虽然你打开了gui但是并不能跑起来是因为你的文件缺了这几句,加上他!!!
然后就能跑起来啦,至此就是剩下一些traci的函数,如果我后续学会了会更新哒。再见啦