FAQ

通用问题#

什么是 SUMO?#

SUMO 是一个交通仿真软件包。它旨在用于模拟城市规模的网络,当然,如果您的计算机算力足够强大,也可以用于模拟更小或更大的网络。

"SUMO" 是什么意思?#

"SUMO" 是 "Simulation of Urban MObility"(城市交通仿真)的首字母缩写。

SUMO 属于哪种类型的交通仿真?#

SUMO 主要是一个微观的、空间连续的道路交通仿真。它支持多模式和跨模式的地面交通。SUMO 使用车辆跟驰、换道和交叉口行为模型来模拟个体车辆及其相互作用。它还使用行人模型来模拟人员的移动及其与车辆的相互作用。

为了高效模拟非常大的场景,SUMO 也可以作为介观仿真运行。

SUMO 还支持使用 marouter 应用程序进行宏观交通分配。

阅读文档和查找特定主题的最佳方式是什么?#

概览各个主题的主页面是大纲 SUMO 用户文档。如果您在那里找不到感兴趣的主题,请使用网站搜索。或者,使用通用搜索引擎,因为这也会包含邮件列表存档。

有教程或即用型场景吗?#

教程的主页面列出了多个面向初学者和高级主题的教程,YouTube 上也有一些视频。关于场景,请查看我们的场景页面

我如何为 SUMO 做贡献?#

代码贡献如何运作?#

我们需要确保您对代码拥有必要的权利,并且您同意您的贡献被置于 Eclipse Public License v2 之下。最简单的方法是:

  • 创建一个 GitHub 账户。
  • 配置您计算机上的 git 客户端,使用您注册账户时使用的电子邮件地址:
git config --global user.email "email@example.com"
  • 如果您还没有,请创建一个 Eclipse 账户。确保使用与 GitHub 相同的电子邮件地址。
  • 填写一个简单的在线表格,称为 Eclipse 贡献者协议 (ECA,这是强制性的)。
  • Fork GitHub 上的 sumo 仓库。
  • 将 fork 的仓库克隆到您的计算机上。
git clone https://github.com/yourgithubid/sumo.git
  • 在创建的 sumo 克隆目录中修改文件。
  • 在此目录中,使用以下命令提交您的更改:
git add src
git commit -m "your change message" -s

Caution

必须使用选项 -s,以便贡献可以按照 Eclipse 规则被接受。

  • 使用以下命令将您的更改推送到 GitHub 上的 fork:
git push

我如何为文档做贡献?#

文档是代码仓库的一部分,因此适用与上一个问题相同的规则。如果您只想修复一个简单的拼写错误,可以随时给我们发邮件到 sumo@dlr.desumo-dev@eclipse.org

我如何引用 SUMO?#

引用 "Microscopic Traffic Simulation using SUMO";Pablo Alvarez Lopez, Michael Behrisch, Laura Bieker-Walz, Jakob Erdmann, Yun-Pang Flötteröd, Robert Hilbrich, Leonhard Lücken, Johannes Rummel, Peter Wagner, and Evamarie Wießner. IEEE Intelligent Transportation Systems Conference (ITSC), 2018.

我如何取消订阅邮件列表?#

访问 https://www.eclipse.org/mailman/listinfo/sumo-user。在页面底部,您会找到一个表单,允许您输入您的电子邮件地址以从列表中取消订阅。

通用问题解决#

应用程序崩溃了。我该怎么办?#

SUMO 套件中的应用程序在内存不足时可能会崩溃。监控您的应用程序的内存使用情况,以检查这是否可能是您的问题。32 位应用程序可能只能使用 2GB 的 RAM。请使用 64 位版本并确保您的机器有足够的内存来处理较大的文件。如果这不能解决崩溃问题,请按照下面的说明将其作为错误报告如下所述

为什么 SUMO 的行为与文档不符?#

本文档指的是最新的开发版本。这通常与最新版本非常接近(差异在变更日志中明确列出)。如果您使用的是旧版本的 SUMO,则需要参考该版本附带的文档。请注意,我们不会将错误修复向后移植到旧版本的 SUMO。如果可能,您应该始终使用最新版本的 SUMO。

有错误消息,但我不知道我做错了什么#

在您的输入文件上激活 XML-验证。如果这不能解决您的问题,请随时在邮件列表上提问,但记住复制/截图错误消息本身并将其附加到您的问题中。附加(压缩的!)用于重现错误消息的输入文件也是一个好主意(参见上面的问题)。发送 sumo-gui 的屏幕截图时,请包含整个屏幕,以便可以看到应用程序版本和仿真时间。

如何报告 SUMO 应用程序的错误行为?#

如果您怀疑某个应用程序存在错误,您应该收集以下信息:

  • 您使用的 SUMO 版本和操作系统的描述。
  • 显示意外行为的屏幕截图或错误输出(这可能让我们一眼就能诊断问题)。发送 sumo-gui 的屏幕截图时,请包含整个屏幕,以便可以看到应用程序版本和仿真时间。
  • 用于重现错误的完整输入文件(即 .sumocfg 及其中引用的所有文件),放在一个 zip 压缩包中。
  • 如果您的用例涉及 TraCI,请将您的脚本精简到显示问题所需的最低限度。然后,要么包含脚本本身,要么生成所有 TraCI 命令的日志并包含此日志。
  • 请删除不必要的输入(例如,只用 2 辆车而不是 2000 辆),并尝试找到仍然显示问题的最小输入示例。这包括使用 neteditosmconvert 来裁剪网络(或输入)。
  • 描述问题发生的时间步长(对于仿真)以及发生在哪条边/哪个交叉口。

通过在 GitHub 上打开一个新问题并附加文件,或者将文件发送到邮件列表来提供这些项目。

Note

如果您使用的是旧版本的 SUMO,请同时报告问题是否出现在最新版本中。

Note

如果您的附件因大小(最大 100Kb)被邮件列表拒绝,请将它们上传到文件托管服务并发送链接。或者,直接发送它们,而不是通过列表。

SUMO 没有做我想做的事,我不知道如何解决这个问题#

参见上文,但在邮件列表上提问时提供足够的细节。

