2022 教程

本教程将展示网络编辑、交通流、逆向行驶、人行横道、停车搜索等内容!

文件#

视频#

观看 2022 教程

文字实录#

简介#

欢迎来到传统的 SUMO 用户大会教程。今天,我将向您展示一系列主题,从入门级的主题、介绍性材料开始,然后转向一些更复杂的主题。但和往年一样,我们将从向导和三击生成场景开始,我们还将讨论网络编辑。我们将看到如何简单地创建单个交通流,然后我们将讨论一些高级内容,例如逆向行驶、人行横道以及寻找停车位的交通流。要运行本教程,要在您自己的计算机上跟随本教程(也许在讲座之后),因为现场跟随可能比较困难,您需要 SUMO 版本 1.13.0、计算机上的 Python 解释器、文本编辑器以及教程文件,您可以在我们的文档中找到这些文件,在“教程”部分有一个子部分“SUMO 用户大会教程”,您可以在那里找到下载链接。本教程将被录制。我希望您能在屏幕底部看到我按下的键。所以如果我按下一些按钮,我希望您能看到它们,它们也会被录下来。有人看到按键了吗?是的,我们能看到。太好了。

osmWebWizard#

那么让我们从 osmWebWizard 开始。这是 SUMO 自带的一个工具,旨在帮助您只需点击几下即可设置模拟场景。当您运行此工具时,如果 SUMO 已安装,您可能可以从任务栏运行它,应该有一个指向 osmWebWizard 的链接,或者您可以在 SUMO 安装目录的 tools 子文件夹中找到它。所以当您运行它时,它将打开一个 Web 浏览器,您可以在其中选择要下载的地图部分、世界的某个部分。然后您还可以选择要在模拟中包含的交通类型。还有一些附加选项,例如启用公共交通以及下载卫星背景或土地利用和建筑物的形状。作为最新版本中的新功能,或者更确切地说,自上次用户大会教程以来,我很高兴向您展示一个新功能,即道路类型选择。因此,向导中有一个新选项卡,我将在几秒钟后展示它,您可以在其中选择您希望在模拟中看到的各种道路。这样做的一个主要用途是能够下载更大的场景。因为场景的下载大小受限于 OpenStreetMap 服务器,如果您选择道路类型并取消选择背景形状,那么您可以构建非常大的场景。例如,如果您只需要主要道路。 那么让我们看看这是如何工作的。所以您的系统中某处应该有一个 SUMO 文件夹,无论您将其安装在哪里。如果您的任务栏中没有链接,那么您只需进入 tools 文件夹,然后启动 osmWebWizard。然后您将看到这个浏览器窗口,您可以在其中选择一个区域,可以拖动它并调整其大小,您还可以选择您想要的交通类型,以及您需要的道路类型,禁用所有您不想要的内容。也许这次不添加多边形,只是为了展示其过程,然后生成您的场景,就这样! 当然,下载数据和构建场景需要一些时间,但最终您将得到一个带有该场景的模拟窗口并开始运行。所以当然,我已经在本教程中为您包含了场景文件,所以我将快速关闭向导,然后继续介绍我为您带来的文件。好的,这是教程文件的第一个文件夹,让我们稍微谈谈您将在其中找到的文件。最重要的文件是 sumo 配置文件。它是将所有内容联系在一起的配置,这里的关键文件是网络文件,扩展名为 .net.xml。然后您有 osm.passenger.trips.xml,根据您点击的按钮,可能还有其他文件,但现在我们只启用了乘用车,但也可能有更多用于公共交通站点、行人的文件,如果您对这些感兴趣,那么我邀请您查看往年的教程,因为这些内容已经解释过了。有一个文件定义了模拟首次打开时的外观,然后是一系列用于使用不同选项重建场景的文件,其中一些例如构建批处理文件我们将在本教程中看到和使用,因为每当您更改有关网络的内容时,通常必须重建交通以适应基础设施的变化。好的,那么现在让我们看看我作为教程一部分为您带来的模拟。

