2. SUMO环境搭建
说实话,很多初学者在SUMO上栽的第一个跟头,不是代码写不对,而是环境没搭好。我见过太多人花了一整天装软件,最后卡在某个路径问题上。今天我就带你一步步搞定SUMO的安装与配置,顺便聊聊我这些年踩过的坑。
2.1 SUMO的安装——选对版本很重要
SUMO目前有两个主流版本:1.x系列和0.x系列。我个人强烈建议你装1.12.0以上版本。为什么?因为新版本修复了大量bug,而且traci接口更稳定。我在项目中用过0.32版,那个traci的延迟问题让我调了整整两天……后来升到1.8.0,问题迎刃而解。
安装方式分三种,我按推荐程度排个序:
| 安装方式 | 适用系统 | 推荐指数 | 备注 |
|---|---|---|---|
| 官方安装包 | Windows | ⭐⭐⭐⭐⭐ | 最省心,一键安装 |
| 包管理器 | Ubuntu/Mac | ⭐⭐⭐⭐ | 命令行搞定,但版本可能滞后 |
| 源码编译 | 所有系统 | ⭐⭐⭐ | 适合进阶玩家,新手慎入 |
Windows用户看这里:
去SUMO官网下载exe安装包,双击运行。安装路径我建议用C:\SUMO,别带空格和中文。嗯,这里要注意——很多人的问题就出在路径上。我曾经有个学生把SUMO装在了D:\Program Files (x86)\SUMO,结果环境变量死活配不上,折腾了一下午。
Ubuntu用户看这里:
sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc
这三行命令搞定。不过要注意,Ubuntu官方源里的SUMO版本通常比较老。如果你需要最新版,还是建议去官网下二进制包。
2.2 环境变量设置——这一步别偷懒
装完SUMO只是第一步。你得让系统知道SUMO在哪。说白了,就是配置环境变量。
Windows环境变量配置:
- 右键「此电脑」→「属性」→「高级系统设置」
- 点击「环境变量」
- 在「系统变量」中新建:
SUMO_HOME = C:\SUMO(改成你的安装路径) - 在
Path变量中添加:%SUMO_HOME%\bin
配置完记得重启命令行窗口。我习惯用PowerShell验证一下:
echo $env:SUMO_HOME
sumo --version
如果能看到版本号,恭喜你,环境变量配对了。
Linux/Mac环境变量配置:
编辑~/.bashrc或~/.zshrc,添加:
export SUMO_HOME=/usr/share/sumo
export PATH=$PATH:$SUMO_HOME/bin
然后source ~/.bashrc使其生效。
2.3 验证安装成功——用一个小例子说话
环境配好了,怎么知道SUMO能不能用?我教你一个快速验证的方法。
打开命令行,输入:
sumo-gui
如果弹出一个图形界面窗口,说明SUMO GUI能正常启动。如果报错,八成是环境变量没配好,或者缺少依赖库。
再试试这个:
netedit
这个命令会打开路网编辑器。能打开就说明你的SUMO安装完整。
test文件夹,放一个最简单的SUMO配置文件。每次换电脑或重装系统后,先跑一遍这个测试用例,确保环境没问题再开始干活。这招帮我省了不少排查时间。
2.4 常用工具介绍——你的仿真工具箱
SUMO不是只有一个命令行工具。它是一整套工具箱。我挑三个最常用的给你讲讲。
2.4.1 netedit——路网编辑器
这是我最常用的工具之一。说白了,就是画路网的。你可以用它:
- 绘制道路(支持双向车道、交叉口)
- 设置交通信号灯
- 添加检测器(感应线圈、摄像头)
- 导入OpenStreetMap数据
启动命令:netedit
我个人习惯先用OpenStreetMap导出路网,再用netedit微调。这样比从零画路网快得多。
2.4.2 sumo-gui——仿真可视化界面
这个工具用来实时查看仿真过程。你可以:
- 暂停/继续仿真
- 调整仿真速度
- 点击车辆查看详细信息
- 设置断点调试
启动命令:sumo-gui
嗯,这里有个小技巧——按Ctrl+T可以调出参数面板,实时调整车辆跟驰模型参数。我在做参数调优时经常用这个功能,边调边看效果,非常直观。
2.4.3 traci——Python接口
这才是SUMO的灵魂。traci让你用Python控制仿真过程。你可以:
- 实时获取车辆位置、速度
- 动态改变交通信号灯
- 插入/移除车辆
- 收集仿真数据
一个简单的traci示例:
import traci
# 启动SUMO仿真
traci.start(["sumo-gui", "-c", "my_simulation.sumocfg"])
# 获取所有车辆ID
vehicle_ids = traci.vehicle.getIDList()
# 获取第一辆车的速度
if vehicle_ids:
speed = traci.vehicle.getSpeed(vehicle_ids[0])
print(f"车辆 {vehicle_ids[0]} 当前速度: {speed} m/s")
# 关闭连接
traci.close()
这个代码虽然简单,但它是所有traci应用的基础。我在做交通信号灯优化时,就是基于这个框架写的控制逻辑。
- 安装SUMO时注意版本选择,推荐1.12.0以上
- 环境变量配置要仔细,路径不能有空格和中文
- 用sumo-gui和netedit验证安装是否成功
- traci是Python控制SUMO的核心接口,必须掌握
好了,环境搭建这部分就讲到这里。记住,工具只是手段,关键是你能用它解决什么问题。下一节我们会用这些工具搭建第一个交通流场景,到时候你就知道它们有多强大了。