我应该怎么做才能在邮件列表或问题跟踪器上获得有用的答案?#

  • 使您的问题具体化
    • 避免使用模糊的术语。
    • 始终说明您的问题适用的 SUMO 版本。
    • 在您的问题中包含相关的警告/错误/堆栈跟踪。
  • 只要可能,复制文本而不是文本的截图。
  • 发送 sumo-gui 或 netedit 的屏幕截图时,请包含整个屏幕,以便可以看到应用程序版本和仿真时间。
  • 将场景文件(包括 .sumocfg)作为 zip 压缩包附加。
    • 确保您的场景不是随机的(避免使用选项 --random)。
    • 如果您的设置涉及 TraCI 并且您的(Python)运行程序有点复杂或有进一步的依赖关系,请附加一个 TraCI-traceFile 而不是您的整个 TraCI 脚本。
  • 描述您试图完成什么。
  • 描述您看到的情况与您的期望有何不同。
  • 使用熟悉的术语表达您的问题(并非每个人都是您所在领域的专家)。
  • 不要在单个帖子/问题中询问太多事情。
  • 在发布问题之前自己做一些研究(否则您可能显得懒惰)。
    • 阅读 FAQ。
    • 阅读文档。
    • 查看教程
    • 进行网络搜索(邮件列表中的过去问题和答案可以通过谷歌找到)。
    • 描述您使用了哪些文档,特别是当您的经验与文档不符时
  • 不要在短时间内重复问同样的问题。如果您很着急并且得不到答案,请尝试根据上述建议更改您的问题。
  • 如果您将问题放入一个问题中并且该问题已关闭,请将您的后续问题放入已关闭的问题中,而不是打开一个新问题。
  • 保持礼貌。
  • 好的问题示例:
    • 如何从 SUMO 中获取数据 X
    • 如何影响仿真的 Y 方面?
    • 我的仿真因错误 "<ERROR MESSAGE GOES HERE>" 而中止。这是什么意思?
    • 我的仿真做了 Z,但我期望它做 X。我该如何修复?

我在邮件列表上问了一个问题,但 X 天内没有得到答案。为什么?#

社区支持是在尽力而为的基础上提供的。问题主要由开发人员在项目间隙找到时间时回答。因此,响应时间可能在几小时到几周之间变化(尤其是在假期期间)。有时,当邮件列表上有大量问题时,您的问题可能已经丢失。如果您在一周内没有得到答案,请随时重新发布您的问题。响应时间也因问题的难度而异(因为回答问题的人需要找到更大的时间片来解决这个问题)。此外,在表达问题时请遵循上述建议,以增加快速获得答案的机会。

我想用 SUMO 做一个项目,您能帮助我实现吗?#

不幸的是,我们没有资源免费为他人做项目。 请通过 sumo@dlr.de 联系我们进行付费咨询。 我们尝试帮助解决错误并提供指向相关文档的指针,但这种免费支持仅限于我们在业余时间能做的事情。

TraCI#

我的 TraCI 程序太慢了。我能做什么?#

TraCI 通过套接字通信,这种通信很慢。您通常可以通过以下策略减少 TraCI 命令的数量。

- 存储不更改的结果(例如车辆长度),而不是重复检索它们。 - 使用订阅上下文订阅来减少对每个步骤都需要的内容的 'get' 命令数量。

通过切换到 libsumo 可以获得更大的收益。这可以通过一行代码完成,并完全消除了缓慢的套接字通信。

我的 TraCI 程序没有按预期工作。您能帮助我调试它吗?#

不幸的是,我们没有资源来调试其他人的代码。如果您怀疑 TraCI 本身存在错误,则适用错误报告的通用规则。请随时将您的代码发布到邮件列表,因为那里可能有其他程序员可以提供帮助。请注意,想要重现您问题的人需要您所有的输入文件。

我的 TraCI 程序没有按预期工作。我该如何调试它?#

使用 TraCI 时,有两个进程可能引发错误:SUMO 和正在运行的 TraCI 脚本。以下是一些用于查明情况的准则:

  • SUMO 错误 connection reset by peer 表示脚本存在问题。Python 堆栈跟踪应指向问题(在最简单的情况下,脚本在未调用 traci.close() 的情况下结束)。
  • 错误 TraCIFatalError connection closed by SUMO 表示 SUMO 存在问题。
  • 错误 TraCIException 表示脚本存在小问题。(例如,请求的车辆不存在)。这种类型的错误可以由脚本通过 try/except 安全地处理。
  • 运行 sumo 时使用选项 --log <FILE> 是一个好主意,以便查明仿真运行中出了什么问题或仿真为何中止。
  • 如果 SUMO 崩溃(只是停止而不是退出并显示错误消息),您可以在执行脚本时在调试器中运行 sumo 并将堆栈跟踪发送给开发人员。

错误: tcpip::Storage::readIsSafe: want to read 8 bytes from Storage, but only 4 remaining#

TraCI 协议在 1.0.0 版本中发生了变化。请确保 TraCI 客户端版本和 SUMO 版本匹配。当使用 SUMO 版本 1.0.0 或更高版本时,您不能使用 traci 版本 17 或更低版本(通过调用 traci.getVersion() 检查)。

Libsumo#

ImportError: DLL load failed while importing _libsumo: The specified module could not be found.#

可能缺少某个库。尝试使用 https://github.com/lucasg/Dependencies 来分析 _libsumo.pyd 并找出是哪个库。

功能#

SUMO 是否支持交叉口内的交通?#

是的,SUMO 自版本 0.9.5 起支持交叉口内部交通。

是否可以将 SUMO 连接到外部应用程序(例如 ns-2)?#

有几种方法可以做到这一点,请参见 TraCITopics/V2X

SUMO 可以模拟左侧通行交通吗?#

是的。自版本 0.24.0 起支持。要为左侧通行创建新网络,必须设置选项 --lefthand

要将现有网络转换为左侧通行,有两种选择。抽象网络(无地理参考,坐标不重要)可以使用 netconvert 处理:

    netconvert -s righthand.net.xml --flip-y-axis -o lefthand.net.xml

要转换现有网络并保留坐标,必须首先将网络分解为节点和边,然后重新组装:

    netconvert -s righthand.net.xml --plain-output-prefix righthand
    netconvert -e righthand.edg.xml -n righthand.nod.xml --lefthand -o lefthand.net.xml

SUMO 可以生成移动轨迹吗?#

是的。这可以通过使用 traceExporter 工具将 SUMO 输出转换为适当的格式来完成。另请参见 Topics/V2X

SUMO 可以模拟异构交通 / 无车道交通吗?#

是的(自版本 0.27.0 起)。通过设置选项 --lateral-resolution <FLOAT> 来激活子车道模型

SUMO 可以模拟倒车吗?#

不行。虽然可以使用 TraCI 让车辆向后移动,但其他车辆不会对此做出合理的反应。

SUMO 可以模拟穿过对向车道吗?#

是的。(自版本 0.27.0 起)。通过使用包含附加信息的网络来激活对向行驶功能

SUMO 可以并行运行(在多个核心或计算机上)?#

仿真本身在单个核心上运行。但是,sumoduarouter 中的路由可以通过设置选项 --device.rerouting.threads <INT>--routing-threads <INT> 来并行化。使用这些选项时,会使用机器上的多个核心。

不支持多节点并行化。

运行 sumo-gui 时,会使用一个额外的线程进行可视化。

Python TraCI 库允许从单个脚本控制多个仿真,可以通过调用 traci.connect 并存储返回的连接对象,或者通过调用 traci.start(label=...) 并使用 traci.getConnection(label) 检索连接对象来实现。