如果 SUMO 已正确安装在您的系统上,那么您只需单击具有 sumo 配置扩展名的文件,它就会启动 sumo。那么让我们运行模拟。顺便说一句,我们添加了新的热键,因此您现在只需按 空格键 即可运行模拟,您可以再次按此键停止它。现在,如果您非常仔细地看,您可能什么也看不到,因为在这种缩放级别下,汽车太小了。如前所述,我们下载了大型场景,这是通过过滤道路类型实现的。所以如果您想看到汽车到处移动,一种方法是更改图形设置。这可以在彩虹按钮后面找到。我发现一个始终有用的设置在“车辆”选项卡中,即“缩小时以恒定大小绘制”,突然间所有的汽车都变大了。让我们按速度为它们着色,这样我们就可以大致了解它们在做什么。现在,为了不必每次都重新设置这些,我们只需将这些设置存储在注册表中。我称之为“speedLarge”,因为我按速度为汽车着色,而且它们很大。所以我现在有这个设置,可以反复使用。所以让我们运行这个模拟,看看它是如何进行的。您还可以使用热键来更改延迟,或者您可以使用滑块进行操作,使模拟运行得非常慢或非常快。所以介于两者之间可能比较好。Page UpPage Down 也可以改变这个,所以我们可以看到汽车在整个网络上运行,然后突然在左上角看起来有点糟糕,我们看到弹出警告消息。现在,您可以对这些警告消息执行一些操作。一种方法是单击带下划线的车辆名称,或者单击带下划线的车道 ID,甚至可以单击那些带下划线的时间。这将设置一个断点,然后您可以回放模拟并运行到该时间,以查看到底发生了什么。所以这里我们有某种死锁。汽车在这个环形结构中,圆圈已经跑满,所以没有一辆车能真正移动。过了一会儿,汽车被传送,这意味着它们以不规则的方式被移动到下一个边缘,这通常是事情出错的标志。当然,这是我们想要改变并且可以改变的事情,我将在这里快速向您展示。

网络编辑 - 连接路口 (Join Junctions)#

那么回到幻灯片。对于那些刚接触 SUMO 的人来说,您可能想知道您实际在那里看到的是什么。这个模拟中有什么?它是怎么产生的?所以这些汽车模拟的网络基于 OSM (OpenStreetMap) 道路网络数据存储,在本例中,它是数据集的过滤版本,因为我们只包含了主要道路,而且它也是一种启发式解释,因为数据并不是真正为微观模拟构建的。它可能主要是为构建漂亮地图的路由而构建的。因此,我们必须进行一些解释。如果您查看该特定路口的卫星图片,您会看到它是一个大路口,而在 OpenStreetMap 中,它有点像由四个路口组成的集群。在这里,解释将其变成了三个路口,不幸的是,它们仍然形成了一个圆圈。所以,这是我们可以修复的事情,我们将使用图形编辑器 netedit 来修复它。一种启动方法是从您的任务栏(如果您有图标),或者简单地从 sumo-gui 按 Ctrl + T,如果您需要回忆热键,这在编辑菜单中。所以我们打开它,现在我们要做的是将这个路口集群变成一个单一的路口,这样更容易模拟。所以我们切换到选择模式(按字母 S)。现在我们可以单击这些路口中的每一个来选择它们。然后有一个工具“连接选定的路口”(Join Selected Junctions),快捷键是 F7。现在它是一个单一的路口了。如果您想看看它的样子,我们可以按 F5 键重新计算所有形状。就是这样。现在按 Ctrl + S,我们保存网络(您显然可以在文件菜单中找到它)。现在,我们可以重新启动模拟吗?嗯,是的,我们可以。我按了 Ctrl + R 来重新加载它,但它不起作用。因为现在道路已经改变,我们必须重建交通。所以我关闭模拟,转到该文件夹并运行构建批处理文件。现在我可以再次运行模拟了。啊,是的,现在我可以切换回我存储的设置。正如您所看到的,现在没有错误,交通正在运行。如果我们让它运行更长时间,我们会发现它不再在圆圈中出现这种死锁了。这里重要的一点是关闭模拟,因为在 Windows 上,运行中的模拟会锁定文件,您无法重新生成交通。所以在使用本教程时请记住这一点。好的,那么,现在另一个小背景信息:从 OSM 数据创建网络的过程实际上想像我们刚才手动做的那样连接这个路口,但它失败了。所以在其日志输出中它实际上给出了一个警告,说,不,我无法管理连接这个路口,尽管我想这样做。所以在构建网络时,查看那些警告时需要注意这一点。

