sumo搭建仿真环境(四)

在本教程中,我们将使用 netedit 构建一个简单的圆形网络,并使用路由器使车辆绕圈行驶。所有定义文件均可在 <SUMO_HOME>/docs/tutorial/circles 目录中找到。

本教程可仅使用 netedit 完成,也可通过编写 XML 文件自行生成需求数据。下面将对这两种方法进行说明。

我们两种方法都试一遍。

使用 XML 文件

创建网络

不建议使用 XML 文件构建网络,因此我们将使用 netedit 来完成此步骤。首先打开 netedit,创建边缘以形成闭合回路。按 Ctrl-N 键创建新网络,然后按 e 键进入边缘编辑模式。现在创建一个由边缘组成的闭合环路(可以考虑在编辑模式选择右侧选中 “链”,如图)。
创建好后如图:
Alt
结果应大致如图所示。重要的是圆形。现在将网络保存到一个空目录下(Ctrl-Shift-S)(我们将用 baseDir 来指代该目录)。使用 circles.net.xml 作为创建的网络文件名。

创建车辆并运行 SUMO

在 baseDir 中创建两个空文本文件,分别称为 circles.rou.xml 和 circles.sumocfg。这些文件将定义我们的车辆和运行配置。
首先,我们编辑 circles.rou.xml,定义由五辆标准客车组成的车辆流。文件内容如下:

<routes>
   <vType id="car" type="passenger" length="5" accel="3.5" decel="2.2" sigma="1.0"/>
   <flow id="carflow" type="car" beg="0" end="0" number="5"/>
</routes>

由于直接粘贴官网上的代码,有的字符可能会出现问题,因此我们手动写入代码是最为保险的方式,虽然很慢。同时要注意不要打错字。
有关如何定义流量和 vType 的进一步解释,请参阅相应的 Wiki 页面:流量定义和车辆类型。
给出链接如下:
flow:
https://sumo.dlr.de/docs/Demand/Shortest_or_Optimal_Path_Routing.html#flow_definitions
vType:
https://sumo.dlr.de/docs/Definition_of_Vehicles%2C_Vehicle_Types%2C_and_Routes.html#vehicle_types
为了在 SUMO 中使用路由文件和生成的网络文件,我们需要编辑配置文件 circles.sumocfg,告诉 SUMO 它应该在哪里查找车辆和网络定义.
首先,我们编辑 circles.rou.xml,定义由五辆标准客车组成的车辆流。文件内容如下:

<configuration>
    <input>
       <net-file value="circles.net.xml"/>
       <route-files value="circles.rou.xml"/>
    </input>
</configuration>

