2. SUMO基础入门
各位同学,欢迎来到SUMO的世界。
说实话,我第一次接触SUMO的时候,也被它那一堆术语搞得有点懵。什么网络、路线、车辆类型……感觉像在学一门新语言。但别担心,今天我们就把它拆开揉碎了讲清楚。
2.1 SUMO的安装——别踩我踩过的坑
安装这事,说简单也简单,说坑也坑。我个人习惯用Windows系统做开发,但如果你用Linux,那会更顺畅。
Windows安装步骤:
- 去SUMO官网下载最新的安装包(.exe文件)
- 双击安装,一路Next
- 安装完成后,把SUMO的bin目录加到系统环境变量PATH里
- 打开命令行,输入
sumo --version,看到版本号就说明装好了
Linux(Ubuntu)安装:
sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc
嗯,这里要注意:Linux下装完,环境变量通常会自动配好。如果不行,手动加一下 export SUMO_HOME=/usr/share/sumo 到你的 .bashrc 里。
2.2 核心概念——说白了就这三样
SUMO的核心,说白了就三个东西:网络、路线、车辆类型。你想想看,一个交通仿真,不就是车在路上跑吗?
2.2.1 网络(Network)——路在哪?
网络就是地图。它定义了道路的走向、车道数量、限速、红绿灯等等。SUMO的网络文件是 .net.xml 格式。
我在项目中遇到过最头疼的事,就是网络文件里车道连接没配好,结果车到了路口全堵死。所以,网络文件的质量直接决定了仿真能不能跑起来。
2.2.2 路线(Route)——车怎么走?
路线就是车辆从起点到终点的路径。它由一系列的路段(edge)组成。SUMO里,路线文件是 .rou.xml 格式。
你可能会问:路线是手动指定的吗?其实可以手动,但更常见的是用工具自动生成。比如,你可以定义OD矩阵(起终点矩阵),让SUMO自己算路线。
2.2.3 车辆类型(Vehicle Type)——车长啥样?
车辆类型定义了车的物理属性:长度、最大速度、加速度、颜色等等。这个在 .rou.xml 里用 <vType> 标签定义。
2.3 第一个交通仿真示例——动手吧!
光说不练假把式。我们来写一个最简单的仿真:一条直路,一辆车从一头开到另一头。
第一步:创建网络文件(mynet.net.xml)
最简单的方式是用SUMO自带的 netedit 工具画一条路。但为了让你理解底层结构,我们直接写XML。
<?xml version="1.0" encoding="UTF-8"?>
<net version="1.19" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">
<edge id="edge1" from="node1" to="node2" priority="1" numLanes="1" speed="13.89"/>
<edge id="edge2" from="node2" to="node3" priority="1" numLanes="1" speed="13.89"/>
<junction id="node1" x="0" y="0" type="dead_end"/>
<junction id="node2" x="100" y="0" type="priority"/>
<junction id="node3" x="200" y="0" type="dead_end"/>
<connection from="edge1" to="edge2" fromLane="0" toLane="0"/>
</net>
这段代码定义了一条200米长的直路,分成两段(edge1和edge2),限速13.89 m/s(约50 km/h)。
第二步:创建路线文件(myroute.rou.xml)
<?xml version="1.0" encoding="UTF-8"?>
<routes>
<vType id="car1" length="4.5" maxSpeed="13.89" accel="2.6" decel="4.5" color="1,0,0"/>
<vehicle id="veh1" type="car1" depart="0">
<route edges="edge1 edge2"/>
</vehicle>
</routes>
这里定义了一辆红色小轿车,从edge1出发,沿着edge1和edge2行驶。
第三步:创建配置文件(myconfig.sumocfg)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<input>
<net-file value="mynet.net.xml"/>
<route-files value="myroute.rou.xml"/>
</input>
<time>
<begin value="0"/>
<end value="100"/>
</time>
</configuration>
第四步:运行仿真
在命令行里输入:
sumo-gui myconfig.sumocfg
你会看到一个图形界面,一辆红色小车从左边开到右边。嗯,就这么简单。
<gui-only value="true"/>,这样双击配置文件就能直接打开GUI。
2.4 知识体系总览
下面这张图,是我自己画的SUMO核心知识结构。你看一眼,心里就有谱了。
这张图把SUMO的核心概念串起来了。网络是骨架,路线是路径,车辆类型是血肉。三者缺一不可。
2.5 避坑指南
最后,分享几个我踩过的坑:
- 路径问题: 我曾经把网络文件和路线文件放在不同目录,结果SUMO找不到文件。建议所有文件放同一个文件夹。
- 时间设置: 仿真结束时间设得太短,车还没到终点就停了。记得把
end设大一点。 - 车辆出发时间:
depart="0"表示仿真一开始车就出现。如果你想模拟高峰期,可以设置不同的出发时间。
好了,这一章的内容就到这。你跟着做一遍,应该就能跑通第一个仿真了。记住,动手是最好的学习方式。