好的。那么我们可以做的是,我们可以比较有修复和没有修复的情况下模拟的行为。正如您可能想象的那样,这种死锁对汽车的运行时间、它们等待的时间以及损失的时间有很大影响。所以我把这个列在了一个小表格上,您可以看到,由于这个修复,网络中所有汽车的平均等待时间减少了一半。现在,如果您想获得这种统计数据,一种方法是在命令行上运行模拟。所以我将在这里打开命令行,运行 sumo -c osm.sumocfg,当这个运行完成后,您可以在命令行上获得我刚刚在表格上显示的所有统计数据。当然,也有 XML 文件可以将这些写入其中,但这通常是一种快速方便的方法。好的。

网络编辑 - 精简 (Reduce)#

继续网络编辑。顺便说一句,我们现在实际上是在一个不同的教程文件夹中。我将切换到这个。所以这是第二部分,netedit。我将再次打开编辑器,关闭旧的。好的。那么接下来我们要做的是将网络精简,以专注于模拟的一小部分。有时这很有用。例如,如果您不想要 Web 向导提供的矩形区域。所以我们再次进入选择模式,按字母 S。然后按住 Shift,我们可以进行矩形选择,并构建我们想要保留的网络部分。所以,您可以不断添加活动区域。当然,您也可以将其切换为移除区域。所以让我们再添加一些。现在您会找到这个精简按钮。然后“砰”的一声,它将您的网络精简到选定的范围。然后当然,您保存它,您可以重建交通。

网络编辑 - 交通信号灯 (Traffic light)#

我们还能做什么?嗯,回顾那张卫星图片,我们注意到我们连接的那个路口实际上有交通信号灯的所有标志。在 SUMO 中是这样吗?实际上不是。我要去另一个文件夹。所以这个路口没有交通信号灯。您可以看到它的类型是 priority(优先通行)。不是交通信号灯。它在那里。通行权由优先规则管理。所以我们来改变这个。我们通过按字母 T 进入交通信号灯模式。这是顶部的小图标。如果您不记得热键,您可以在编辑菜单中找到它们。现在我们单击路口,我们可以创建交通信号灯。就是这样。我们保存网络。我们在这里就有了带交通信号灯的模拟。如果我们这样做会发生什么?哦,实际上,有一点背景知识:OpenStreetMap 确实有一些关于交通信号灯的信息,但通常,它们只是记录标志的位置。要弄清楚该路段的控制方式有点挑战。更不用说在 OpenStreetMap 中没有单个路口的情况了...所以在这种情况下,启发式方法失败了,虽然它通常会成功,但在这里我们必须手动调整,我想这是一个教学时刻。那么当我们向模拟添加交通信号灯时会发生什么?嗯,汽车的等待时间增加了,因为可能没有那么多交通,现在一些汽车必须在红灯处等待。我们还能做什么?我们可以改变交通信号灯的类型,因为我们之前拥有的是一个具有固定周期计划的交通信号灯。所以所有阶段一次又一次地具有相同的持续时间,而不管该路口的交通状况如何。我们可以通过进入检查模式(这个图标)来改变这一点,单击路口,然后将 TL 类型(交通信号灯类型属性)从“static”(静态)更改为“actuated”(感应式),我们保存网络,这就是全部了。这在后台实际做的是,它根据一些选项为每个绿灯阶段设置最小和最大持续时间。然后在模拟中,会有一些交通检测来循环各个阶段。但根据我对日程安排的了解,在本次会议上我们将听到很多关于交通信号灯的内容。所以让我们看看与我们所做的所有更改相对应的模拟。它在这个最终文件夹中。当我们运行模拟时,我们看到这里有一个交通信号灯。汽车来了,它们在红灯处等待,这很明显。我们可以看的一件事是阶段的持续时间。所以让我们右键单击其中一条彩色线,“显示参数”(Show Parameter)。我们这里有各种各样的值。我想看的一件事是运行持续时间,即某个阶段实际运行了多长时间。当我单击这个小绘图按钮时,会打开一个绘图窗口。让我们并排放置。这样窗口就不会被隐藏。让我们运行模拟。正如您所看到的,阶段通常很短,但有时它们会变长,这是由于存在需要更长时间阶段的交通。这样我们就可以看到我们实际上正在运行一个感应式交通信号灯。当我们看看它做了什么时。我们已经精简了网络,然后添加了一个交通信号灯,与我们只有一个优先路口相比,这增加了 15 秒的等待时间,现在我们将其变成了感应式交通信号灯。整个场景的平均等待时间下降了,尽管有很多路口。这表明我们在一个路口定义的交通信号灯类型有很大影响。然后您可能会问,“嗯,这是该路口运行的真实交通信号灯计划吗?”我必须告诉您,不,这只是最好的猜测,而且很可能不是那里发生的情况,更不用说在现实世界中,这个路口有一辆电车通过,这肯定会影响阶段切换的方式。但它比没有交通信号灯要好,也比拥有静态交通信号灯要好,而且通常我们试图尽可能地近似现实世界,尤其是在大型网络中。