现在,让我们尝试用刚刚创建的配置启动 sumo。为此,您可以双击配置文件 circles.sumocfg(在 Windows 下,如果您是使用默认设置安装的),或者在终端中切换到 baseDir,然后在其中输入 sumo -c circles.sumocfg,启动 sumo(带图形用户界面)(如果无法启动 sumo,您可能需要在 PATH 中添加 SUMO/bin 目录,或者设置环境变量 SUMO_HOME(方法)。
(注意:如果你的sumo-gui显示没有任何名为’xxx’的选项,代表你这个文件可能有一些无法识别的中文空格或者拼写错误等。)
现在应该显示如下报错:
Alt
首次尝试运行模拟

能运行吗?没有。

让我们看看图形用户界面底部的 “消息窗口”(见上图),看看到底是哪里出了问题(顺便说一句:"消息窗口 "通常是设置模拟时非常有用的信息资源,如果遇到问题,可以先看看它)。

它显示Error:流量 "carflow "的路径没有边。这意味着 SUMO 不知道我们在 circles.rou.xml 中声明的车流的车辆应该从哪里移动到哪里。要解决这个问题,我们需要添加 to 和 from 属性,并为车流提供相应的 edge-ids。

可以在 netedit 中检查和修改 edge-ids:打开网络文件 circles.net.xml,按 i 键进入检查模式。左键单击任意一条边,将其重命名为 edge1(见下图)。左键单击另一条边,将其重命名为 edge2。然后保存网络 (Ctrl-S)。
Alt
在 netedit 中重命名边缘

现在,我们在 circles.rou.xml 中的流程中添加 from-edge 和 to-edge:

 ...
    <flow id="carflow" type="car" beg="0" end="0" number="5" from="edge1" to="edge2"/>
 ...

让我们再次运行 SUMO。窗口现在应该显示您之前在 netedit 中创建的网络(见下图),您可以点击播放按钮()或步骤按钮()开始仿真。如果使用 ,请务必调整连续仿真步骤之间的动画延迟时间值("Delay (ms): "字段,见图)。否则,SUMO 将以最快的速度运行模拟,您可能什么也看不到。(请注意,图中使用的是工具栏 "表示法 "下拉菜单中的 "真实世界 "样式)。

运行时状态如下:
Alt
可以看到有黄色小车在移动。

环形改道

现在,让我们让车辆在轨道上反复绕圈行驶。为此,我们将创建一个路由器。

由于在 SUMO 中,附加元素不被视为网络元素,因此我们必须在一个单独的文件(“附加文件”)中指定它们。在 baseDir 中创建并打开一个文件 circles.add.xml,并添加以下 xml 代码(详见重路由器/指定新目的地):

<additionals>
    <rerouter id="rerouter_0" edges="edge1">
        <interval end="1e9">
            <destProbReroute id="edge2"/>
        </interval>
    </rerouter>
    <rerouter id="rerouter_1" edges="edge2">
        <interval end="1e9">
            <destProbReroute id="edge1"/>
        </interval>
    </rerouter>
</additionals>

然后,我们必须在配置 circles.sumocfg 中添加一行,告诉 SUMO 将路由器纳入模拟。在 标签中添加一个子标签:

        <additional-files value="circles.add.xml"/>

这将为我们的网络添加两个(目的地)重路由器,使车辆绕圈行驶,直到给定的结束时间(即一亿秒过去)。实际上,每个重路由器都会更新进入其边缘(由边缘属性指定)的每辆车的目的地,并将其设置为 destProbReroute 元素 id 属性中指定的边缘。因此,只要一辆车进入 edge1(其当前目的地),其目的地就会更新为 edge2,反之亦然,当进入 edge2 时,它将被重新路由到 edge1,从而沿着循环路线行驶。
此时重新启动sumo-gui。开启仿真。
可以看到成功仿真的小车在循环行驶。
Alt

使用 netedit 的步骤(另一种方式)

创建网络

此处省略,因为之前我们已经成功搭建了网络。

创建车辆并运行 SUMO

首先,我们必须按 F3 键将模式更改为 “需求”,然后按 r 键切换到 "创建路径 "模式。我们可以选择通过点击 "连续边 "或 "非连续边 "来创建路径,后者将在给出的非连续边之间找到最短路径。在本次测试中,我们将选择最后一个选项。我们可以通过点击 id 框来更改路径 “id”。在本例中,我们将保留默认 "id "route_0。

首先,我们必须点击路由的第一条边(选取上边中的一条),然后点击路由的最后一条边(选取下边中的一条)。连接两条边的橙色路径就创建好了。要创建路径,我们必须按下 "创建路径 "按钮或回车键。可以使用 "中止创建 "按钮或按下 ESC 键中止路径创建。
创建示例图如下:
Alt
使用 netedit 创建路由。

现在,我们必须创建一个沿该路线行驶的车辆流。为此,我们按 v 进入车辆模式,然后在车辆列表中选择 “flow (over route)”。id"(flow_0)和 “begin”(0)保留默认值。如果我们滚动列表,会发现更多流量属性。在本例中,我们希望模拟 5 辆相继驶过的车辆,因此将 0 设置为 “结束”,将 5 设置为 “编号”。要创建流量,我们只需点击已创建的路线,一辆车就会出现在路线的起点。

最后一步,我们必须按下 Ctrl-Shift-D 保存创建的所有需求元素(路线和流程),并输入文件名,本例中为 circles.rou.xml。
这里要注意的地方有两个:
Alt
选择"flow (over route)"
还有一个是流量属性需要修改,选择end-number模式,修改响应的参数:
Alt
此时需要重新创建sumocfg,内容如下:

<?xml version="1.0" encoding="iso-8859-1"?>
<configuration xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="https://sumo.dlr.de/xsd/sumoConfiguration.xsd">
    <input>
        <net-file value="circles.net.xml"/>
        <route-files value="circles.rou.xml"/>
    </input>
</configuration>

然后点击编辑模式,选择在sumo-gui 内开启,修改参数后可以看到小车运行情况如下:
Alt

环形改道

让我们回到 netedit,添加一个路由器。首先切换到网络模式(F2),然后按 a 键进入附加编辑模式。从左侧的 "附加元素 "下拉菜单中选择路由器。按照下图顺序进行修改。我们需要添加两个路由器:
Alt

第一个路由器将放置在路线的最后一条边上,其 destProbReroute 元素指向路线的第一条边。因此,当车辆到达最后一条边缘时,它们不会消失,而是会继续行驶到第一条边缘,完成循环。
第二个重路由器将位于路线的第一条边缘,其 destProbReroute 元素指向最后一条边缘。因此,当车辆到达第一个边缘时,它们将被重定向到路线的最后一个边缘,也就是第一个路由器所在的位置,这样车辆就会一次又一次地绕圈行驶。
其实说实话,我按照教程上的做法并没有做出来,但是我通过修改add.xml中的参数实现了循环行驶。
add.xml内容:

<?xml version="1.0" encoding="UTF-8"?>

<!-- generated on 2023-12-08 12:21:04 by Eclipse SUMO netedit Version v1_19_0+0256-2a969a2cc85
-->

<additional xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/additional_file.xsd">
    <!-- Other additionals -->
    <rerouter id="rr_0" edges="E10" pos="191.00,-122.12">
        <interval begin="0.00" end="3600.00">
            <destProbReroute id="E14" probability="1.00"/>
        </interval>
    </rerouter>
    <rerouter id="rr_2" edges="E14" pos="17.59,15.80">
        <interval begin="0.00" end="3600.00">
            <destProbReroute id="E10" probability="1.00"/>
        </interval>
    </rerouter>
</additional>

我修改了destProbReroute的edge,使他们能够循环往复行驶。效果如图:
Alt
让我们总结一下这章教程的内容:
我们学会了从头创建网络,并且学会了定义四个所需文件,net.xml,rou.xml,add.xml,sumocfg。
我们通过两种方式添加,一种是通过xml文件,一种是netedit。

  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用SUMO创建仿真场景,您可以按照以下步骤进行操作: 1. 创建路网:使用SUMO的网络编辑器(netedit)来创建路网。您可以打开netedit界面并绘制道路网络,添加交叉口、车道、车辆和行人通行规则等。您还可以导入现有的地图数据或使用OpenStreetMap等工具来创建路网。 2. 定义车辆流量:在路网中添加车辆流量是仿真过程中的关键步骤之一。您可以使用SUMO的流量生成器(flowgen)来定义车辆的出发点、目的地、速度和车辆类型等参数。您还可以根据实际情况设置车辆流量的分布模型和行驶行为。 3. 配置仿真参数:在进行仿真之前,您需要配置一些仿真参数,如仿真时间、时间步长、输出文件等。这些参数可以在SUMO的配置文件(.sumocfg)中进行设置。您还可以使用配置文件指定要加载的车辆和路网文件。 4. 运行仿真:一切准备就绪后,您可以运行SUMO进行仿真。通过命令行或SUMO GUI界面,您可以加载配置文件,并启动仿真过程。SUMO会模拟车辆在路网中的移动,并生成相关的仿真输出文件。 5. 分析仿真结果:在仿真完成后,您可以使用SUMO提供的工具和库来分析仿真结果。您可以使用SUMO GUI界面来可视化车辆移动、拥堵情况等。您还可以使用SUMO的输出文件(如xml、csv等)进行进一步的数据分析和处理。 请注意,这只是一个简要的概述,具体的操作和配置可能因您的实际需求和环境而有所不同。您可以参考SUMO的官方文档和示例来获得更详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值