第1章:微观交通仿真工具SUMO入门
各位同学,今天咱们来聊聊SUMO。说实话,我第一次接触SUMO是在一个城市路网改造项目里,甲方要求评估新路口设计对通行效率的影响。那时候我手头只有CAD图纸,硬着头皮啃了三天SUMO文档,才把第一个仿真跑起来。嗯,踩过的坑不少,但用顺手之后,你会发现这工具是真的香。
1.1 SUMO是什么?为什么选它?
SUMO全称是"Simulation of Urban MObility",一个开源的微观交通仿真平台。说白了,就是能模拟每辆车怎么走、每个路口怎么排队的工具。我个人的习惯是,但凡涉及路网改造、信号灯优化、或者自动驾驶测试,首选SUMO。
为什么?三个理由:
- 开源免费——没有授权限制,想怎么改都行
- 生态完善——支持Python、TraCI接口,能跟其他系统联动
- 精度够用——微观模型能精确到每辆车的跟驰、换道行为
1.2 SUMO安装:别被命令行吓到
安装SUMO其实很简单。我建议直接从官网下载安装包,Windows用户选那个exe文件,一路下一步就行。Linux用户用apt或源码编译,看个人习惯。
安装完成后,记得检查环境变量。打开命令行,输入:
sumo --version
如果能看到版本号,说明安装成功。我曾经遇到一个学员,装完SUMO后死活跑不起来,最后发现是PATH没配好。嗯,这个坑我踩过,所以提醒你一下。
1.3 路网构建:从零开始画路
路网是仿真的基础。SUMO支持两种方式构建路网:
- 手动绘制——用NETEDIT工具,像画图一样画路
- 导入OSM数据——从OpenStreetMap下载真实路网
我个人更推荐新手先用NETEDIT手动画一个小路网,熟悉一下概念。打开NETEDIT,你会看到三个主要区域:
- 画布——绘制路网的地方
- 属性面板——设置道路参数(车道数、限速等)
- 工具栏——选择、绘制、连接等操作
举个例子,画一条双向两车道的路:
- 点击"Edge"工具,在画布上点两个点,生成一条边
- 在属性面板里设置"numLanes"为2,"speed"为13.89(对应50km/h)
- 点击"Connection"工具,设置车道连接关系
保存后,你会得到一个.net.xml文件。这就是路网文件。
1.4 基础仿真文件结构:三个文件搞定一切
一个完整的SUMO仿真,至少需要三个文件。我习惯把它们放在同一个文件夹里,方便管理。
| 文件类型 | 扩展名 | 作用 |
|---|---|---|
| 路网文件 | .net.xml | 定义道路、交叉口、信号灯等物理结构 |
| 交通流文件 | .rou.xml | 定义车辆类型、路线、发车时间 |
| 配置文件 | .sumocfg | 告诉SUMO加载哪些文件、仿真时长等参数 |
咱们一个一个来看。
1.4.1 路网文件 (.net.xml)
这个文件由NETEDIT或netconvert生成,不建议手写。但你要能看懂它的结构:
<?xml version="1.0" encoding="UTF-8"?>
<net version="1.19" junctionCornerDetail="5">
<edge id="edge1" from="node1" to="node2" priority="1" numLanes="2" speed="13.89"/>
<edge id="edge2" from="node2" to="node3" numLanes="1" speed="11.11"/>
<junction id="node1" x="0.0" y="0.0" type="dead_end"/>
<junction id="node2" x="100.0" y="0.0" type="priority"/>
<junction id="node3" x="200.0" y="0.0" type="dead_end"/>
</net>
看到没?每个edge有起点终点,junction有坐标。这就是路网的骨架。
1.4.2 交通流文件 (.rou.xml)
这个文件定义车怎么来、怎么走。我一般用Python脚本生成,但手写也不难:
<routes>
<vType id="car" accel="2.6" decel="4.5" sigma="0.5" length="4.5" maxSpeed="50.0"/>
<vehicle id="veh1" type="car" depart="0.0">
<route edges="edge1 edge2"/>
</vehicle>
<vehicle id="veh2" type="car" depart="5.0">
<route edges="edge1 edge2"/>
</vehicle>
</routes>
这里定义了两种车:veh1在0秒出发,veh2在5秒出发,都走edge1到edge2的路线。注意vType里的参数——accel是加速度,decel是减速度,sigma是驾驶行为随机性。这些参数直接影响仿真效果。
1.4.3 配置文件 (.sumocfg)
这个文件是总指挥,告诉SUMO加载哪些文件:
<configuration>
<input>
<net-file value="mynet.net.xml"/>
<route-files value="myroutes.rou.xml"/>
</input>
<time>
<begin value="0"/>
<end value="100"/>
</time>
</configuration>
保存后,在命令行运行:
sumo-gui myconfig.sumocfg
就能看到仿真动画了。我第一次跑通的时候,看着小车在屏幕上移动,还挺有成就感的。
1.5 知识体系总览
下面这张图,帮你理清本章的核心逻辑:
1.6 避坑指南
最后,分享几个我踩过的坑:
- 路径不连通——检查路网里edge之间的连接关系,别让车走到死胡同
- 文件路径错误——.sumocfg里引用的文件路径要写对,建议用相对路径
- 参数单位搞混——SUMO里速度单位是m/s,不是km/h。我刚开始老搞混,仿真出来的车像蜗牛一样慢
好了,这一章就到这里。SUMO入门其实不难,关键是动手。你打开软件,画一条路,放一辆车,跑起来看看效果。相信我,看到小车动起来的那一刻,你会觉得一切努力都值得。
可可精品资料库