网络编辑 - 路口形状 (Junction shape)#

所以您可以在 netedit 中做的另一件事是,您可以实际查看那个路口,塑造它的形状。那么这是如何工作的呢?您可以右键单击该路口并设置自定义路口形状。然后您可以通过 Shift 单击来移动更改或删除点,或者通过拖动来添加更多点。完成后,按 Enter。这很少是必要的。在这种情况下,它对交通也没有太大影响,对整个网络的平均属性没有可测量的影响。好的,关于第一批网络编辑就到这里。现在让我们进入一个新话题。

交通#

让我们谈谈交通。不幸的是,到目前为止您在这个场景中看到的交通只是随机的,因为没有通用的数据源来读取交通数据,所以我们可以在世界任何地方构建场景。所以在后台,向导生成了一个特定的配置来为这个网络构建随机交通。我在这里强调的关键点是交通应该持续多长时间。所以它在 3600 秒(一小时的交通)结束。然后是 p 参数,即插入之间的周期,这是基于网络的大小。对于较大的网络,通常需要更多的汽车。所以在这个网络中,每 2.1 秒,一辆新车被插入到随机的边缘,或者说随机的道路上,驶向其他随机的道路,并且交通有一些属性,所以它们是乘用车,它们出发在最适合其路线的任何车道上。这些都是自动给出的属性,行程的最小距离应为 300 米,否则看起来很荒谬。无论如何,步行对环境更好。然后有一些选项可以用来影响某条道路网络边缘成为交通起点或终点的概率。所以这个选项根据车道数量缩放概率,车道越多意味着交通越多,这个选项以某种方式缩放边缘因子选项的概率,使得交通更可能出现在网络的外部,在外部边界处消失。顺便说一句,这是您在 Web 向导界面中分配交通时可以设置的选项。然后还有一个选项 --validate,我想强调一下。这确保了所有生成的随机行程实际上都可以完成。所以有一条从起点到终点的道路。情况并非总是如此,例如,如果您下载了一个城市的一部分,那里有一条河但没有桥,那么您就无法从该场景的左侧到右侧,那么一些行程最好不被创建,因为它们对于此场景无效。好的,关于随机交通就这么多。通常这是一个好的开始,但不是构建良好场景的终点。

需求编辑 - 流 (Flow)#

