
1. 先搞清楚SUMO是什么为什么值得花时间装它第一次听到SUMO的人多半会以为是个相扑游戏。其实SUMO是Simulation of Urban MObility的缩写直译过来就是“城市交通模拟”一个开源的微观交通仿真软件。它最早由德国航空航天中心DLR开发到现在已经维护了二十多年在交通仿真领域算是老牌选手了而且完全免费、开源、可商用。我理解很多人第一次接触SUMO是出于这几个原因要么是做车联网、V2X相关的研究需要一个能跑车辆轨迹的仿真环境要么是做自动驾驶算法测试需要把感知、决策放到一个可控的交通流里跑要么是搞交通规划、信号配时优化需要一个能模拟路网和车辆交互的工具。SUMO在这几个场景里都是非常高频的选择尤其是学术界和工业界做车路协同、智能网联汽车方向的几乎绕不开它。那有人会问交通仿真的工具不少VISSIM、PTV、TransModeler这些商业软件也有不少人用为什么非要选SUMO我的体会是SUMO最大的优势在于“开放”。它提供了完整的命令行工具链、Python接口TraCI、网络编辑器和大量API接口你可以把交通信号灯的控制逻辑替换成自己的算法可以把车辆的轨迹导出成数据分析甚至可以和CARLA、OMNeT这类软件做联合仿真。这种开放性商业软件很难比。这篇教程是系列的第一篇重点就一个把SUMO装好、跑通第一个仿真。不需要你有多深的编程基础也不需要你懂交通工程理论只要按着文中的步骤一步步来一小时之内你就能看到一个有路口、有车流、有信号灯在动的小场景跑起来。2. 安装前先盘一盘SUMO这套工具链到底包含哪些东西在动手下载之前我建议你先花三分钟了解一下SUMO的组成不然装完以后面对一堆可执行文件你会很困惑。2.1 核心功能模块速览SUMO安装完成后在安装目录的bin文件夹下会看到几十个exe文件。但日常使用频率最高的其实就这五个工具名称作用说明sumo命令行仿真引擎无界面运行适合批量仿真和服务器环境sumo-gui图形化仿真界面可视化查看路网、车辆运行、信号灯变化netedit网络编辑器可视化绘制/编辑道路网络新手友好netconvert网络转换工具把OSM、OpenDrive等格式转为SUMO路网格式duarouter路径分配工具根据车流需求生成车辆行驶路径此外还有一个非常重要的库叫TraCI它不在这五个工具里而是以Python库的形式存在。你安装完SUMO之后在Python环境里配置好环境变量就能通过TraCI实时控制仿真中的车辆、信号灯这是我们后面做二次开发的基础。2.2 安装方式怎么选SUMO的安装方式和很多开源软件一样分为三种官方二进制包、系统包管理器、源码编译。从我的实践经验来看不同场景选择不一样第一如果你只是在Windows电脑上学习或者做小规模仿真直接下载官方提供的Windows安装包双击安装五分钟搞定这是最省心的路径。第二如果你用的是Linux服务器尤其是Ubuntu或者Debian系统用apt install sumo一行命令就能装好。但要注意软件源里的版本可能不是最新版如果你需要用到最新功能还是建议去官网下载或者源码编译。第三如果你要针对源码做二次开发或者需要修改SUMO内核代码那就必须源码编译。但这是一条相对辛苦的路依赖项非常多我不建议初学者一上来就走这条路。本篇教程以Windows安装为主来展开因为这是绝大多数人起步的环境。Linux安装我会在后文补充命令行方式只要照着执行基本不会有坑。3. 手把手完成SUMO下载安装全流程Windows为主这一章是全篇的核心操作部分我来逐步拆解。你不需要记任何多余的参数也不用管那些暂时用不上的功能把所有注意力放在“把软件跑起来”这件事上。3.1 第一步去官网找文件别下错版本SUMO的官方下载地址是sumo.dlr.de这个网站是德国航空航天中心的官方站点下载页面也在这个域名下。打开之后找到“Downloads”页面你会看到不同系统对应的安装包。需要注意一个细节下载文件名里通常会带版本号和系统标识比如sumo-win64-1.20.0.exe这样的格式。64位系统选win64如果你的电脑还是老掉牙的32位系统那就要找win32版本。现在绝大多数电脑都是64位win64基本不会选错。还有一个值得提醒的点有些人会从第三方网站下载所谓“绿色版”“破解版”SUMO完全没必要。SUMO本身是开源免费的官方提供的安装包就是最干净、最稳定的没必要去冒安全风险。第三方打包的版本可能缺失组件环境变量也可能被动过手脚出了问题排查起来非常头疼。下载的时候我建议选带-setup.exe的安装包这种是向导式安装有图形界面引导比直接解压zip压缩包要友好很多对新手来说能少踩一个坑。3.2 第二步安装过程要点安装包下载好之后双击运行。安装过程基本就是“一路Next”的节奏但有几个选项值得留意一下第一安装路径。我强烈建议不要用默认的C:\Program Files\sumo因为路径中含空格虽然一般不影响使用但在某些脚本配置环境变量时可能会遇到奇怪问题。我自己习惯装在D:\Software\sumo或者C:\sumo这种简短路径下。路径越短、越简单后面对接Python和脚本的时候越省事。第二安装类型选择。安装过程中如果有“Complete”和“Custom”两种模式直接选“Complete”完整安装。因为SUMO的各个工具有不少关联依赖比如netedit要用的库文件、sumo-gui要用的3D渲染组件等完整安装能避免后续缺这少那。第三环境变量的问题。新版SUMO安装向导通常会提供一个选项让你自动添加系统环境变量比如“Add to PATH”这种勾选框。如果有勾上。如果没有我们后面手动配置也不难。这里先记住一个判断标准安装完成后打开一个CMD窗口输入sumo如果能出来一堆参数说明说明环境变量没问题如果提示“不是内部或外部命令”那就需要手动配。3.3 第三步手动配置环境变量很多人的第一道坎环境变量是什么我用最通俗的话解释一下你希望系统在任何目录下都能直接调用SUMO的命令而不是每次都输入一长串完整路径那就把SUMO的bin目录加到系统的“PATH”里。这就好比你把某家店的地址存到了手机通讯录以后找它只需要喊名字不用每次都翻地图输入详细地址。手动配置分三步确认你的SUMO安装目录下有bin文件夹里面能看到sumo.exe、sumo-gui.exe这些文件。这是后续一切操作的基准目录。在Windows搜索框里输入“环境变量”打开“编辑系统环境变量”然后点击“环境变量”在“系统变量”里找到Path双击编辑新建一条把SUMO的bin路径填进去。依次点确定关掉所有设置窗口然后新开一个CMD窗口输入sumo --version如果能看到版本号输出说明环境变量配置成功。我自己见的比较多的一个问题是很多人配置完环境变量之后忘记重新打开CMD直接在旧的CMD窗口里运行系统还是读不到刚加的路径于是以为是配置失败了。这是很初级但非常常见的坑记住修改完环境变量必须新开一个终端窗口才生效。3.4 第四步验证安装是否成功配置完环境变量后我们做一次完整的验证。打开CMD窗口依次输入下面几个命令每一条都应该有正常输出sumo --version sumo-gui --version netedit --version netconvert --version duarouter --version如果每一条都能返回类似“SUMO Version 1.20.0”这样的信息说明核心工具都已经安装成功。在这个阶段哪怕你还不懂每个工具具体怎么用的至少环境是稳的后面不会因为装得不对而白折腾半天。如果你还需要用TraCI做Python开发那还要验证Python能否正常导入SUMO的库。在CMD里输入python进入交互模式然后尝试导入python import os import sys sumo_home rD:\Software\sumo os.environ[SUMO_HOME] sumo_home sys.path.append(os.path.join(sumo_home, tools)) import traci print(traci.__version__)这里我写的路径是示例你要改成自己的实际安装目录。如果最后能正常打印出版本号说明TraCI也通了就可以进入下一个阶段了。3.5 Linux系统安装快速指南如果你用的是Linux服务器或者Ubuntu桌面系统我可以顺手把安装方式也写了因为很多人可能在Windows上装了但后续会把仿真任务丢到服务器上跑。Ubuntu/Debian系一行命令就能装sudo apt update sudo apt install sumo sumo-tools sumo-doc装完之后验证一下sumo --version which sumo注意apt安装的SUMO版本往往比官方最新版旧一些比如官方已经到1.20了软件源里可能还是1.18。如果你做研究需要最新版本不要用这种方式去官网下载Linux压缩包配置好环境变量即可。另外Ubuntu里安装的可能性缺失是OpenGL相关的库如果sumo-gui启动报错通常安装一个freeglut3-dev就能解决。4. 立刻跑通你的第一个SUMO仿真从画路网到看见车辆动起来装好不代表会用。我见过太多人安装完就对着一个空白的sumo-gui界面发呆不知道怎么把一辆车放进去。这一章我们就从零开始搭建一个最简单的单路口场景让两辆小车在屏幕里跑起来。4.1 用netedit画一个最简单的十字路口老一批SUMO用户以前都是手工编XML文件来定义路网的那种方式极其折磨人。好在现在有了netedit这个图形化工具鼠标点一点就能画路网。启动netedit有两种方式命令行输入netedit或者在sumo-gui安装目录里找到netedit.exe双击运行。打开之后新建一个网络文件界面里你会看到一个网格画布按住鼠标左键拖动画布右键拖动视角。画路网的操作逻辑可以概括为三个动作画道路节点、连道路边、设置连接关系。第一步画节点。SUMO里的道路交叉口、路段端点都叫节点Node。在netedit左侧工具栏选择“Create Edge”工具然后在画布上点按你的意图画出路的形状。比如我们画一个十字路口需要四个方向的入口节点和一个中心的交叉口节点。最简单的做法是先用工具栏里的“Create Edge”从一个节点连到另一个节点SUMO会自动把中间点设为交叉口。我建议你从最基础的单条直路开始练手比如画一条从(0,0)到(100,0)的路再画一条从(0,0)到(100,100)的路让它俩十字交叉。画完之后按快捷键CtrlS保存文件类型选择.net.xml路网文件。注意SUMO的画路逻辑和CAD不太一样它天然是“节点-路段”模型你画的是edge和node的拓扑关系而不是简单的线条。刚开始画不顺手很正常画几个小场景之后就明白了。4.2 生成车流让车辆有路可走有了路网接下来要造“车流”。SUMO里的车辆生成需要三个基本参数车辆的类型定义、行驶的路径、发车的时刻。在最早的教程里大家都在手工写一个rou.xml文件格式大概是这样的routes vType idcar accel1.0 decel4.5 sigma0.5 length5 maxSpeed16.67/ vehicle idveh1 typecar depart0.00 route edgesedge1 edge2 edge3/ /vehicle /routes如果你是通过netedit建的网我要提醒你一个很重要的细节netedit里默认给每条道路分配的ID可能是类似edge0、edge1这样的编号但也取决于你画的时候的命名。你要知道车辆路径中填的edge id必须和路网文件里实际存在的edge id完全一致否则仿真器会报错“Route has no edges”。为了让流程简单点你可以这样操作在netedit中选中一条路右侧属性面板里能看到它的edge id记下来。然后自己新建一个文本文件命名为demo.rou.xml把上面那段XML里的edge换成你实际路网的edge id保存好备用。4.3 用sumo-gui可视化运行路网文件有了车流文件也有了现在就差把它们联合起来跑一遍。在CMD窗口里切换到这两个文件所在目录执行sumo-gui -n demo.net.xml -r demo.rou.xml如果一切正常sumo-gui会弹出一个窗口但默认的仿真速度是静止的你需要按下工具栏中的“Play”按钮或者按快捷键CtrlShiftP开始仿真。这时你会看到一辆小车出现在路网入口沿着道路移动经过交叉口然后从出口消失。在这一步我建议你好好观察几件事车辆在进入交叉口时会不会减速两辆车同时到达交叉口会不会互相避让信号灯默认是什么状态这些细节反映了SUMO微观仿真的底层逻辑。如果没有信号灯SUMO默认会采用“让右侧车辆先行”的规则这在欧洲路权规则下是合理的。如果你希望模拟有信号灯的交叉口需要在路网里手动添加交通信号灯分布这个我们放到后续教程里详细讲。4.4 用命令行工具批量跑仿真图形界面适合调试和观察但一旦你需要跑大量场景比如设计多组交通流量或者对比不同的信号配时方案时就得用命令行模式了。在同样的目录下执行sumo -n demo.net.xml -r demo.rou.xml --duration-log.statistics true没有图形界面时SUMO会在终端输出一些统计信息比如仿真总时长、车辆平均等待时间等。这些指标在我们后续做交通评价时非常有用。而且命令行模式下仿真速度比GUI快很多因为不需要渲染画面。如果你有多个车流文件要叠加可以在命令行里用--additional-files参数加载但这是后面教程的内容。第一节课你能把一条路、一条车流跑通就算成功了一大半。5. 安装和首次运行中常见的坑我踩过的都帮你排了接下来这部分价值极高因为很多内容不是官方文档会写的而以我的经验新手大概率会在这里卡住。我按出现频率从高到低排一下。5.1 环境变量配置后command找不到这个问题前面已经提到了我再补充一个容易忽略的点如果你用的是新版Windows 10或者Windows 11环境变量有“用户变量”和“系统变量”两种。如果你只在用户变量里加了Path然后你的CMD是在管理员权限下打开的系统有可能优先读取的是系统变量而不是用户变量导致配置看起来没生效。解决办法很直接直接把SUMO的bin路径加到“系统变量”的Path里一劳永逸。另外配置完环境变量后确认自己是在一个全新的CMD窗口里测试。我在全国各地带过不少学员踩这个坑的比例超过一半。5.2 启动sumo-gui报缺少动态库在Windows上有一种很常见的情况是安装完SUMO后双击sumo-gui弹出“找不到libgdal-28.dll”或者类似的动态库缺失错误。这个问题多半是你安装的是精简版、或者杀毒软件把某些DLL文件拦截了。处理思路按优先级排序先检查你的安装路径是不是完整版安装文件是否完整。到SUMO安装目录的bin文件夹下看看那些DLL文件是否真的存在。如果文件存在仍然报错用管理员身份重新运行一次安装包选择“Repair”修复安装。如果这些都不行检查一下系统是否缺少微软的Visual C Redistributable。SUMO依赖VC运行库很多精简版系统没有预装去微软官网下载最新版的VC_redist.x64.exe装一遍大概率能解决。5.3 netedit画的路网无法保存我用netedit的过程中碰到过一次比较诡异的问题保存路网文件时提示“Saving failed”后来发现是因为保存路径中包含中文字符。SUMO底层对Unicode处理不完善路径里带有中文在某些环境下会出问题。这个问题非常隐蔽因为你在Windows图形界面里操作感觉中文路径很正常。我建议从第一天起你的SUMO项目目录就用纯英文命名比如D:\sumo-projects\demo不要出现“交通仿真”“新建文件夹”这样的名字。这个习惯能让你少掉很多莫名其妙的坑。5.4 仿真开始后车辆不动有时候你点了Play但车辆就一直停在起点不往前走。这个问题的核心原因通常是车辆到达边的位置和仿真器的逻辑不一致或者车道设置不允许该类型车辆通行。排查思路先看sumo-gui左下角的日志输出有没有报错信息。如果车辆一直没进入路网检查路网文件中是否定义了allowed属性限制车型。如果车辆停在路段中间不动多半是前方红灯或者路权冲突。你要记住一个原则SUMO里的车辆是严格受交通规则约束的不能简单地“飞过去”遇到这种情况首先考虑路权和车道连接的关系。5.5 仿真速度特别慢如果你的电脑配置不算低但仿真速度始终上不去查看一下sumo-gui底部状态栏中的速度倍数是否设置过低。另外把界面上的“draw”设置降低关闭车辆的3D渲染仿真速度会有明显提升。如果车辆数量很大如上万辆直接用命令行模式跑不要开GUI效率差距是数量级的。6. 装好了、跑通了然后呢给新手的后续进阶路径很多人做到上面那一步后会产生一个模糊的感觉好像会用了又好像什么都不会。这其实非常正常因为SUMO是一座冰山你现在看到的只是水面上的那一小层。结合我自己用了这么多年的经验给你几条下一步的路线参考。第一条路深耕“路网构建”。试着从OpenStreetMap导出你所在城市的真实道路数据然后用netconvert转换成SUMO路网格式。这步一旦打通你就不再是只在玩具路网上玩了而是在真实路网上做仿真。过程中你会学到如何清洗路网数据、如何处理高速公路匝道、如何在路口补画信号灯。这条路线对做城市交通规划研究的人最有价值。第二条路吃透TraCI。TraCI是SUMO的Python实时控制接口用好了你几乎可以控制仿真里的一切对象。举个例子你在TraCI里写一个循环实时读取每个路口的排队长度然后用你的算法动态调整信号灯时长方案。这时SUMO就不再是一个看动画的工具了而是一个可以承载你算法的微型交通实验平台。这个方向是目前车路协同、智能交通研究最常用的路径。第三条路做联合仿真。把SUMO和CARLA、Gazebo这些仿真器连起来让自动驾驶车辆在SUMO生成的高密度交通流里行驶同时感知模块在渲染环境里测试。这条路比较难但做出来效果相当震撼能直接支撑自动驾驶项目的决策规划算法验证。不管走哪条路我的建议是一样的不要追求一次看懂所有文档而是带着具体问题去查、去试。SUMO的官方文档其实写得很全面但内容过于庞杂一次性读下去很容易劝退。最好的方式是先跑通一个最小例子再按照自己的项目需求逐步深入。这篇教程帮你完成了“最小例子”这一步后面的事就是持续和这个工具死磕的过程了。7. 最后分享几个我的使用习惯既然这是系列教程的第一篇我就再讲几点个人经验算是一个小福利。第一建议你为每一个仿真场景建立一个独立文件夹里面固定放net路网、route车流、output输出结果、script脚本四个子目录。SUMO项目一旦复杂起来文件特别多如果没有这个习惯用不了几周你就会陷入“找文件”的泥潭。第二每次跑仿真之前先设置一个固定随机种子。SUMO里用--seed参数控制随机性不管道路怎么设置车辆发车时间、路径选择都会受随机数影响。科研做实验的时候固定种子才能保证你的结果可复现论文里写数据也有据可依。第三多用命令行少依赖GUI。GUI适合展示和调试但真正要批量跑实验的时候命令行加Python脚本才是效率最高的方式。我从第二年开始基本90%的时间都在命令行和Python环境中工作GUI只在需要截图或者调试路网时才打开。第四如果你卡在某一步卡了一个小时先停下来去检查一下你的SUMO版本和网上教程的版本是否一致。SUMO迭代挺快的不同版本的XML格式命令参数有变化老教程里的参数可能在你要用的版本里已经废弃了。版本不一致是很多问题的根源这同样也适用于其他开源工具。SUMO是个值得投入时间的工具它的学习曲线有些陡但只要把这个最简单的闭环跑通后面每走一步你能控制的东西就多一层。下一篇教程里我打算聊一聊如何用TraCI实时控制仿真中的车辆和信号灯这也是做车联网研究最关心的部分。装好环境、跑通第一个仿真的你正好可以准备好代码和我一起在那个场景里动手试试。