使核心(微观)仿真并行运行的工作正在进行中(Issue #4767)。当设置选项 --threads 时,仿真的某些部分已经可以并行运行,但这目前还不能带来有意义的加速。

构建 / 安装#

如何访问代码仓库?#

SUMO 使用 git 进行版本控制,并且在 GitHub 上可用。不再支持 Subversion。所有平台都有大量的 git 客户端。如果您使用命令行客户端,可以使用以下命令签出 sumo:

git clone --recursive https://github.com/eclipse-sumo/sumo

如果您想在 git 签出中查看完整的项目历史记录,请切换到创建的目录并调用

git fetch origin refs/replace/*:refs/replace/*

对于以后的更新,进入创建的 sumo 目录,只需键入 git pull

有关于 Git 的进一步文档吗?#

Git 书籍GitHub 帮助 也值得一读。

如何获取旧版本的 SUMO?#

参见替代下载和旧版本。在 Linux 上,旧版本必须从源代码构建

如何签出修订版 5499(或任何其他过时的 sumo)?#

您可以使用以下命令为 subversion 修订版找到正确的 git 哈希: 在您的(git)bash 中键入 git log | grep trunk@5499 -B 10。如果您使用图形界面,请查阅客户端的文档。请注意,我们只能为旧版本提供非常有限的支持。

支持哪些平台?#

我们定期在 Windows 10 上使用 Visual Studio 2019 进行编译,并在 Linux 上进行每日构建。SUMO 也可以通过 Homebrew 安装在 macOS 上(或从源代码构建)。

我应该使用哪个 Python 版本和包管理器?#

任何仍在接收更新的 Python 版本 都可以。如果您有选择,请使用最新版本之前的版本。请尝试安装原生 Python 并仅使用 pip 或您系统的包管理器(例如 apt)。不要使用 Anaconda 或其任何衍生产品!它往往会破坏库搜索路径,因此像 sumo 这样的二进制文件将无法工作(并且自行编译也无法修复)。

我可以同时运行多个版本的 SUMO 吗?#

不同版本的 SUMO 通常不会相互干扰。在设置环境变量(如 SUMO_HOMEPATH)时,必须注意引用所需的目录。在 Linux 上,包管理器通常只提供单个版本。所有其他版本必须从源代码构建

sumo-gui 和 netedit 中的字母和单词显示为方块#

确保您的计算机支持 3D 加速,并且图形驱动程序已正确安装和配置。通过 RDP 或类似远程桌面协议访问的机器可能无法正常工作。

构建过程在 src/netedit/templates.h 处因错误中止#

确保环境变量 SUMO_HOME 指向最新版本的基文件夹,而不是某个旧版本的 SUMO。 参见 https://github.com/eclipse-sumo/sumo/issues/16115

故障排除#

参见 Installing/Linux Build, Installing/macOS BuildInstalling/Windows Build

卸载#

在大多数情况下,您可以直接删除 sumo 文件夹。如果您在 Linux 上通过包管理器安装了 sumo,也请通过包管理器卸载它。

基本用法#

使用/表示什么度量单位?#

所有时间值以秒为单位。所有长度值以米为单位。这意味着速度应以 m/s 等单位给出。目前,默认仿真时间步长为一秒(准确地说:在每个仿真步长中模拟一秒钟的实时)。

以下错误是什么意思?#

Warning: No types defined, using defaults... Error: An exception occurred! Type:RuntimeException, Message:The primary document entity could not be opened. Id=<PATH> Error: (At line/column 1/0). Error: Quitting (conversion failed). 答案:这仅仅表示您尝试使用的文件 (<PATH>) 不存在。这是 xerces 表达“文件未找到”的方式。

如何解决文件未找到/命令未找到错误?#

要运行命令行程序,您的操作系统必须能够找到它们。 如果您使用的是 Windows,请查阅 Basics/Basic Computer Skills#running_programs_from_the_command_line 如果您使用的是 Linux,请运行 export PATH=$PATH:/path/to/sumo/bin (将 /path/to/sumo/bin 替换为您的 sumo 安装的 bin 目录的路径)

如何解决 Windows 上缺少 dll 的错误?#

安装 MSVC Redistributable (旧版本的 SUMO 也可能需要旧的 MSVC Redistributables)

不同的退出代码(linux 命令行)是什么意思?#

0 表示成功,1 表示已识别的错误,任何大于 1 的值表示无序终止(崩溃)。如果您看到 0 或 1 以外的退出代码,请告诉我们

schema resolution 警告 / xsd 错误是什么意思?#

自版本 0.20.0 起,sumo 对带有模式信息的输入文件执行 XML-验证。这有助于在手动准备 XML 输入文件时检测常见错误。由 sumo 应用程序(如 duarouter)生成的文件总是添加模式信息。检查所需的模式文件将从本地 sumo 安装中检索,前提是环境变量 SUMO_HOME 已设置。否则,文件将从 sumo.dlr.de 检索,这会更慢。可以通过使用选项 --xml-validation never删除 XML 输入文件顶部的模式信息来禁用验证。

是什么导致 ''Error: unable to resolve host/address 'sumo.dlr.de' ''?#

这与 XML-验证 有关(见上文)。当环境变量 SUMO_HOME 未设置时,应用程序将尝试在线检索 xsd 模式文件。如果没有互联网连接,就会出现上述错误。解决方案是:

  • 禁用验证,或
  • 声明 SUMO_HOME,或
  • 确保互联网连接。

为什么我的输入 XML 文件无法读取,即使它们看起来没问题?#

像这样的错误:

Error: attribute name expected at
At line/column 10/46

可能是由 XML 文件中的非打印字符引起的。在文档编辑器中打开您的 XML 文件,并激活显示换行符和其他非打印字符的选项以找到它们。

为什么我收到关于缺少文件/文件未找到的错误,即使文件存在?#

1.0.0 之前的 SUMO 版本使用空格字符分隔文件路径。这意味着它将无法加载路径为 C:\Program Files\foo.xml 的文件,即使添加了引号。自 1.0.0 起,使用 ','(逗号),因此这些路径应该可以工作。此外,如果名称包含基本 ASCII 集 之外的字符,SUMO 可能无法加载文件。

Windows 10 阻止执行 sumo-gui 和 netedit。为什么会这样?#

从互联网下载的可执行文件可能会触发 Windows 10 安全警告。您可以通过单击“更多信息”文本,然后在后续对话框中选择“仍然运行”来解决此问题。

关于警告: pj_obj_create: Cannot find proj.db 怎么办?#

此警告涉及 proj 库 的命名投影 (EPSG 代码) 和网格偏移数据库。除非执行复杂的坐标转换(例如使用 netconvert)或尝试导入不寻常的网络文件,否则可以安全地忽略此警告。否则,设置 PROJ_DATA 环境变量应该会有所帮助。

netconvert#

我对 .net.xml 文件做了更改,但效果不如预期。为什么?#

作为一般规则,您永远不应直接修改 .net.xml 文件,也不要尝试通过自定义流程生成一个。网络元素之间存在许多微妙的相互依赖关系,手动修改很难正确。即使您的 .net.xml 可以被 sumo 加载,它也可能以不太明显的方式失败:

  • 权益规则的工作方式与预期不同(.net.xml 文件的这一部分特别复杂)。
  • 当以后使用 netedit 编辑时丢失属性。
  • 无法与更新版本的 sumo 一起工作。

如果您需要修改网络,有几种可能性:

  1. 使用 netedit 编辑网络。
  2. 修改原始输入文件,然后使用 netconvert 重新构建网络。
  3. 使用 netconvert 修补网络。您可以加载一个 .net.xml 文件小的 XML 文件 一起修补单个边、节点和连接。附加的可能性在这里描述。有关更改交通灯计划或时间安排,请参见Simulation/Traffic_Lights。如果您无法弄清楚如何实现所需的更改,请联系我们!
  4. 使用 netconvert 选项 --plain-output-prefix 将网络转换为其纯 XML 表示。然后修改这些文件并重新构建网络。

如果您需要从自定义输入数据构建网络,建议使用自定义流程生成纯 XML 文件(节点、边、连接),然后使用 netconvert 从这些文件构建您的网络。这些输入文件允许对几何和结构网络属性进行许多自定义。如果您无法让它们表示您需要的网络,请在邮件列表上寻求帮助。或者,您也可以向 netconvert 添加另一个导入模块(如果可能,我们很乐意集成)。

Caution

相反,直接生成网络对于多个项目来说都是死胡同。您已被警告。

我的网络看起来很丑,所有交叉口的形状都是错误的。为什么会这样?#

在版本 0.23.0 及以下,如果您导入带有左侧通行的网络,就会发生这种情况。参见 #Can_SUMO_simulate_lefthand_traffic?

我的网络中的一些交叉口看起来很丑。我能做什么?#

参见连接交叉口。如果这没有帮助,请检查无效的边几何形状。交叉口前的急转弯(即使该路段只有几厘米长)可能会搞乱形状计算。阅读 netconvert 关于锐角的警告,并考虑使用 netconvert 选项 --geometry.min-radius.fix。如果这仍然没有帮助,您可以手动使用 shape 属性 指定交叉口的形状。

我可以导入奥斯纳布吕克的免费网络 "Frida" 吗?#

可以也不可以。您可以使用 netconvert 导入它,描述可在 Networks/Import/ArcView 找到。这可能是一个很好的 GIS 网络,但缺少一些用于仿真的必要信息(参见上面链接中的讨论)。

还有其他可用的免费网络吗?#

参见 Networks/Import/OpenStreetMap

应用程序在一段时间后挂起(内存消耗少,大部分是系统时间)(Windows)#

您可能正在运行以调试模式编译的程序。这会导致至少三倍于正常内存的使用,您的系统可能无法解决。尝试使用正常版本,在发布模式下构建(或购买更多 RAM :-))。

许多错误形式为 Edge's 'x' from- and to-node are at the same position#

您可能正在尝试导入带有地理坐标的网络,但未指定地理投影。添加选项 --proj.utm

许多错误形式为 Error: Type 'x' used by edge 'y' was not defined#

您可能正在尝试重新导入已写入纯 XML 数据的 OSM 网络。添加 --ignore-errors.edge-type 或提供一个类型文件。

错误: SUMO was compiled without GDAL support#

默认的 Windows 版本目前因 EPL2 许可问题而不提供 GDAL 支持。如果您需要导入 shapefile,请使用 Linux 版本或下载nightly-extra 版本

netedit#

如何编辑车道属性?#

参见检查车道

如何编辑连接属性?#

参见检查连接

Note

连接模式仅用于添加和删除连接,而不用于编辑连接属性。

交通需求生成#

如何生成随机路径?#

首先,您应该知道随机路径可能非常不切实际。 如果您仍然希望使用它们,请使用脚本 <SUMO_HOME>/tools/trip/randomTrips.py 生成随机行程,如这里所述。

您也可以不带选项调用脚本以获取额外帮助。有关将行程转换为路径的更多信息,请参见需求/最短或最优路径路由#用法示例

如何在网络中保持恒定数量的车辆?#

有两种不同的方法可以实现这一点。在任何一种情况下,都应使用选项 --begin--end 来约束仿真本身。

  • 您可以生成绕网络运行的长行程,带有许多绕行。这可以通过使用 randomTrips.py 并设置以下选项来完成。如果网络包含断开的部分,并非所有随机行程都可行。在这种情况下,只需生成更多行程并从输出路径文件中删除多余的车辆。
    • --begin <您期望的开始时间>
    • --end <开始时间 + 车辆应插入网络的时间>
    • --period <(结束 - 开始) / 期望的车辆数量>
    • --intermediate <INT> 设置为一个较大的值以确保车辆在仿真中停留足够长的时间。
    • -r <输出路径文件>
  • 您可以定义一个循环路径,属性 repeat="X",其中 X 足够大以覆盖预期的仿真时间。
  • 您可以使用选项 --max-num-vehicles 来设置期望的数量。当超过此数量时,车辆插入将被延迟。为了避免大量延迟的车辆,建议同时使用选项 --max-depart-delay。使用此方法时,您必须确保随时有足够数量的车辆准备好插入。请注意,整个仿真过程中不同车辆 ID 的数量远大于指定值,因为一些车辆会离开仿真,新的具有不同 ID 的车辆会被插入以替换它们。
  • 您可以在仿真中使用重路由器。重路由器为穿过它们的车辆分配新路线,从而防止它们离开网络。有关简单循环的示例,请参见 <SUMO_HOME>/tests/sumo/cf_model/drive_in_circles
    • 工具 generateContinuousRerouters.py 可用于生成具有可配置转弯比例的连续操作的重路由器。
    • 如果网络一开始不是循环的(例如一条单行道),您可以通过添加一个返回边并将其长度声明为非常短(最小 0.1 米)来使其在非几何上成为循环。返回边应具有合理的几何形状(即一个绕行环),但长度可以设得非常短,这样不会影响车辆路径。

Caution

在版本 0.24.0 及以下,选项 --max-num-vehicles 在超过指定数量时会终止仿真。

车辆无法到达其目的地或采取迂回路线。为什么?#

意外的路径通常由无效的车道到车道连接或 vClass-限制 引起。即使每条边上都有一些允许该车辆的车道,它们也可能没有连接。如果车辆具有默认类型,它将忽略访问限制并在所有车道上行驶。netcheck 工具 可用于可视化从起始边的连接性,并发现缺失的连接。可能需要从网络删除一些绕行边以发现相关的连接边界。

为了调查连接性,sumo-gui 可以在自定义交叉口的可视化选项时显示车道到车道的连接。为了调查车道许可问题,菜单选项 Edit->Select lanes which allow... 可用于可视化选定的许可。

如何从 GPS 轨迹生成 SUMO 路径?#

答案很大程度上取决于您的输入数据的质量,主要是位置更新的频率/距离以及位置与您的街道网络的拟合精度。在最好的情况下,路径上的每条边上都有一个位置更新,您可以通过将位置映射到街道来简单地读取路径。这可以使用 sumo 附带的 python sumolib 完成,参见工具/Sumolib#基于地理坐标定位附近的边

Duarouter 支持使用属性 fromXY, fromLonLat 及其相关属性 映射 x,y 和 lon,lat 坐标。对于高质量的 GPS 数据,定义以下内容就足够了: <trip id="myVeh" viaLonLat="Lon0,Lat0 Lon1,Lat1 Lon2,Lat2 ..." depart="0"/>

如果路径中有一条边没有被数据点命中,或者您存在不匹配(例如匹配了“错误”方向的边),这将失败。在前一种情况下,您可以使用 duarouter--repair 轻松修复路径(使用 via 坐标时会自动发生)。

另一个有助于此的小脚本是 Tools/Routes#tracemapper.py。您也可以在此处使用 Contributed/SUMOPy 中的 map matching 插件。

对于更复杂的情况(即大的时间间隔或空间错误),该问题被称为地图匹配。存在开源工具来促进这一点(MatchGPX2OSM graphhopper)。

要精确重现高分辨率轨迹,可以使用 TraCI moveToXY 函数 映射精确的车辆位置(包括横向位置),甚至可以将车辆移动到道路空间之外。

如何避免带有许多掉头的路径?#

掉头经常在路径的起点或终点观察到,如果相应的边相对于总体行驶方向是错误的。有不同的方法来避免这种情况:

  • 使用属性 fromJunction/toJunction 或使用 fromXY/toXY (fromLonLat/toLonLat) 和选项 --mapmatch.junctions 指定交叉口之间的行程。
    • randomTrips.py 提供选项 ** --junction-taz** 用于此目的。
  • 设置 duarouter 选项 --remove-loops,这将切断路径中起始/结束的掉头。

    掉头也可能发生在路径中间,因为它们被视为更快的替代方案(根据交通状况,这甚至可能是正确的)。为了阻止使用掉头,可以给选项 --weights.turnaround-penalty 一个更高的值(默认为 5.0)。sumoduarouter 都支持此选项。

仿真#

如何模拟事故#

SUMO 自动检测车辆碰撞。由于默认模型旨在避免事故,因此必须采取一些措施来制造事故

通常,需要的是事故的效果而不是事故本身。如果不使用 TraCI,以下方法可能有用:

  1. 让一辆车在车道上停止一段时间(参见车辆、车辆类型和路径的定义#停靠点和航点)。这对于模拟事故非常有效。
  2. 在事故发生的车道上放置一个可变速度标志,并让其降低速度(参见Simulation/Variable Speed Signs)。这种方法将减少车道的吞吐量,但进一步的动态不太符合人们对事故情况的预期。
  3. 当然,您可以结合这两种方法。在一个项目中,我们通过让车辆停在一个车道上并降低其他车道的速度来模拟交通事故。
  4. 或者,您可以关闭一条或多条边上的车道
  5. 如果您关闭整条边,也可能触发重路由
  6. 通过设置选项 --collision.stoptime,在注册碰撞后可能会产生交通堵塞。

我更改了我的网络,现在 SUMO 无法加载它。#

实际上,SUMO 网络不是用来手动编辑的。您必须在输入中正确描述所有内容,并让 netconvert 构建您的网络。手动编辑网络非常复杂且容易出错。

如何更改交通信号灯周期和相位的持续时间?#

使用 netedit

我在我的仿真中看不到车辆移动#

有几种原因导致您看不到车辆。

  • 仿真尚未运行(单击“播放”按钮 (icon_play.png),参见 sumo-gui#Usage_Description
  • 如果您的仿真区域太大,除非您放大网络,否则车辆将不会显示。从远处看时,车辆太小了。要改变这一点,您也可以设置选项 Draw with constant size when zoomed out(参见车辆的可视化设置)。
  • 仿真速度太快,所有车辆在被看到之前就消失了。为避免这种情况,您可以增加 Delay 以减慢仿真速度。
  • 您的显卡驱动程序可能已过时
  • 您没有定义任何车辆
  • 您的所有车辆都设置为在仿真 --begin 时间之前出发。
  • 您的车辆设置为在仿真 --begin 时间之后很久才出发。

不同时间步长下的不同出发时间#

随着时间步长的减小,车辆更早进入网络。 这种行为的原因是车辆在一个时间步长结束时发出。对于一秒的时间步长,这意味着出发时间为 0 的车辆将在 0 到 1 之间的时间步长结束时插入网络,这几乎是在第 1 秒(0.99...)。如果使用 0.1 秒的时间步长,同一车辆将在 0 到 0.1 之间的时间步长结束时插入网络,这几乎是在 0.1(0.099...)。另请参见VehicleInsertion

如何保存仿真状态并在以后和/或以不同方式继续#

参见Simulation/SaveAndLoad

如何使仿真运行得更快?#

  • 确保没有不必要的堵塞。仿真中的车辆越多,运行速度越慢。
  • 如果您的网络非常大,请使用选项 --no-internal-links 构建它(简化的交叉口模型)。
  • 如果您使用行程或周期性重路由,请启用并行路由
  • 使用默认的步长 1s(使用 --step-length 0.1 会使仿真速度减慢 10 倍)。
  • 如果您的仿真非常大,请考虑使用介观仿真模型
  • 参见下文有关减速的更多提示。

仿真因许多车辆等待插入而变慢#

SUMO 持续检查可能的车辆插入。如果网络堵塞,必要的检查数量会迅速增长。选项 --max-depart-delay <TIME> 可用于丢弃在 <TIME> 秒内无法插入的车辆。

仿真在命令行上运行缓慢#

在 Windows 操作系统上运行时,每个仿真步骤刷新的命令行输出会显著减慢仿真速度。使用选项 --no-step-log 来避免这种情况。

仿真有很多堵塞/死锁。我能做什么?#

场景中的死锁可能有多种原因:

  1. 无效网络
  2. 无效的交通灯(参见改进生成的交通灯)。
  3. 无效的需求(车辆总数过多,太多车辆从同一条边开始)。
  4. 无效的路由
  5. 无效的插入(车辆在靠近边的末端时被插入到错误的车道,它们需要换到另一条转弯车道)。这可以通过设置车辆属性 departLane="best" 来修复。

    如果网络是从 OpenStreetMap 导入的,强烈建议使用推荐的导入选项。通常最好的做法是使用 sumo-gui 观察仿真,并找出第一个堵塞发生的位置。

两辆车想朝相反方向换道并相互阻挡。如何防止这种情况?#

驾驶员高度关注战略性车道选择要求,并试图提前换到所需车道。发生反向换道死锁的原因有几个:

  • 车辆无法进入所需车道,因为前方交叉口的连接布局阻止了这一点。这可以通过仔细检查死锁前方的连接来修复。
  • 车辆在靠近交叉口时被插入到错误的车道,它们需要在那里换道。要修复此问题,请设置车辆属性 departLane="best"
  • 车流必须执行交织操作,它们被迫在有限的空间内换道。这通常发生在将入口匝道与出口匝道结合在一起且距离很短的高速公路匝道上。死锁的危险可以通过添加一个额外的网络连接来消除,如这里所述。类似的死锁也可能发生在多车道环形交叉口,相同的解决方案(添加额外的连接,从内车道到外车道)也适用。

为什么车辆执行意外的换道操作?#

这可能是由无效的车道到车道连接引起的。在 sumo-gui 中通过激活 Junctions->show lane to lane connections 检查连接(在 gui 设置对话框 中)。

为什么车辆不使用所有可用的车道?#

主要原因是通常只有它们使用的车道允许它们继续行驶。您应该检查下游交叉口的连接是否正确。如果没有其他街道参与而车道数量减少(不是合适的交叉口),请确保使用拉链类型。如果您想改变整个场景中车辆的行为,请降低它们的 lcStrategic 值。

在一条车道有多个目标车道通往下一条边的情况下,车辆默认会优先选择最右边的连续车道。这可以通过 vType 属性 lcContRight 来更改。此外,使用最右边车道的急切程度可以使用 vType 属性 lcKeepRight 进行配置。

如何获得高流量/车辆密度?#

默认情况下,插入流量受仿真时间分辨率的限制(车辆仅在每个整秒插入),并且默认插入速度为 0。

以下定义将允许流量在 2500 辆/小时/车道的范围内:

<vehicle departSpeed="max" departPos="last" departLane="best" ../>

代替设置 departPos="last",也可以使用选项 --extrapolate-departpos

Caution

当使用 departLanebestfreerandom_free 时,多车道道路上的高流量需要插入边比最快车辆的制动距离稍长。这是因为车道选择会检查插入边上的车辆以确定合适的插入车道,而短边提供的信息不足。

为了进一步增加流量,可以使用以下设置(可能会牺牲一些真实性):

如何插入具有固定密度的车辆?#

要在 1 公里长的高速公路的特定车道上以 65 辆均匀分布的车辆开始仿真,请执行以下操作:

  • 创建一条 1 公里长的边。
  • 计算每辆车的空间:1000 米 / 65 = 15.385 米。
  • 减去最小空间要求(5 米车长 + 默认 2.5 米最小间距)。
  • 这给出了 7.885 米作为车辆之间的剩余空间。
  • 在默认值 tau=1(不包括 minGap 的期望时间间距)下,这意味着车辆将以 7.885 米/秒的速度处于静止状态。
  • 您可以使用插入方法 'last',该方法将车辆放置在给定速度的期望间距处(对每条车道重复):
<flow id="lane0" from="startEdge" to="destEdge" begin="0" end="1" number="65" departPos="last" departSpeed="7.885" departLane="0"/>

要让车辆以特定密度连续进入仿真:

  • 使用上述平衡速度计算连续车辆之间的时间间隔:15.385 米 / 7.885 米/秒 = 1.951 秒。
  • 使用平衡速度作为 departSpeed。
<flow id="lane0" from="startEdge" to="destEdge" begin="0" end="3600" period="1.951" departPos="base" departSpeed="7.885" departLane="0"/>

Caution

对于连续情况,指定的密度在靠近流入处达到,因为车辆开始加速到其首选速度。为了沿边保持密度,请使用环路道路场景或将允许速度限制为 departSpeed 值。请记住时间分辨率依赖性以进行进一步调整。

如何强制换道?#

有几种选项可以强制车辆换到特定车道:

Note

计划了另一种方法但尚未实现:#1020

仿真场景的大小是否有限制?#

  • SUMO 对街道、交叉口或车辆的数量没有硬性限制。当尝试构建或运行超出城市规模的场景时,请确保有足够的 RAM。可能需要使用 SUMO 的 64 位版本才能利用可用的 RAM。
  • 仿真场景的最大长度为 2.92 亿年。如果您需要模拟更长的时间段,必须保存并重新加载仿真状态

SUMO 能跑多快?#

这实际上取决于您在任何给定时间在仿真中有多少车辆(以及在某种程度上取决于车辆在交叉口的相互作用强度以及每个车辆在换道时必须选择多少车道)。 在详细模式下运行时,SUMO 会告诉您 UPS 指标。这是每秒的车辆数。数字 x 表示您可以在步长为 1 秒的情况下以实时速度运行 x 辆车。 运行时间与步长成反比(--step-length 0.1 计算的步数是默认值 1s 的 10 倍,因此需要 10 倍的时间)。

在普通台式 PC 上的一些示例:

  • 车辆在一条长的单车道上:700k UPS
  • 车辆在一条长的四车道道路上:240k UPS
  • 复杂的网格网络:80k UPS

    在一天的城市仿真中,以 80k UPS 运行,其中一辆车平均花费 30 分钟驾驶,可以在 24 小时的挂钟时间内模拟 380 万辆车。然而,当网络中同时有超过 80k 辆车时,仿真将慢于实时,因为高峰时段和低流量时间会平均化。

    计算为 24 * 3600 * 80000 / 1800 = 3840000

如何执行具有不同结果的重复仿真#

默认情况下,即使仿真的许多部分是随机的,相同的配置也会导致相同的行为。这种可重现性通常是必要的(例如,用于调试场景)。然而,为了避免这种“固定”随机性的偏差,通常需要多次运行仿真并对结果集合进行分析。同样,在现实世界中,不同日期的交通状况不同,从多天而不是单天得出结论更可靠。

要更改默认的随机性,必须使用选项 --seed 或选项 --random。第一个选项为随机数生成器设置用户定义的初始化,而另一个选择随机种子(每次运行都会不同)。

Note

这些选项适用于 sumo、duarouter 和许多使用随机化的 python 工具。

为了从多次运行中收集不同的输出,建议设置选项 --output-prefix。在批处理文件中运行 3 次具有不同结果的仿真可以这样做:

sumo -c run.sumocfg --seed 1 --output-prefix 1.
sumo -c run.sumocfg --seed 2 --output-prefix 2.
sumo -c run.sumocfg --seed 3 --output-prefix 3.

工具 runSeeds.py 可用于自动化此过程,对其进行并行化,甚至添加输出选项以避免修改 .sumocfg:

tools/runSeeds.py -a sumo -k run.sumocfg --seeds 1:4 --threads 4 --statistic-output stats.xml

工具 attributeStats.py 可用于为多次运行生成统计信息: 例如,如果仿真使用选项 <statistic-output value="stats.xml"> 运行,命令 tools/output/attributeStats.py *.stats.xml 将生成所有运行中统计输出文件中每个属性的统计信息。

工具 attributeCompare.py 可用于必须对属性进行分组的情况。一个例子是获取每条边和每小时的平均交通数据,用于每小时的 edgeData-output。以下命令按边 ID 和间隔开始时间对每个交通属性进行分组:

tools/output/attributeCompare.py *.ed.xml -o output.xml -i id,begin

如何模拟自动驾驶车辆?#

SUMO 中的所有车辆都是自主的(在由计算机算法控制其路径、速度和换道决策的意义上)。SUMO 中的大多数跟驰模型旨在模拟人类驾驶行为,以捕捉由非自动驾驶车辆引起的交通效应。跟驰模型 ACCCACC 旨在反映自动化驾驶功能。

默认的跟驰模型 Krauss 足够简单/通用,可以针对人类和自动化驾驶进行参数化。然而,正确的参数取决于用户对自动化车队的假设:

  • 可能,自动驾驶车辆必须比人类驾驶员更谨慎地驾驶(即,具有更大的期望时间间距 tau 值)。
  • 可能,自动驾驶车辆可能比人类驾驶员具有更低的时间间距,因为它们具有更好的传感或更快的执行(即,具有更低的期望时间间距 tau 值)。

    旨在捕捉特定人类行为的功能可以直接关闭 - 不完美的加速,磨蹭:sigma="0" - 不完美地遵守速度限制:在 vType 中设置 speedDev="0" 或在 <vehicle> 中设置 speedFactor="1"

    其他安全关键行为在安全中描述。

为什么排队车辆在车道上绘制为堆叠在 sumo-gui 中?#

如果没有报告碰撞,这是由于长度-几何不匹配,而不是将车辆长度缩放到几何

如何模拟行人在随机位置过马路?#

目前支持的最接近的方法是多次分割边,并在每次分割处放置一个非优先的人行横道。然后配置一些行人以鲁莽的方式使用这些横道。后者是通过设置 vType 属性 jmIgnoreFoeProbjmIgnoreFoeSpeed 来实现的,以忽略以低于给定速度接近交叉口的行人,并具有给定的概率。

可视化#

如何为我的仿真获取卫星/航拍背景图像#

osmWebWizard 工具提供了获取带有背景图像的场景的最简单解决方案。在生成场景之前选中“卫星背景”复选框就足够了。要选择另一个图像提供商,也可以使用工具 tileGet.py

重要的是要知道,如果启用“卫星背景”复选框,网络投影将从 UTM 更改为墨卡托。这是为了匹配流行卫星图像提供商的投影所必需的。然而,这种投影具有不受欢迎的特性,即比默认投影更强烈地扭曲长度。根据导入的区域,距离可能会加倍(或更糟)。

要将此类投影恢复为 UTM,可以使用以下命令:

netconvert -s *.net.xml -p plain --proj.plain-geo
netconvert -e plain.edg.xml -n plain.nod.xml -x plain.con.xml -i plain.tll.xml --proj.utm

更改投影后,卫星背景将无法再使用。任何多边形都必须使用 polyconvert 重新计算,并且从 OSM 提取的公共交通站点位置也必须进行调整。(最简单的解决方案是向所有停靠点添加 friendlyPos="true",但这可能会扭曲它们的期望位置)。

sumo-gui 崩溃#

有时 sumo-gui 会无故终止。在大多数情况下,更新 opengl 驱动程序可以解决此问题。

鼠标指针区域显示闪烁(Windows)#

较新版本的 Windows 似乎会缓存鼠标下方的区域以应用鼠标阴影。要避免此问题,请转到系统菜单,然后鼠标->指针并禁用鼠标阴影。这是目前唯一的解决方案。(来源:Till Oliver Knoll,通过 QT 兴趣列表)。

sumo-gui 窗口和按钮出现,但看不到网络/车辆 / 车辆不可见或闪烁 / 道路绘制在车辆之上#

此问题可能在使用过时/错误的 openGL 驱动程序时发生。请尝试更新图形硬件的驱动程序。

从 sumo-gui 制作视频#

有几种方法可以从您的 SUMO 仿真制作视频。您可以使用像 VLC Player [1] 这样的屏幕录制工具。这种方法的缺点是需要一个(非常)快速的 CPU 来实时捕获视频,这取决于所选的分辨率和仿真屏幕大小。

第二种方法需要一个支持 ffmpeg 编译的 sumo-gui 版本(对于 Windows 下载,这是 extra 版本)。如果有疑问,请打开关于对话框(按 F12)并阅读提及编译功能(如 Proj)的行,看它是否包含 FFmpeg。如果是,您可以使用屏幕截图按钮开始视频录制。只需输入一个以 ".h264" 或 ".hevc" 结尾的文件名,具体取决于您想要的编码器。请注意,这有时会减慢您的仿真速度,甚至导致停止。

另一种方法是使用每个仿真时间步长的单个图像。这可以通过额外的 TraCI 命令来完成,用于构建屏幕截图。一个小的 Python 片段展示了如何使用此 TraCI 命令为每个新时间步长获取一个新图像。

    for i in range(duration):
        traci.simulationStep()
        traci.gui.screenshot("View #0", "images/"+str(i)+".png")

这种方法的更复杂版本在 createScreenshotSequence.py 工具中给出。

接下来,您必须将图像粘贴在一起。这项工作可以用 virtualdub [2] 图形化地完成,或者通过命令行使用 ffmpeg [3] 完成。ffmpeg 的示例命令如下所示。

    ffmpeg -r 10 -i images/%d.png -b:v 1500k -vcodec wmv2 sumo.wmv

参数 -r 设置 fps 的值,-b:v 设置视频的比特率。

输出不完整#

使用 GUI 或 TraCI 时,输出文件有时看起来不完整,因为文件仅在所有内容关闭时才刷新。对于 GUI,您可以使用菜单中的关闭项或关闭整个 GUI。在 TraCI 中,最好始终使用某种 process.wait() 机制等待 sumo 进程完成。

DisplayLink 设备的驱动程序与 Fox 库不兼容。如果 sumo-gui 或 netedit 在执行期间呈现图形问题,如此图,则必须卸载 DisplayLink 驱动程序。

视图扭曲,网络上到处都是绿线#

如果您的 sumo-gui 看起来像这样,可能又是您的显示驱动程序问题。它似乎最常出现在板载(Intel)显卡与专用 nvidia 卡一起使用时。要修复它,请安装最新的 nvidia 驱动程序,打开 nvidia 系统控制面板(应该可以通过右键单击桌面背景获得),转到 3D 设置并选择 nvidia 作为您的首选图形处理器。如果这不起作用,请尝试将集成显卡设置为首选。(感谢 @palvarezlopez 发现这一点。)

sumo-gui 和 netedit 闪烁#

Windows 10 中存在一个已知问题,即某些应用程序中的缩放和闪烁。如果缩放比例大于 100%,sumo-gui 和 netedit 在鼠标移动期间可能会出现闪烁。唯一已知的解决方案是将缩放比例保持在 100%。另一个原因是使用现代显卡。如果您的计算机支持,请使用集成显卡运行 SUMO(控制面板->NVidia 控制面板->选择集成显卡->应用)。

Linux 上参数对话框中缺少字符(例如中文街道名称)#

为您的发行版安装 Noto Fonts 包。

如何更改 sumo-gui 或 netedit 的颜色主题?#

SUMO 使用 fox-toolkit,它允许系统范围和每个应用程序的设置,用户可以自定义。在 Windows 下,这些设置必须使用 regedit 配置,即在注册表位置 Computer\HKEY_CURRENT_USER\SOFTWARE\sumo-gui\SUMO GUI\SETTINGS

  • 支持的颜色条目是:bordercolor, basecolor, hilitecolor, shadowcolor, backcolor, forecolor, selforecolor, selbackcolor, tipforecolor, tipbackcolor, selmenutextcolor, selmenubackcolor
    • 支持的颜色值是 RGB 十六进制代码(#aea395)以及符号名称(red)。颜色名称的完整列表可以在 FXColorNames.cpp 中找到。
  • 字体配置为:normalfont(例如 normalfont="Times,100")
  • 其他配置条目是:typingspeed, clickspeed, scrollspeed, scrolldelay, blinkspeed, animspeed, menupause, tippause, tiptime, dragdelta, wheellines, scrollbarsize, displaygamma

如何更改 sumo-gui 或 netedit 中的字体和图标大小?#

从版本 1.26.0 开始(具体是 v1_25_0-454),可以在 gui-settings(openGL 选项卡中的 'UI Scaling')中缩放字体和图标大小。应用程序必须重新启动才能使设置生效。

在旧版本中,必须使用 fox-registry(见上文)来更改 'normalfont'。在 Linux 和 macOS 上,可以通过创建文件 ~/.foxrc/Desktop 并包含以下行来实现: normalfont="Arial,200" (使用任何所需的字体或大小)

升级#

如何升级 SUMO?#

最简单的方法是下载最新的 sumo 版本最新的开发版本到您选择的目录,然后从那里开始使用它。您可能需要更新环境变量 PATHSUMO_HOME,以确保从命令行调用的应用程序是正确的版本(参见Basics/Basic_Computer_Skills#Configuring_Path_Settings)。通过从您希望用于调用应用程序和 traci 脚本的命令行调用 echo %SUMO_HOME%(Linux: echo $SUMO_HOME)来确认值已正确更新。

sumo 警告网络已弃用或无法加载它们#

在主要版本中(当版本号的第一或第二位数字发生变化时),网络格式可能会有变化。在这种情况下,我们在 <SUMO_HOME>/tools/net 中提供脚本,可用于自动升级您的网络。当前版本的 netconvert 也可用于将大多数网络文件升级到当前版本。只需调用 netconvert -s old.net.xml -o new.net.xml

Python 工具#

如何运行 python 工具?#

参见这里

工具因 SyntaxError 或 ImportError 或有关 ">>" 的某些 TypeError 而失败#

许多 python 工具需要 python 版本 2.7。我们的目标是让 sumolibtraci 兼容 Python 3。

工具在添加带有前导减号的参数时失败#

我们的许多工具使用参数解析器来收集进一步的命令行参数。由于选项名称通常以减号开头,解析器会混淆您的输入是选项还是相应的值。在这种情况下,请尝试使用 --option=value 语法。

工具因 ImportError 而失败#

确保将环境变量 SUMO_HOME 设置为指向您的 SUMO 安装的基目录(包含 toolsbin 的目录)。

如何在我自己的 python 脚本中导入 tracisumolib#

为了导入这些库,文件夹 <SUMO_HOME>/tools 必须在您的 python 搜索路径 中。这可以通过修改 python 变量 sys.path 来实现,如这里这里所述。或者,您可以将 SUMO 安装的路径硬编码到您的脚本中:

 import sys
 sys.path.append('/your/path/to/sumo/tools')
 import traci
 import sumolib

python 脚本不接受命令行参数(仅限 Windows)#

这是某些 python 安装的已知问题。如果您不允许编辑注册表,通常的解决方法是显式调用 python 解释器,例如代替

script.py <argument>

您可以这样做

python script.py <argument>

osmWebWizard.py 在 Windows 10 上无法生成场景#

这可能发生在过时的 python 2.7 版本上。更新到 2.7.15 (64bit) 已被报告可以解决此问题。

同时查看打开的 shell 窗口中的输出。如果它报告缺少或过时的 SSL 证书,请尝试:pip install certifi

osmWebWizard.py 在 Linux 上无法加载浏览器页面#

当您使用从 flatpak 或snap 包安装的浏览器时会发生这种情况(自 Ubuntu 22.04 起是默认设置)。作为解决方法,您可以安装 .deb 包

(通信)网络模拟器#

如何在 NS2 中使用 .tcl 文件?#

有关 NS2 的问题应发送到NS2 邮件列表

如何将 SUMO 与网络模拟器结合使用?#

查看 veins

SUMO 可以模拟 V2V / V2X 消息吗?#

Sumo 通常不模拟消息传递。最好的方法是通过连接的代码来管理消息。如果您想模拟应用层并且可以假设消息“只是有效”,您通常可以使用自己的(简单的)TraCI 代码处理消息。如果需要模拟物理过程,建议使用网络模拟器(见上文)。Sumo 支持一个车辆设备来记录连接事件,但这不是为了与应用层集成,而仅旨在用于记录。

有效性#

关于 SUMO 有效性的出版物有哪些?#

过时(针对非常旧版本 SUMO 的问题)#

车辆不在其路径的最后一条边上行驶#

在版本 0.13.1 及以下(包括),车辆(默认情况下)在最后一条边的位置 0 完成其路径。您可以通过在车辆定义中设置属性 departPos 来更改此行为(参见车辆、车辆类型和路径的定义)。负值从边的末尾向后计数,因此设置 departPos="-1" 将使车辆行驶(几乎)到最后一条边的末尾。在较新版本中,默认值是边的末尾,这应该会禁用此行为。

车辆向后跳#

当我尝试评估我的车辆转储时,有时车辆似乎向后跳(它们的位置比前一步小)。

为避免由于不适当的换道行为造成的堵塞,车辆可能会交换车道。在这种情况下,每辆车都获得了另一辆车的位置和速度。由于车辆的位置可能略有不同,其中一辆车可能看起来向后跳。

从版本 0.8 开始,这应该不会发生。