您可以做的一件事,特别是对于较小的场景,就是以非常手动的方式定义交通流。假设这么多汽车从这个点开到那个点。那么让我们看看如何在 netedit 中做到这一点。我们将移动,我们正在移动到另一个文件夹,所以我清理一下。这有点挑战,这么多窗口。好的,这是教程的第三部分。这是关于交通流的。同样,我使用简单的方法打开网络编辑器,首先运行模拟。按 Ctrl + T 运行编辑器。到目前为止,我们花了一些时间在网络模式中,但有三种主要模式。一种用于编辑网络内容,包含所有这些子模式:检查、删除、创建边缘、交通信号灯等。您可以在其他已录制的教程中了解更多信息。然后有一个主要模式用于编辑交通,这是需求模式。还有一个数据模式,在去年的教程中已经解释过,但我们今天不会使用。所以在需求模式中,我们可以使用车辆子模式来创建一些交通。您可以创建具有固定路线的单个汽车,这些在这里称为车辆 (vehicles),或者您可以定义行程 (trips),您只给出起点和终点,模拟必须弄清楚实际走了哪些道路,我们在这里称这些为行程 (trips)。但现在让我们创建一个流 (flow)。所以流 (flow) 不仅仅是模拟中出现的一辆汽车,而是一大群汽车。有各种定义它们的方式。从一个边缘到另一个边缘,或从一个路口到另一个路口,或使用固定路线,现在让我们定义两个路口之间的流。假设从这个路口到,比如说,这个路口。好的,还没完成。我刚刚定义了位置。让我们为这个流设置一些更多属性。所以由于它开始的那个边缘有两个车道,我们希望交通从任意一个开始。所以我们设置 departLane 为一个随机值。然后我们还希望汽车以一定的速度开始,因为这真的是场景的边缘,它们不是从家里开始,而是真的从世界的其他地方进来,所以让我们将它们的 depart speed 设置为一个更智能的值,让我们将其设置为平均值,所以无论其他汽车以什么速度行驶,这就是它们应该进入的速度,如果没有交通,它们可以选择最大速度,所以随机出发车道,平均速度,现在让我们定义我们想要多少辆汽车。所以有各种描述方式,我们可以设置一个数字或一个结束时间,让我们选择结束时间,然后向您展示一个新功能,让我们有一个遵循泊松分布而不是符合泊松过程的交通,我们将设置某种到达率。让我们使用每秒 1.5 辆汽车。您可能想知道,这有点多吗?是的,您稍后会看到。最后,我按 Enter,这里出现了一个汽车符号,它显示这是一个流。我们也可以使用检查模式来查看所有属性。但现在,让我们将其保存到一个文件中。并在模拟中使用它。

那么我们如何确保这个流被调用呢?嗯,当然,有我们的 sumo 配置。在这里,我们必须确保包含该文件。所以在 route-files 位置,这些都是交通定义,我们的随机乘客行程,现在我们有我们的流,我刚刚这样命名,名称是任意的。然后它被包含进去了。所以让我们运行模拟。现在,当我在现场测试期间更改内容时,会发生这种情况。实际上,我定义了边缘之间的交通流,而不是路口之间的。如果您定义路口之间的交通,您实际上必须设置另一个模拟选项。这个 (<junction-taz value="true"/>)。又是教学时刻...所以让我们看看那个模拟。我们有交通进来。让我们把这个放大一点。实际上,让我们不要按街道给汽车着色,而是按它们的默认颜色。不,不是那些。不,这没什么帮助,因为我忘了给它们一个独特的颜色。我想让它们是蓝色的。所以我们快速改变一下。让我们给它们蓝色。我用 Ctrl + Shift + D 保存了需求。现在这没起作用。为什么?那些是蓝色的。我在正确的文件夹里吗?那些是蓝色的。那也没问题。现在按给定颜色的车辆。好的。是的,它们在那里。现在我们可以看到我们的流与我们之前拥有的所有随机交通相反。现在您可能想知道,我们这里真的有泊松分布吗?嗯,恐怕没有。因为我们定义的交通量超过了网络可以处理的量。这由这个小图标变黄显示。还有这里的某个数字上升,这是插入积压车辆的数量。我将为您打开一个小图来看看。我将重新运行模拟,我将向您展示插入积压车辆的数量。这个数字不断上升、上升、上升、上升。是的,它不会停止。所以这基本上是说我们定义了太多的交通。由于空间不足而无法进入道路网络的汽车,它们的插入被延迟,目的是稍后插入它们。但交通从未停止。所以这个队列永远不会变空。所以我们必须定义更少的交通。所以让我们现在就做。让我们改变这个交通。现在我可以在 netedit 中做这个,但我在这里的文件中快速做一下。我将这里的 rate 参数从 1.5 改为 0.7。所以让我们减少交通量。让我们看看模拟。还有插入积压。现在您可以看到这看起来温和多了。通常它会回落到零。但我们仍然不太满意。所以我们可以做几件事。我们可以进一步减少交通量,特别是意识到这里有一个大的瓶颈。我们还可以做点别的。让我们回到幻灯片一会儿。我们可以设置 SUMO 的一个相当新颖的选项。这是选项 extrapolate-departpos。那么这是做什么的呢?每当您在 SUMO 中插入交通时,这发生在模拟步骤期间,或者更确切地说,在模拟步骤结束时。所以如果您走一步,如果您每步一秒,那么每秒一辆车可以进入。但这限制了汽车之间的间距。当然,我们可以降低时间或增加模拟的时间分辨率。但我们也可以设置这个新选项,它确保那些实际上想停在两个整秒之间的汽车被稍微移动一下。这样我们在模拟中就有了更好的间距。所以让我向您展示它的样子。所以我准备了第二个配置文件,它只设置了这个选项 (extrapolate-departpos)。当我们运行这个时,您在那些图中看到的是它保持在零,插入积压从零开始,在较长时间内保持在零。但正如您所看到的,它仍然不时上升,这就是我们没有真正想要的泊松间距的地方。所以交通量仍然有点太大。好的。关于交通流就这么多。

