3. SUMO核心概念:网络、路线、车辆、交通流、仿真步长
各位同学,欢迎来到第三章。这一章我们要啃的,是SUMO仿真里最核心的几个概念。说实话,很多新手一上来就急着跑仿真,结果连网络和路线都分不清,最后数据一塌糊涂。我个人习惯是,先把这些基础概念吃透,后面才能玩得转。
咱们一个一个来。我会结合我实际项目里踩过的坑,帮你把这些概念彻底搞明白。
3.1 网络(Network)—— 仿真的“骨架”
网络是什么?说白了,就是你的路网。它定义了车辆能在哪里跑、怎么跑。SUMO里的网络,由节点(Node)和边(Edge)组成。
- 节点(Node):路口、交叉点。我习惯叫它“点”。
- 边(Edge):连接节点的道路。有方向,有车道数,有速度限制。
嗯,这里要注意:SUMO的网络是有向图。每条边只能单向行驶。如果你要做双向道路,得画两条方向相反的边。
核心要点:网络是静态的,它不会随着仿真运行而改变。你导入的OSM地图、手动画的交叉口,最终都会生成一个.net.xml文件。
我在项目中遇到过一件事:有一次导入了一个复杂的城市路网,结果仿真时车辆全堵在一个路口。排查了半天,发现是网络里那个节点的连接(Connection)没配好。所以,网络不只是画路,还得管好路口怎么连。
3.2 路线(Route)—— 车辆要走的路
路线,就是车辆从起点到终点经过的一系列边的集合。你可以把它想象成导航规划出来的路径。
在SUMO里,路线定义很简单:
<routes>
<route id="route1" edges="edge1 edge2 edge3 edge4"/>
</routes>
这里edges属性里列出的,就是车辆依次要经过的边。注意顺序不能乱。
我的经验:如果你不确定路线是否合理,可以用SUMO自带的duarouter工具自动计算。它会根据网络拓扑和交通需求,生成最优路径。我个人习惯是先手动画几条关键路线,再用工具补全。
你想想看,如果没有路线,车辆就像没导航的司机,只能在原地打转。所以,路线是连接网络和车辆的桥梁。
3.3 车辆(Vehicle)—— 仿真的“演员”
车辆是仿真里真正跑起来的对象。它有自己的属性:长度、最大速度、加速度、颜色,以及——它要走的路线。
定义一个车辆:
<vehicle id="car1" route="route1" depart="0">
<param key="maxSpeed" value="13.9"/>
</vehicle>
depart="0"表示它在仿真开始的第0秒出发。你可以给每辆车设置不同的出发时间,模拟真实的交通流。
避坑指南:我曾经给一批车辆设置了相同的出发时间,结果仿真一开始,所有车同时涌进路网,直接造成死锁。后来我改用flow(交通流)来生成车辆,才解决了这个问题。
车辆是仿真的最小单元。你所有的分析——行程时间、排放、拥堵——最终都要落到每一辆车上。
3.4 交通流(Flow)—— 批量生成车辆
手动定义每一辆车?太累了。交通流就是用来批量生成车辆的。你定义好一个流,SUMO会自动按时间间隔生成车辆。
举个例子:
<flow id="flow1" route="route1" begin="0" end="3600" vehsPerHour="600"/>
这个流会在仿真开始后的1小时内,每小时生成600辆车(即每6秒一辆)。
交通流有几个关键参数:
| 参数 | 说明 | 我的建议 |
|---|---|---|
vehsPerHour |
每小时车辆数 | 适合模拟稳定交通流 |
period |
车辆生成间隔(秒) | 适合精确控制车头时距 |
probability |
每步生成概率 | 适合随机交通流 |
核心要点:交通流不是车辆,它是生成车辆的规则。仿真运行时,SUMO会根据流的定义,在每一仿真步检查是否需要生成新车。
我记得有一次做高速公路仿真,用vehsPerHour设了2000辆/小时,结果路网直接崩溃。后来发现,那条路的设计容量只有1800辆/小时。所以,设置交通流时一定要考虑路网的实际承载能力。
3.5 仿真步长(Step)—— 时间的“刻度”
仿真步长,就是SUMO每次计算的时间间隔。默认是1秒。你可以改成0.1秒,甚至更小。
为什么要有步长?因为计算机不能连续计算,只能离散地推进时间。每一步,SUMO都会:
- 更新所有车辆的位置
- 检查是否发生碰撞
- 根据跟驰模型调整速度
- 生成新的车辆(如果交通流条件满足)
步长越小,仿真越精确,但计算量也越大。我个人的经验是:
- 宏观仿真(只看流量、密度):步长1秒就够了
- 微观仿真(研究换道、跟驰行为):建议0.1秒
- 特殊场景(如紧急制动测试):可能需要0.01秒
注意:步长设置不当,会导致仿真结果失真。我曾经用1秒步长仿真一个环形交叉口,结果车辆全部穿模。改成0.1秒后,问题就解决了。说白了,步长就是仿真的“时间分辨率”。
3.6 知识体系总览
为了让你更直观地理解这些概念的关系,我画了一张图:
从这张图你可以看到:网络是基础,路线依赖网络,车辆依赖路线,交通流批量生成车辆,而仿真步长驱动着整个系统的运行。这五个概念环环相扣,缺一不可。
我的建议:刚开始学的时候,不要急着跑复杂的仿真。先拿一个小网络,手动定义几条路线、几辆车,把步长调大调小看看效果。等你真正理解了这些概念的关系,再去处理大规模路网。
好了,这一章的内容就到这里。记住,网络是骨架,路线是路径,车辆是演员,交通流是导演,仿真步长是时钟。把这五个概念刻在脑子里,后面的课程你会轻松很多。
可可精品资料库