2. SUMO入门:核心概念与基础配置

各位同学好,我是你们的老朋友。今天咱们来聊聊SUMO——这个在自动驾驶仿真圈子里绕不开的工具。说实话,我第一次接触SUMO的时候,也被它那一堆概念和文件格式搞得有点懵。但别担心,跟着我一步步来,你会发现它其实挺有意思的。

2.1 SUMO的核心三要素:网络、路线、车辆类型

SUMO仿真,说白了就三样东西:路怎么走、车怎么跑、车长啥样。我习惯把这三点记成「路-线-车」,简单好记。

2.1.1 网络(Network)

网络就是道路地图。它定义了车道数量、连接关系、红绿灯、限速等信息。你可以把它想象成一张「交通底图」。我在项目中遇到过最头疼的事,就是网络文件里车道连接没配好,结果车全堵在路口不动了。

网络文件后缀: .net.xml

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安装

  1. 去SUMO官网下载最新版安装包(.exe文件)
  2. 双击安装,一路Next就行
  3. 安装完成后,把SUMO的bin目录加到系统环境变量PATH里
小技巧: 安装时记得勾选「Add SUMO to 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文件。

注意: netedit生成的网络文件默认命名是"plain"开头的几个文件,需要用netconvert合并。不过别怕,netedit会自动帮你处理。

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秒后出发。

核心逻辑: 路线文件里,vType定义「车的样子」,route定义「车的路线」,vehicle定义「什么时候发车」。

2.5 运行你的第一个仿真

把网络文件和路线文件准备好后,运行:

sumo -n myNet.net.xml -r myRoutes.rou.xml

如果一切顺利,你会看到SUMO的GUI界面弹出来,两辆车在道路上跑起来。我第一次看到这个画面时,还挺有成就感的。

避坑指南: 我曾经因为网络文件和路线文件里的边ID对不上,仿真直接报错退出。检查了半小时才发现是手误写错了一个字母。所以,命名规范很重要,建议用统一的命名规则。

2.6 本章知识体系

下面这张图帮你理清SUMO入门阶段的核心逻辑:

SUMO入门知识体系 网络 (Network) 路线 (Route) 车辆类型 (vType) .net.xml .rou.xml .rou.xml (内嵌) netedit / 手动 / OSM 手动编写 / 随机生成 vType定义参数 运行仿真:sumo -n .net.xml -r .rou.xml

这张图把今天讲的内容串起来了。你想想看,从网络到路线再到车辆类型,最后组合成仿真,逻辑其实很清晰。

好了,今天的内容就到这里。记住:路是骨架,路线是导航,车辆类型是灵魂。把这三样搞明白,SUMO的大门就为你敞开了。

可可精品资料库