逆向行驶 (Opposite-Direction driving)#

现在进入下一个主题,逆向行驶。这是一个新文件夹。那么让我们谈谈逆向行驶需要的两件事。我们需要用一些额外的信息来改变网络。这是一条路,那另一条路实际上是相反的一边,您可以在它们之间移动以便超车。这是我们必须做的第一件事。我将在网络编辑器中向您展示它的样子。首先,让我们看一条有潜在相反方向的边缘。这里我们有一个方向的道路,这里是另一个方向的道路。只要我们看这些边缘,我们就找不到我们想要的东西。我们必须真正检查边缘的车道,要么按住 Shift,正如您所看到的,光标处的图标甚至会改变。所以现在当我们点击这里时,我们看到车道的属性,但我们也可以点击这个按钮。然后每次点击都会检查车道。所以让我们看看车道。这里有一个小的 opposite 属性,目前是空的。那么我们将如何填充这个呢?我们将使用一个选项,每当有相反方向的车道时,自动填充所有这些字段。所以我们将进入选项屏幕,然后所有在 netconvert 中可用的选项都可以在这里找到。在处理选项卡的底部,我们有 "opposite.guess"。如果我们设置这个选项并重建网络,我将按 F5。当我们查看该车道时,它已经填入了相反方向的信息。好的。所以这是我们想做的一件事。现在我们需要做的第二件事是给汽车一些超车的理由。因为如果一辆非常快的车发现自己跟在一辆非常慢的车后面,它们可以这样做。但在这些类型的城区网络中,更常见的原因是道路上停着的汽车迫使您通过相反方向超车。所以让我们在道路上创建一些停着的交通。我们进入需求模式,即 F3 和这个按钮,然后进入车辆模式。让我们创建一些行程。我们希望汽车只是停在这个区域,一个方向两个,另一个方向一个。所以我们让它们在它们的停靠点位置出发。所以我将 departPos 设置为 stop。然后我在这里点击一次,然后按 Enter。再次在这里,然后再次按 Enter。现在我定义了三个行程。实际上,它们还没有显示在那个位置。我还没有定义任何停靠点。所以让我们下一步做这个。我们进入停靠点模式,按字母 A。现在我们必须为我们想要选择停靠点的汽车定义。在这种情况下,很简单。我们没有很多,所以我们可以直接在下拉菜单中选择它们。现在让它们停下来。沿着路线在这里的某个地方,持续 3600 秒。所以让它们成为交通的真正麻烦。我按 Enter,它在那里。现在为另一辆车,为这个方向的第二辆车,让我们也创建一个停靠点。实际上,我甚至不需要按 Enter,点击就够了。这里还有一个。让我们检查这些停靠点,确保它们都具有正确的属性。是的,3000。嗯,660 在这一点上并不重要。这个也是。这个,我仍然需要改为 3600。好的。所以我发现这些停靠点间距太近了。所以让我们用移动模式稍微移动一下它们。我只是拖动那些停靠点,给超车的汽车更多的空间。然后当然,我必须将其保存为需求。现在让我们看看,我不保存这个。我使用我事先保存的文件。让我们直接进入新的教程文件,看看模拟中的样子。好的。首先,让我们做一个模拟步骤,看看那些汽车出现。我可以点击这个按钮。我也可以按键盘上的 D 键来做单个步骤。正如您所看到的,这里有两辆汽车。两辆向北方向,一辆向南方向。我可以点击它们,显示它们的路线,然后我会发现它们必须停 3600 秒。现在让我们看看进来的交通。让我们再次让车辆变大。好了。所以您可以看到汽车必须在这里穿行。如果对面有车过来,它们必须等待。但我猜这还不够刺激,因为那仍然只是随机交通。我们真的想看看大量交通时会发生什么。所以让我们使用我们之前定义的流的另一个配置。再次,让汽车变大。让我们开始。所以现在这里我们有这些,这波大车流向上移动。它们可能认为在这里行驶是个好主意。但正如您所看到的,每当有车从对面过来时,队列就会堆积起来。所以它们必须等待。现在,即使是这些交通也必须在这里等待,否则就会完全堵塞。然后在某个时刻,蓝色汽车决定最好走另一条路线,这是 SUMO 中所有具有不受限制路线的行程会自动做出的决定。好的,关于逆向行驶就这么多。

