2. SUMO入门:核心概念与基础配置
各位同学好,我是你们的老朋友。今天咱们来聊聊SUMO——这个在自动驾驶仿真圈子里绕不开的工具。说实话,我第一次接触SUMO的时候,也被它那一堆概念和文件格式搞得有点懵。但别担心,跟着我一步步来,你会发现它其实挺有意思的。
2.1 SUMO的核心三要素:网络、路线、车辆类型
SUMO仿真,说白了就三样东西:路怎么走、车怎么跑、车长啥样。我习惯把这三点记成「路-线-车」,简单好记。
2.1.1 网络(Network)
网络就是道路地图。它定义了车道数量、连接关系、红绿灯、限速等信息。你可以把它想象成一张「交通底图」。我在项目中遇到过最头疼的事,就是网络文件里车道连接没配好,结果车全堵在路口不动了。
2.1.2 路线(Route)
路线就是车辆从起点到终点的行驶路径。它由一系列边(edge)组成。你想想看,没有路线,车就像没导航的司机,只能在原地打转。
2.1.3 车辆类型(Vehicle Type)
车辆类型定义了车的物理属性:长度、最大速度、加速度、颜色等等。嗯,这里要注意,不同类型的车在仿真中行为差异很大——比如公交车和私家车的停靠逻辑完全不同。
| 核心概念 | 对应文件 | 作用 |
|---|---|---|
| 网络 | .net.xml | 定义道路拓扑与交通设施 |
| 路线 | .rou.xml | 定义车辆行驶路径 |
| 车辆类型 | .rou.xml(内嵌) | 定义车辆物理与行为参数 |
2.2 安装SUMO:别怕,其实很简单
SUMO的安装分三步走。我个人习惯用Windows系统,但Linux和macOS也完全没问题。
2.2.1 Windows安装
- 去SUMO官网下载最新版安装包(.exe文件)
- 双击安装,一路Next就行
- 安装完成后,把SUMO的bin目录加到系统环境变量PATH里
2.2.2 Linux安装
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc
一行命令搞定。Linux用户就是爽快。
2.2.3 验证安装
打开终端或命令行,输入:
sumo --version
如果能看到版本号,恭喜你,安装成功了。
2.3 生成网络文件(.net.xml)
网络文件怎么来?有三种方式:
- 手动编写: 用XML编辑器直接写,适合小场景
- 使用netedit: SUMO自带的图形化编辑器,拖拽即可
- 从OSM导入: 用真实地图数据转换,适合大场景
我建议初学者先用netedit。为什么?因为你能直观看到路网长什么样,不容易出错。
2.3.1 用netedit创建简单路网
netedit
在命令行输入这个,就会弹出图形界面。你可以在里面画路、设红绿灯、调限速。画完后保存,自动生成.net.xml文件。
2.3.2 手动编写示例
如果你喜欢硬核一点的方式,可以这样写:
<?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" priority="1" numLanes="2" 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"/>
</net>
这段代码定义了一条两车道的直路,限速50km/h(13.89 m/s)。
2.4 生成路线文件(.rou.xml)
有了路,还得有车。路线文件就是干这个的。
2.4.1 定义车辆类型
<vType id="car" accel="2.6" decel="4.5" sigma="0.5" length="5" maxSpeed="20"/>
这里定义了一种叫"car"的车辆类型:加速度2.6 m/s²,减速度4.5 m/s²,车长5米,最高速度20 m/s(72 km/h)。
2.4.2 定义路线和车辆
<routes>
<vType id="car" accel="2.6" decel="4.5" sigma="0.5" length="5" maxSpeed="20"/>
<route id="route1" edges="edge1 edge2"/>
<vehicle id="veh1" type="car" route="route1" depart="0"/>
<vehicle id="veh2" type="car" route="route1" depart="5"/>
</routes>
这段代码让两辆车沿着edge1→edge2行驶,第一辆0秒出发,第二辆5秒后出发。
2.5 运行你的第一个仿真
把网络文件和路线文件准备好后,运行:
sumo -n myNet.net.xml -r myRoutes.rou.xml
如果一切顺利,你会看到SUMO的GUI界面弹出来,两辆车在道路上跑起来。我第一次看到这个画面时,还挺有成就感的。
2.6 本章知识体系
下面这张图帮你理清SUMO入门阶段的核心逻辑:
这张图把今天讲的内容串起来了。你想想看,从网络到路线再到车辆类型,最后组合成仿真,逻辑其实很清晰。
好了,今天的内容就到这里。记住:路是骨架,路线是导航,车辆类型是灵魂。把这三样搞明白,SUMO的大门就为你敞开了。