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入门知识体系 SUMO仿真框架 五大核心概念 网络(Network) 路线(Route) 车辆(Vehicle) 探测器(Detector) 自动驾驶仿真意义 低成本反复测试 构造极端场景 批量自动化运行 场景可复现 安装与验证 二进制安装包(推荐) 包管理器安装 源码编译安装 验证方法 sumo --version 检查版本 sumo-gui 启动图形界面 运行helloworld示例 打好基础,后面章节会越来越有意思

好了,第一章的内容就到这里。SUMO的安装和核心概念你都了解了。下一章我们会动手搭建第一个完整的仿真场景——从零开始画路网、放车辆、跑仿真。

可可精品资料库