人行横道 (Pedestrian Crossing)#

然后进入下一个主题,人行横道。现在,在向导中,我们本可以只激活行人交通类型。我们就会得到一个为人行模拟准备好的网络。但有时了解如何从头开始构建东西是很好的。这就是我现在要向您展示的。所以在网络中,让我们打开一个网络... 另一种打开网络的方法,当然。让我们看看我们最喜欢的路口,以及我们将这个路口变成适合行人通行所需的所有步骤。好的,那么我们要添加的是人行道,因为我们的行人必须在某个地方行走。我将进入选择模式,我将在这里画一个大矩形。现在我选择了几个东西,路口和边缘。但当我右键单击其中一个选定的边缘时,我可以对所有选定的边缘执行操作。所以我将添加一个类型为人行道 (sidewalk) 的限制车道。添加了八条人行道。现在我按 Esc 取消选择,我按 F5 重新计算几何形状。所以现在行人在人行横道附近有地方行走了。这有一个重要的副作用。它不仅创建了专供行人使用的车道。当我在这里点击,检查模式,当我点击这里时,我发现只有行人被允许在这里。这是唯一的绿色勾选框。如果我点击这里,我会发现行人是被禁止的。所以这是禁止框。与那些只禁止轨道交通和船只但仍然允许行人的其他道路网络边缘形成对比。这种道路网络是共享空间模拟。但在这里,我们不想要共享空间,我们想要一个真正的过街处,行人必须等待然后通过。好的,所以我们有人行道,现在让我们做人行横道本身。这是通过 R 激活的过街模式,我们点击路口,现在我们可以通过选择它们并按 Enter 来添加一个穿过这些边缘的大过街处,但我们不这样做,我们想要小岛,所以让我们点击每个边缘和转弯,按 Enter 来创建过街处,就这样,四周都有过街处,如果我们在 sumo-gui 中打开它,它就是这样的。好的,下一步是添加行人交通,所以我们再次进入需求模式,然后进入行人模式,您已经熟悉流的概念,所以现在让我们为行人创建这个流,让它们从这里走到那里,再从这里走到那里,我们可以将其保存为需求,现在让我们在模拟中看看这个。我们有什么?我们有所有人行道,让我们把模拟放慢一点,我在这里做的是改变了可视化,让行人显示为小圆圈,因为这样它们有很好的可见性,如果您仔细看,我加载了我事先定义的文件,因为突然有交通穿过两次,从这里到那里,这有点更有趣,当然您也可以通过选择其他目标来做到这一点,行人有很多潜在的路线可以选择,它们不受任何特定方向的约束,它们可以使用所有方向的所有人行道。这就是行人模拟。

