免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

SUMO交通仿真环境搭建:Windows安装与配置完整指南

SUMO交通仿真环境搭建:Windows安装与配置完整指南 第一次打开SUMO官网的时候我盯着满屏的英文文档愣了好一会儿。那是我读研期间第一次接交叉口信号配时优化的仿真任务导师只丢给我一个名字SUMO。我按直觉下载了Windows安装包装完双击sumo-gui界面倒是打开了可命令行里一敲sumo --version就提示“不是内部或外部命令”找遍网上各种教程也没完全对上号折腾到半夜才搞清楚是环境变量和安装目录这两个细节在作怪。SUMO全称Simulation of Urban MObility是德国航空航天中心DLR主导开发的开源微观交通仿真软件如今托管在Eclipse基金会下全称Eclipse SUMO。它能模拟机动车、公交、行人、自行车在路网中的运行也能通过TraCI接口用Python实时控制仿真里的每一辆车。近年来车联网、自动驾驶决策测试、信号优化这类项目里经常能看到它的身影很多强化学习仿真平台也拿它当底层引擎。这个系列我会从环境搭建开始逐步讲到路网构建、交通需求生成、仿真配置、结果分析再到TraCI二次开发。本篇先把Windows 10下的环境彻底搞定。如果你正准备用SUMO做课程设计、毕业论文或者工程预研那么这一篇应该能帮你少走很多弯路。我会把下载安装、环境变量配置、验证环节全部走一遍最后给出我实际踩过的坑和排障思路。1. 装之前先想清楚SUMO能解决什么问题值不值得折腾1.1 SUMO的定位微观交通仿真里的开源主力交通仿真软件粗略分宏观、中观、微观三个层次。宏观仿真是把交通流当成流体看道路容量、拥堵蔓延微观仿真则是一辆车一辆车单独建模每一辆车的跟驰、换道、信号响应都能被控制。SUMO属于微观仿真里的主力开源方案而且它的开源属性带来的不仅是免费更是一整套可扩展的生态。拿做研究来说很多时候你需要批量跑参数扫描。比如研究不同信号配时方案对平均延误的影响可能要连续跑几十组场景。商业软件也能干但要写脚本、接自动化就麻烦得多。SUMO里所有场景都是文本文件路网是.net.xml需求是.rou.xml仿真配置是.sumocfg。把文件路径作为参数传给命令行工具批量跑、自动收集结果、用Python做后处理这套流程非常顺畅。SUMO对路网规模的支持也相当可观。它可以导入OpenStreetMap的OSM数据直接生成城市级路网可以定义信号灯配时方案可以模拟车辆变道、限速、公交站点、行人过街。它还支持多模态交通不只是汽车。更关键的是TraCI接口允许外部程序通过TCP连接控制仿真的每一步。我后面单独写TraCI的时候会展开讲这里只需要记住SUMO是少数能真正做到“灵活控制仿真过程”的开源工具。1.2 和VISSIM、TransModeler的简单对比很多初学者会问既然有VISSIM为什么还要折腾SUMO我的看法是两者定位不同不是单纯的替代关系。这里放一个表格直观对比常用微观仿真软件的核心差异。对比维度SUMOVISSIMTransModeler授权模式开源免费商业授权贵商业授权较贵二次开发接口TraCI、LibTraCI、libsumoCOM接口部分APIPython生态原生traci模块生态完善需通过COM封装有限路网规模城市级、支持大规模适合片区/交叉口精细建模区域级/城市级学习成本中等命令行工具多上手快GUI成熟上手中等适合场景算法验证、批量仿真、车联网研究工程展示、精细动画宏观与微观混合建模如果只是做一个交叉口方案汇报VISSIM的画质和可视化确实更有优势。但如果你是学生或者研究者需要复现实验、修改底层逻辑、跑几百组数据SUMO是绕不开的选择。而且它免费实验室机器随便装不用纠结授权周期。1.3 本系列会覆盖的内容这个系列我计划按下面的路径走本篇Windows 10安装与基础环境配置跑通第一个仿真场景。路网构建从OSM导入真实路网用NetEdit手工修路网理解节点的车道连接关系。交通需求生成用randomTrips.py生成随机车流编辑.rou.xml定义固定线路车流。信号控制与仿真参数配置在.sumocfg里配置仿真时段、输出文件用TLS信号灯控制信号相位。结果分析与可视化用sumo-gui查看车辆轨迹读取输出文件统计延误、排队长度。TraCI二次开发用Python脚本实时控制车辆、动态修改信号配时。这个路径适合从零开始的人每篇尽量控制在能“照着做”的程度。本篇先把地基打牢。2. 下载与安装从选版本到避开安装器的坑2.1 安装前的环境检查先花两分钟检查一下电脑状态能避免后面各种莫名其妙的问题。操作系统Windows 10 64位。SUMO官方Windows安装包只提供64位版本32位系统就不用白费劲了。内存建议8GB以上。简单示例场景4GB也能跑但一旦导入城市级路网或跑大车队内存占用会涨得很快。磁盘空间安装本身只要几百MB但后续项目文件、输出文件会占空间留出5GB余量基本够用。Python版本如果只跑GUI仿真Python可以暂时不装。但只要你想用TraCI写脚本控制仿真我建议提前装好Python版本选3.9到3.11之间比较稳。太新的版本偶尔会遇到某些二进制依赖还没适配的情况。Visual C运行库SUMO的Windows可执行文件依赖微软的VC运行库。如果以前装的软件没有带这个运行库运行sumo.exe时会直接弹“找不到MSVCP140.dll”的错。提前装好官方发布的“Visual C 2015-2022 Redistributable (x64)”最省事。我遇到过几次新手拿到电脑不装运行库结果sumo.exe双击没反应命令行报错也看不懂。所以这一步别跳过。2.2 从哪下载、选哪个版本SUMO的官方下载页面在sumo.dlr.de/docs/Downloads.html页面里会列出最新的正式发布版本。文件下载通常会跳到SourceForge或者官方自己的下载服务器。国内访问官网有时候会比较慢这是网络状况的原因并不是网站故障。我是这么处理的优先直接下载如果速度慢挂机多等一会儿安装包一般几十到一两百MB不算大。官方下载页面提供了SourceForge镜像链接可以换这个入口下载很多时候比官网直连快。如果是实验室或公司有公共安装包直接拷贝一份过来安装也行保证版本一致即可。关于版本选择我给一条明确建议新手装最新的正式release版本就好别去碰每日构建的nightly builds。每日构建可能有新功能但也可能引入不稳定问题没必要给自己的学习过程增加变量。如果你是为了复现某篇论文或某门课程的作业最好找对方注明使用的SUMO版本不同版本的net.xml格式和部分工具参数会有差异装错了版本就算命令一样结果也可能不一样。2.3 安装过程与安装目录规划拿到安装包后右键选择“以管理员身份运行”。这一步容易被忽略但很重要否则安装器可能因为权限不足没有把系统PATH写入成功。安装器是NSIS打包的标准向导一路Next就能装完。但有两处我建议大家不要用默认值第一个是安全软件拦截。SUMO的安装包是NSIS构建的偶尔会被Windows Defender或第三方杀毒软件误报。如果你在安装时看到拦截提示先去确认这个exe是从官网或SourceForge下载的来源可靠的话在安全中心里选择“允许运行”或“添加信任”即可。第二个是关键安装目录不要用默认的C:\Program Files (x86)\Eclipse SUMO。不是说不能装而是这个路径包含空格和括号后续在使用Python脚本、netconvert命令行工具时偶尔会碰到工具脚本没有正确解析带空格路径的情况。我推荐自定义安装到纯英文、无空格的目录比如D:\Software\sumo当然C盘下面也可以只要保证路径里没有空格和中文比如C:\sumo都行。这个习惯能让你在后面写自己的仿真项目时少遇到一堆路径解析问题。安装过程中组件选择保持默认全选尤其是“Examples”、“Tools”、“Docs”这三项一定要保留。Examples自带示例场景是学习阶段最宝贵的参考资料Tools目录下有很多实用Python脚本比如randomTrips.pyDocs里有本地文档和教程离线也能查。安装完成后进入安装目录你会看到几个核心子目录目录作用binsumo.exe、sumo-gui.exe、netconvert.exe、netedit.exe等可执行程序tools官方提供的Python工具脚本比如randomTrips.py、routeSampler.py等docs本地文档和教程PDFexamples官方示例场景包含大量可运行的.sumocfgdata默认车辆类型、公共交通定义等数据文件share辅助资源比如字体、图标等后续教程里我会反复提到某个文件在tools目录下所以先记住这个目录结构。3. 环境变量配置为什么装完了命令行还是找不到sumo3.1 SUMO_HOME和PATH分别管什么很多教程会让你配环境变量但没说清楚为什么要配。这里我说明白。命令行工具比如cmd、PowerShell要执行一个命令时会在当前目录和PATH变量里列出的目录中寻找对应的.exe文件。安装器通常会把bin目录写入PATH所以理论上你装完就能在命令行里敲sumo。但实际中我见过不少机器装完后PATH没有成功写入或者写入了旧版本的路径导致命令找不到。所以必须主动检查一遍。SUMO_HOME则是一个更上层的变量它用来告诉工具脚本“SUMO的根目录在哪”。tools目录下的Python脚本很多都依赖SUMO_HOME来定位data目录和特定资源文件。举个典型场景你运行randomTrips.py生成随机车流时脚本内部需要引用SUMO安装目录下的某些定义文件如果没有SUMO_HOME脚本就会报错找不到文件。打个比方PATH就像系统知道去哪里找门牌号SUMO_HOME是直接登记了一个地标。这两个变量各管一摊都需要配置。3.2 图形界面配置完整步骤按下面的步骤操作不要跳步。按WinR组合键输入sysdm.cpl回车打开系统属性。切换到“高级”选项卡点击底部的“环境变量”。在“系统变量”区域点击“新建”变量名填SUMO_HOME变量值填你的实际安装目录比如D:\Software\sumo。注意这里不要带bin目录是安装目录的根路径。在“系统变量”区域找到Path选中后点击“编辑”。在弹出的编辑界面点击“新建”输入%SUMO_HOME%\bin。这个写法是引用SUMO_HOME变量以后如果换了安装目录只需要改SUMO_HOME一个地方。一路点“确定”关掉所有属性窗口。有两个细节特别提醒一下。第一个不要手动在Path那一长串文本后面加分号再追加路径那样很容易把原有的Path条目搞坏一定要用编辑界面的“新建”按钮。第二个建议在“系统变量”里设置而不是“用户变量”。因为有些工具是以管理员权限运行的如果变量只配在用户级那些进程可能读不到。如果习惯用命令行配置也可以打开管理员PowerShell执行setx SUMO_HOME D:\Software\sumo /M但setx命令对整个PATH变量的处理有截断风险新手我不建议用它来改Path。老老实实用图形界面最安全。3.3 命令行验证三板斧配置完环境变量关键是验证。注意必须新开一个命令行窗口因为环境变量只会在进程启动时读取一次已经打开的窗口不会自动更新。在cmd或PowerShell里依次执行三个命令echo %SUMO_HOME%正常会输出你的安装目录比如D:\Software\sumo。sumo --version正常会输出类似SUMO Version 1.20.0, build release之类的信息。where sumo正常会输出sumo.exe的完整路径。这个命令能告诉你系统实际会执行哪个目录下的sumo如果电脑里装过多个版本这个命令就特别有用。如果第一条命令输出为空说明SUMO_HOME没设置成功或者窗口没重开。如果第二条命令报“不是内部或外部命令”说明Path里没有%SUMO_HOME%\bin或者bin目录下没有sumo.exe。如果where sumo输出的路径和你预期的安装目录不一致说明Path中还有其他版本的bin路径排在前面。到这里命令行环境就算通了。接下来做两个更接近实际使用的验证。4. 跑通第一个仿真场景官方示例和自建极简路网双重验证4.1 先用官方示例验证GUI环境变量配好之后先别急着写自己的场景用官方自带示例跑一次确认sumo-gui图形界面能正常工作。打开命令行进入安装目录下的examples目录。不同版本目录结构略有差异你只需要找到一个包含.sumocfg文件的文件夹就行。按照官方的命名习惯examples文件夹下有大量示例其中比较适合起步的是那些名字里带hello或者包含简单城市路网的小场景。假设你找到某个示例包含hello.sumocfg文件在命令行执行sumo-gui hello.sumocfg或者直接在文件管理器里右键该.sumocfg文件选择打开方式手动指向sumo-gui.exe也可以。sumo-gui启动后是一个深色界面的窗口。界面上方工具栏有一个播放按钮点一下仿真就开始运行了。你可以看到一辆辆小车在路网上移动速度滑块可以控制仿真的快慢。如果一切正常说明GUI和环境变量都通了。这里有一个小提示在Windows上如果双击.sumocfg文件没有反应不要纠结于文件关联直接用命令行最可靠。教程里后续所有例子我都会用命令行方式启动。4.2 自建一个最简单路网验证完整工具链官方示例能跑通说明GUI没问题但还不能证明你的netconvert等命令行工具以及路径配置全部正常。我建议再花十分钟自建一个最简路网把这个验证做完整。在某个工作目录下新建文件夹比如D:\sumo_demo然后新建四个文件。第一个是nodes.nod.xml定义两个路网节点nodes node idA x0.0 y0.0 typepriority/ node idB x500.0 y0.0 typepriority/ /nodes第二个是edges.edg.xml定义连接两个节点的道路edges edge idAB fromA toB numLanes2 speed13.9/ /edges然后在命令行执行netconvert把这两个文件转换成SUMO的路网文件netconvert --node-filesnodes.nod.xml --edge-filesedges.edg.xml --output-filenetwork.net.xml如果netconvert命令找不到说明Path没配置好如果报XML格式错误多半是标签写错了。这里顺带解释一下上面的参数speed13.9按米每秒算约等于50公里/小时的限速numLanes2表示双向各一条车道。实际生成的网络里面SUMO会自动补上反向车道你不用手工定义。接着创建routes.rou.xml定义车辆类型和行驶路线routes vType idcar maxSpeed13.9/ route idroute1 edgesAB/ vehicle idv1 typecar routeroute1 depart0/ /routes最后创建config.sumocfg这个文件是SUMO的仿真入口告诉仿真器读取哪个路网和哪份车流文件、仿真时间范围是多少configuration input net-file valuenetwork.net.xml/ route-files valueroutes.rou.xml/ /input time begin value0/ end value50/ /time /configuration在命令行执行sumo-gui config.sumocfg点播放按钮你会看到一辆车从A节点沿着道路开到B节点然后离开路网。仿真结束后界面显示没有车辆了。这就是一个完整的最小闭环用netconvert生成路网手写车辆需求用sumo-gui启动仿真。做完这个实验你的安装环境才算是真正验证完毕。因为从命令行工具到GUI再到配置文件解析整条链路都走通了。4.3 Python接口验证Traci能否正常连接接下来验证Python接口也就是Traci。这一步不是必须的但只要你想在SUMO里做算法控制、批量实验、动态信号配时早晚会用到。提前验证能尽早暴露问题。用pip安装官方Python绑定包pip install eclipse-sumo这个包会提供traci、sumolib等模块。注意它只提供Python绑定不包含sumo-gui、netconvert这些可执行程序那些还是要靠前面安装的官方Windows包。然后在刚才的sumo_demo目录下新建一个test_traci.pyimport traci traci.start([sumo, -c, config.sumocfg]) while traci.simulation.getMinExpectedNumber() 0: traci.simulationStep() traci.close() print(simulation finished)这段脚本的意思是用TraCI启动SUMO然后不断往前推进仿真步直到所有车辆都离开路网。执行python test_traci.py如果一切正常会输出simulation finished。这里有个细节值得注意traci.start的列表第一个元素是sumo这时候走的是命令行版本的仿真器没有GUI窗口速度更快。如果你想在脚本跑的同时看到车辆移动画面可以把sumo改成sumo-gui。但要注意TraCI连接和GUI窗口同时打开时GUI会显示一个连接状态这是正常的。如果import traci时报错说明eclipse-sumo没装成功或者当前Python环境不对。如果启动时报找不到sumo说明Path还没有生效或者当前命令行窗口是旧的重开一个。到这一步你的Windows 10系统上已经具备完整的SUMO仿真环境命令行工具、GUI、netconvert网络转换工具、Python控制接口全部验证通过。接下来就可以开始真正做交通仿真实验了。5. 新手最容易踩的五个环境坑与排障记录5.1 安装包被拦截或者双击没反应这是我在新手群里被问得最多的一个问题。下载的exe安装包双击后毫无反应或者安全中心弹出风险提示。先说原因SUMO的Windows安装器使用NSIS打包这类安装器的行为和某些恶意软件的安装包有相似特征容易触发杀毒软件的启发式检测属于误报。解决办法是确认下载来源。只要是从sumo.dlr.de官网或SourceForge下载的就可以放心。在Windows安全中心里点开“保护历史记录”找到对应的拦截项选择“允许”或者“操作”把那个安装包放行。装完后再恢复原来的防护策略就行。另外有人会遇到解压式的安装版本就是官方发布的zip压缩包。那个更简单直接解压就能用不过需要手动配置环境变量。我推荐用exe安装器因为它会把组件和文件关联一起处理省去很多手工步骤。5.2 命令行找不到sumo命令典型报错是sumo 不是内部或外部命令也不是可运行的程序或批处理文件。这是PATH没有生效。按这个顺序排查命令行窗口是不是安装环境变量之前打开的是的话关掉重新开一个。打开“环境变量”设置确认Path里有没有%SUMO_HOME%\bin注意是bin目录不是安装根目录。确认SUMO_HOME变量的值指向的目录里真的有bin文件夹。有次我发现用户把SUMO_HOME指到了C:\Program Files (x86)\Eclipse SUMO\bin导致后续所有脚本都报错。在命令行里执行echo %SUMO_HOME%确认变量本身没有拼写错误。有一个技巧用where sumo命令。这个命令会列出所有能被系统找到的sumo.exe的完整路径。如果它返回了某个路径你就能明确知道系统执行的是哪一个。同时配置了多个版本时where命令的输出顺序就是系统的查找顺序排在前面的优先执行。还有一种情况是用户自定义安装到中文路径比如D:\仿真\sumo。虽然Windows很多命令支持中文路径但某些Python脚本在处理中文字符串时会因为编码问题出岔子。这个事我遇到过不止一次所以再次强调安装路径和项目路径都用英文别给自己挖坑。5.3 缺少MSVCP140.dll或者VCRUNTIME140.dll直接现象是运行sumo.exe、netconvert.exe时报错提示找不到dll文件。原因很明确电脑缺少Visual C运行库。解决办法是去微软官网搜索“Visual C 2015-2022 Redistributable”下载x64版本安装。这个运行库不是SUMO特有的很多Windows软件都依赖它装一次能解决很多软件打不开的问题。顺带说一句如果你的Windows 10系统本身比较精简有些精简系统自带的VC运行库不完整这种情况下强烈建议装完运行库再安装SUMO。5.4 Python版本和SUMO版本对不上另一种常见问题是traci模块能import但调用某个API时报AttributeError或者连接仿真器时报协议不匹配错误。这多半是Python绑定包和SUMO主程序版本不一致导致的。TraCI有自己的协议版本SUMO 1.18时代的traci和SUMO 1.20时代的traci在接口细节上有差异。如果你用pip install eclipse-sumo装的是最新绑定而电脑上的SUMO主程序是很老的版本两者可能无法对话。我的建议是装完之后确认版本统一sumo --version pip show eclipse-sumo如果版本差距很大就升级或降级其中一个。另外Python解释器版本也尽量别太激进3.13刚出来时不少第三方库的wheel还不完善我目前用3.10和3.11都很稳定。5.5 电脑里同时存在多个SUMO版本很多人在做课程作业时电脑里会有两个版本一个是通过exe安装的正式版一个是下载zip包解压出来的旧版。这时候最容易出现诡异问题命令行里sumo --version显示版本A但sumo-gui打开的场景却是版本B的风格用python脚本连TraCI时又对应不上。排查方法还是用where sumo命令加上where sumo-gui、where netconvert分别确认每个工具实际指向的路径。正常情况它们应该都在同一个bin目录下。如果确认有多个版本并存不建议急着卸载旧版只需要把不用的那个bin路径从PATH里移除即可。你是为了复现某个老项目才保留旧版的话建议把旧版放到单独的目录并且用写绝对路径的方式直接调用而不是依赖PATH里的顺序。我一开始用SUMO时总喜欢把所有版本都留着后来发现带来的麻烦比收益大得多。现在凡是新机器我只装一个当前项目需要的版本干净利落。装好环境其实只是第一步。我见过很多同学卡在安装上好不容易跑通了示例就急着导入超大城市的OSM路网结果各种报错最后以为是自己电脑不行。实际上SUMO的学习路径非常适合“小场景快步走”先从两个节点一条路开始搞懂文件结构再逐步加入信号灯、多车道、多车型、公交线路最后再碰真实路网。你把这个最小闭环打通了后面的内容会顺畅很多。下一篇我会讲怎么用NetEdit工具手工搭建路网以及如何把你所在城市的真实道路数据导入SUMO。
返回列表