1. SUMO入门
说实话,我第一次接触SUMO是在2015年。那时候刚接手一个自动驾驶项目,老板说「你先搭个仿真环境」。我一脸懵——仿真?用什么仿?怎么仿?
后来踩了不少坑,才慢慢摸清楚SUMO的门道。今天我就把这些经验掰开了讲给你听。
1.1 SUMO到底是什么?
SUMO全称是「Simulation of Urban MObility」——城市交通仿真。名字挺长,说白了就是一个微观交通仿真器。
什么叫微观?就是每一辆车、每一个行人、每一个红绿灯,它都能模拟。你想想看,这跟宏观的交通流模型完全不是一个量级。
我个人习惯把SUMO比作「交通世界的沙盘」。你可以在里面搭路网、放车辆、设信号灯,然后看它们怎么跑。自动驾驶算法要测试?扔进去跑一跑就知道了。
核心特点:
- 开源免费——这点对个人开发者太友好了
- 微观仿真——每辆车都有自己的行为模型
- 可扩展——支持Python/TraCI接口,想怎么玩都行
- 跨平台——Windows、Linux、macOS都能跑
1.2 自动驾驶仿真,为什么非做不可?
我在项目里遇到过一个问题:实车测试一次成本太高了。租场地、请司机、调设备,一天下来几万块就没了。而且有些极端场景——比如前车急刹、行人鬼探头——你在真实道路上根本不敢测。
仿真就不一样了。你可以:
- 低成本反复测试——改个参数,点一下运行,几秒钟就能看结果
- 构造极端场景——想测什么场景就造什么场景,没有安全风险
- 批量自动化——写个脚本,一晚上跑几千个测试用例
- 可复现——同样的场景,今天跑和明天跑,结果完全一致
嗯,这里要注意:仿真不能完全替代实车测试。但它是开发流程中不可或缺的一环。我见过太多团队跳过仿真直接上路,结果...嗯,不说了,都是泪。
1.3 SUMO的五大核心概念
刚开始学SUMO的时候,我被一堆术语搞晕了。其实核心就五个东西,搞懂了它们,你就掌握了SUMO的骨架。
1.3.1 网络(Network)
网络就是路网——车在哪儿跑?路怎么连?车道有几条?限速多少?
SUMO的路网由节点(Node)和边(Edge)组成。节点是路口,边是路段。每个路段可以有多条车道,每条车道都有自己的属性。
我曾经犯过一个低级错误:建路网时忘了设置车道数量,结果所有车都在单车道里挤着。仿真结果惨不忍睹。
1.3.2 路线(Route)
路线就是车辆从起点到终点的路径。你可以手动指定,也可以让SUMO自动计算。
手动指定适合固定路线测试,比如公交车。自动计算适合随机交通流,比如模拟城市交通。
小技巧:我一般先用自动计算生成基础路线,再手动调整关键车辆的路径。这样既省事又灵活。
1.3.3 车辆(Vehicle)
车辆是仿真的主角。每辆车都有:
- 类型(小轿车、卡车、公交车...)
- 长度、最大速度、加速度
- 跟车模型(怎么跟着前车走)
- 换道模型(怎么变道)
你可以给每辆车单独设置参数,也可以定义车辆类型,然后批量生成。
1.3.4 探测器(Detector)
探测器用来收集数据。没有它,你跑完仿真只能看到动画,拿不到量化结果。
SUMO支持多种探测器:
| 探测器类型 | 作用 | 输出数据 |
|---|---|---|
| 感应线圈(Induction Loop) | 检测车辆通过 | 车流量、速度、时间 |
| 浮动车(Floating Car) | 记录单辆车轨迹 | 位置、速度、加速度 |
| 路段探测器(Lane Area) | 统计路段整体情况 | 平均速度、密度、排队长度 |
我个人习惯在关键路口和路段都布上探测器。数据多了不怕,怕的是跑完仿真发现「咦,这个数据我忘了采」。
1.4 SUMO安装与验证
这部分我尽量说得简单点。安装SUMO其实不复杂,但有几个坑要注意。
1.4.1 安装方式
SUMO官方提供了三种安装方式:
- 二进制安装包——直接下载exe/dmg,双击安装,最简单
- 包管理器——Linux用apt/yum,macOS用brew
- 源码编译——适合需要定制功能的开发者
我建议新手用二进制安装包。省心。
注意:Windows用户安装时记得勾选「Add SUMO to PATH」。不然你后面在命令行里敲sumo会提示找不到命令。我当初就忘了勾,折腾了半小时才反应过来。
1.4.2 验证安装
装完之后,打开命令行(终端),输入:
sumo --version
如果看到类似这样的输出,说明安装成功了:
SUMO Version 1.18.0
Build features: Python 3.10.12, Qt 5.15.3, GDAL 3.4.1
Copyright (c) 2001-2023 German Aerospace Center (DLR) and others
然后跑个最简单的例子验证一下:
sumo-gui
这会打开SUMO的图形界面。如果界面能正常显示,恭喜你,环境搭好了。
1.4.3 跑第一个仿真
SUMO自带了一些示例文件。在安装目录的docs/examples/sumo文件夹里,有个叫helloworld的示例。
打开命令行,进入那个目录,运行:
sumo-gui helloworld.sumocfg
你会看到一辆小车在一条直路上来回跑。虽然简单,但这是你亲手跑起来的第一个SUMO仿真。
我的建议:别急着跳过这一步。花5分钟看看界面上的按钮都是干嘛的。暂停、单步运行、调整速度——这些操作后面会频繁用到。
1.5 本章知识体系
下面这张图帮你梳理一下本章的核心内容:
好了,第一章的内容就到这里。SUMO的安装和核心概念你都了解了。下一章我们会动手搭建第一个完整的仿真场景——从零开始画路网、放车辆、跑仿真。
可可精品资料库