现在,在我们时间用完之前,让我们谈谈更高级的内容,让我们谈谈寻找停车位的交通。现在,我们的交通进入模拟,然后它们基本上在最后的边缘消失了,要么在网络的边界,要么在网络的某个地方,这次我们想要不同的东西:我们希望它们都在行程结束时找到一个停车位。所以我们需要三样东西:我们需要定义基础设施(停车区),当然我们可以在 netedit 中手动定义这些,但今天我将向您展示一个完全自动执行此操作的管道。所以我们需要网络中的停车区。接下来我们需要的是计划的改变。汽车必须在路线结束时停车,我们也可以在 netedit 中添加这些,但在这里我将向您展示如何自动执行此操作。我们还需要最后一样东西来进行停车搜索:我们需要关于该区域替代停车区存在的信息。所以把它们想象成那些小停车引导标志。有时它只是一个写着“停车由此”的标志,有时它是一个真实的信息标志,有一个数字显示屏,显示目的地停车区的当前占用情况。您可以定义其中任何一种。今天我们将只使用那些指示“这边有停车”的标志。所以汽车必须猜测占用情况。所有这些都是通过批处理文件中的三个脚本完成的,我将快速介绍这些脚本的选项和含义。第一个脚本为整个网络生成停车区 (generateParkingAreas.py)。所以基本上在这里,它向几乎每个边缘添加了一个具有停车容量的停车区。我们还可以在那里添加一些随机化。我们找到输出文件。这将保存停车区 (parking.add.xml)。它定义了每个区域具有随机容量,即使容量降至零,我们也保留它。所以停车区的容量从 1 到更大的数字不等。我们不要在高速公路或高速公路匝道上设置任何停车区。那将是罪过。好的。所以第二个脚本,它在每个行程的末尾添加停靠点 (addStops2Routes.py)。同样,它加载一个网络和一个需求文件。这些都是随机的乘客行程。它还加载停车区,并说,好吧,不要停在任何地方,而是停在停车区,持续一小时。最后,有一个脚本生成连接性或可见性 (generateParkingAreaRerouters.py),它也需要网络、停车区、一个输出文件,在这种情况下,它说,好吧,让我们拥有可见性,至少对于道路的另一边。向一个方向行驶时,您可以看到道路另一边的停车区是否被占用。让我们在四公里的范围内寻找替代方案。这有点极端,但您稍后会明白我们为什么需要这个。所有这些都捆绑在教程最后部分的这个批处理文件中。所以让我们快速运行这个。它运行所有这些阶段。然后我们可以看看我们的模拟。那么我们在这里看到了什么?我们看到了有趣的颜色。我按道路上的空闲停车位数量给道路、街道或边缘着色。所以让我们在这里放一个图例。所以在...之间,最多可能 20 或 40 个停车位,有些地方甚至更多。所以让我们运行模拟。这次我们有我们的汽车,我将它们显示为圆圈,它们正在网络中行驶,它们打算做什么?嗯,让我们看看其中一辆汽车,不是高速公路上的,而是道路上的。让我们显示路线。所以这辆车想在那里停 3600 秒。嗯,那么让我们跟随这辆车。我将按住 Shift 单击汽车或其路线,我进入了跟踪模式。所以让我们跟踪它要去哪里。嗯,它确实找到了一个停车位,就是这样。要停止跟踪汽车,我可以在这里右键单击并选择“停止跟踪”,或者我可以双击,现在我又自由了。但让我们不再显示这条路线。让我们让模拟运行更长一点,让停车区填满。正如您所看到的,颜色发生了变化。当边缘上没有停车容量时,它们会变成灰色。所以现在让我们跟踪另一辆汽车,它正在拼命寻找停车位。跟踪它。好的。所以让我们看看它是如何进行的。正如您所看到的,这里有一些跳跃。所以它到达了一个没有停车位的地方,它选择了一个替代方案,然后最终找到了一个。所以 SUMO 的停车部分提供了大量选项来配置这些汽车实际选择替代方案的方式。最后,当我们运行足够长的时间时,实际上所有的汽车都找到了停车位。如果我们想知道它们花了多长时间,嗯,我们可以按它们更改路线的次数重新为它们着色。正如我们所看到的,有些汽车尝试了很多次才做到。其中一些实际上还在走,还在寻找。但最终,每个人都找到了自己的位置。好的。这就是我今天想向您展示的全部内容。我们将休息一下。然后我们将准备好进行“有问必答”环节,总结一下,我使用 osmWebWizard 快速入门,不要忘记阅读文档,报告您发现的任何错误,请分享您的场景和结果(我们非常乐意您这样做)。我们始终期待与希望与我们合作项目的人交谈。谢谢您的关注!

其他会议教程#

请查看我们的其他会议教程,此处