1. 从SUMO仿真到时空轨迹图:一个交通研究者的可视化工具箱
如果你正在用SUMO做交通仿真,是不是经常感觉那一堆XML和CSV数据文件像天书一样?密密麻麻的数字和ID,根本看不出路网上到底发生了什么。我刚开始用SUMO的时候也是这样,仿真跑完了,看着输出的数据文件,完全不知道该怎么把它变成一张能看懂、能汇报、能发论文的图。后来我发现,车辆时空轨迹图简直就是理解仿真结果的“神器”。它能把车辆的时间和空间位置关系,用一张二维图清晰地展示出来,横轴是时间,纵轴是位置,每一条线就是一辆车的“生命轨迹”。拥堵、消散、车队形成,一眼就能看出来。
今天,我就把自己从SUMO原始数据一步步折腾出漂亮时空图的全过程,包括踩过的坑和总结的技巧,毫无保留地分享给你。这个过程就像做菜:SUMO仿真生成原始食材(FCD数据),我们用Python进行清洗和切配(数据处理),最后用Matplotlib装盘出锅(可视化)。我会手把手带你走通这个全链路,从环境准备、数据导出、格式转换,到用Python绘图时如何处理轨迹断裂、如何手动调整路段ID这些让人头疼的细节。无论你是交通工程的学生,还是刚开始接触仿真的研究者,跟着这篇指南,你都能在自己的电脑上复现出专业的车辆时空轨迹图。
2. 第一步:准备你的SUMO仿真“厨房”
在开始炒菜(画图)之前,我们得先把厨房(仿真环境)收拾好,备齐食材(仿真数据)。别担心,这一步虽然有点繁琐,但跟着我做,绝对没问题。
2.1 搭建基础仿真环境
首先,你需要安装SUMO。去SUMO的官网找到对应你操作系统(Windows, macOS, Linux)的安装包,直接安装就行。我习惯把SUMO安装在D:\Sumo这样的路径下,方便找。安装好后,记得把bin目录(比如D:\Sumo\bin)添加到系统的环境变量PATH里,这样在命令行里就能直接调用sumo、duarouter这些命令了。验证安装是否成功,打开命令行输入sumo --version,能看到版本号就说明没问题。
接下来,你需要一个路网文件(.net.xml)。这个文件定义了你的仿真场景在哪里发生,包括道路、车道、交叉口。你可以用SUMO自带的netedit图形化工具自己画一个简单的路网,或者从OpenStreetMap下载真实路网然后用netconvert工具转换。为了演示方便,我们假设你已经有了一个名为mytest.net.xml的路网文件。
2.2 生成车辆行程与运行仿真
有了路网,我们需要往里面放车。SUMO使用trips文件来定义车辆的出发时间、起点和终点。我们可以用SUMO工具集中的randomTrips.py脚本随机生成一批行程。打开命令行,切换到你的工作目录,执行类似下面的命令:
python D:\Sumo\tools\randomTrips.py -n mytest.net.xml -e 3600 -p 2.0
我来解释一下这几个关键参数:
-n mytest.net.xml:指定你的路网文件。-e 3600:这是仿真结束时间,单位是秒。这里设为3600秒,也就是1小时。意思是脚本会在0到3600秒这个时间范围内,为车辆随机分配出发时间。-p 2.0:这个参数控制车辆的“密度”或“生成间隔”。它的意思是平均每2.0秒生成一辆车的行程。这个值越大,生成的车流就越稀疏,车越少;值越小,车流就越密集,车越多。 你可以把它想象成调节车流量的水龙头开关。官方文档可能叫它“行程发生率”的倒数。根据你的路网大小和想模拟的拥堵程度,多试几次这个参数。比如在主干道上想模拟高峰拥堵,可以试试-p 0.5甚至更小。
运行后,你会得到一个trips.trips.xml文件。但这还不是SUMO仿真能直接用的车辆定义文件,我们需要把它转换成rou.xml(车辆路由文件)。这就要用到duarouter:
duarouter -n mytest.net.xml -t trips.trips.xml -o mytest.rou.xml --ignore-errors
这个命令会根据路网,为trips文件中的每一辆车计算一条实际可行的路径,并输出mytest.rou.xml。--ignore-errors参数可以忽略一些小的路径计算错误,让过程更顺畅。
现在,食材(路网和车辆)都准备好了,我们需要一个“菜谱”来告诉SUMO怎么运行这道“菜”,这就是配置文件(.sumocfg)。创建一个文本文件,命名为mytest.sumocfg,内容大致如下:
<configuration>

419

被折叠的 条评论
为什么被折叠?



