sumo搭建仿真环境(五)

本教程为不同的交通模式设置了一个竞赛(集体 100 米冲刺)。您将学习如何在 netedit 中创建特殊车道和(非常简单的)交通信号灯,使用不同的车辆类来定义车辆类型,并为不同类型的车辆创建车流。所有文件也可在 <SUMO_HOME>/docs/tutorial/sumolympics 目录中找到。

本教程是对 PTV 小组设计的 VISSIM 场景的重构。

创建网络

打开 netedit 并创建一个新网络,按 e 进入边缘创建模式,然后在编辑区的两个不同位置单击,添加一条边缘。切换到检查模式(按 i 键),点击边的起点(第一次点击的位置)。现在在左侧检查面板中标有 pos 的文本框中输入 0,0。对边缘的终点也做同样的操作,将其位置设置为 1000,0。现在将网络保存为 sumolympics.net.xml(按 Ctrl+Shift-S 键)。
现在,我们有了一条长路,这将是我们比赛的舞台。参加比赛的将是各种交通工具,即公共汽车、有轨电车、自行车、客车和脚。它们应该并排行驶在不同的车道上。因此,我们必须为每种交通方式添加车道。为此,请右键单击边缘,然后将鼠标悬停在右键菜单中的 "添加受限车道 "上。这将显示创建专用车道的三个选项:人行道自行车道公交车道。为每种类型添加一条车道。
Alt
要创建有轨电车,我们可以点击同一上下文菜单中的 "复制车道 "来添加一条新车道。对于该车道,我们必须将允许的车辆类别限制为有轨电车。为此,首先取消选中工具栏中编辑模式下拉菜单右侧的 “选择边缘 “框(模式仍应设置为”(i)检查”)。然后点击新创建的车道和检查面板中的 "允许 "按钮。
如下图所示:
Alt
这将打开一个对话框,其中包含所有可能车辆类别的复选框。取消除 "rail_urban "以外的所有选中,然后点击 “接受”。现在编辑剩余车道的允许范围(目前允许所有车辆类别使用),并将其保留给 “乘客” 类别(即客车)。此外,我们还需要修改自行车道的宽度,以便在接下来的操作中允许超车。为此,请选择上述自行车道,然后在检查模式下将左侧面板中的宽度改为 2.1 米

切换到需求模式后可以对车道单独进行选择

可以选择对net.xml文件进行修改。文件主要内容如下:

<net version="1.16" junctionCornerDetail="5" limitTurnSpeed="5.50" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">

    <location netOffset="0.00,0.00" convBoundary="0.00,0.00,1000.00,0.00" origBoundary="10000000000.00,10000000000.00,-10000000000.00,-10000000000.00" projParameter="!"/>

    <edge id="E0" from="J0" to="J1" priority="-1">
        <lane id="E0_0" index="0" allow="pedestrian" speed="13.89" length="1000.00" width="2.00" shape="0.00,-11.60 1000.00,-11.60"/>
        <lane id="E0_1" index="1" allow="bicycle" speed="13.89" length="1000.00" width="2.10" shape="0.00,-10.10 1000.00,-10.10"/>
        <lane id="E0_2" index="2" allow="bus" speed="13.89" length="1000.00" shape="0.00,-8.00 1000.00,-8.00"/>
        <lane id="E0_3" index="3" allow="pedestrian" speed="13.89" length="1000.00" shape="0.00,-4.80 1000.00,-4.80"/>
        <lane id="E0_4" index="4" allow="rail_urban" speed="13.89" length="1000.00" shape="0.00,-1.60 1000.00,-1.60"/>
    </edge>

    <junction id="J0" type="dead_end" x="0.00" y="0.00" incLanes="" intLanes="" shape="0.00,0.00 0.00,-12.60"/>
    <junction id="J1" type="dead_end" x="1000.00" y="0.00" incLanes="E0_0 E0_1 E0_2 E0_3 E0_4" intLanes="" shape="1000.00,-12.60 1000.00,0.00"/>

</net>

在车道的allow参数进行修改即可。创建好的图像如下:

在这里插入图片描述

现在,让我们分割边缘,为竞争对手创建一个起点:右键单击边缘上的任意位置,从右键菜单中选择 “在此处分割边缘”。然后点击创建的节点(在 SUMO 术语中,这已经是一个交点)。在 pos 字段中将其 x 坐标设为 900,y 坐标设为 0,就像上面创建边缘时所做的那样。实际上,我们已经为选手创建了一条 100 米长的跑道,并为每种比赛模式创建了一个 900 米长的保持区域。现在再次选中 "选择边缘 "复选框,并将两条边缘重命名为 "起点 "和 “终点”(在检查面板中)。保存网络 (Ctrl-S)。

确定竞争车辆(类型和流量)

下一步,我们将定义竞争车辆类型以及这些车辆的若干流向。

使用xml文件

打开名为 sumolympics.rou.xml 的新文件,并插入以下车辆类型定义:

<routes>
    <vType id="pkw" length="5" maxSpeed="50" accel="2.6" decel="4.5" sigma="0.2" speedDev="0.2" vClass="passenger"/>
    <vType id="bus" length="15" maxSpeed="30" accel="1.2" decel="2.5" sigma="0.1" speedDev="0.1" vClass="bus"/>
    <vType id="tram" length="40" maxSpeed="13" accel="0.8" decel="0.5" sigma="0.1" speedDev="0.1" vClass="trail_urban"/>
    <vType id="bike" length="1.8" width="0.8" maxSpeed="7.5" accel="0.8" decel="1.5" sigma="0.5" speedDev="0.5" vClass="bicycle"/>
    <vType id="pedestrian" length="0.3" width="0.5" maxSpeed="2.0" accel="0.2" decel="1.5" sigma="0.2" speedDev="0.2" vClass="pedestrian"/>
</routes>

有关这些定义的详细信息,请参阅车辆类型属性说明,以及本页有关人员的内容。

对于每种车辆类型,我们通过在 vType 定义下方( 元素内!)添加以下 <flow …/> 元素来安排和定位车辆流:

    <flow id="pkw" type="pkw" from="beg" to="end" begin="0" end="0" number="66" departPos="last"/>
    <flow id="bus" type="bus" from="beg" to="end" begin="0" end="0" number="5" departPos="last"/>
    <flow id="tram" type="tram" from="beg" to="end" begin="0" end="0" number="2" departPos="last"/>
    <flow id="bike" type="bike" from="beg" to="end" begin="0" end="0" number="100" departPos="last"/>

    <personFlow id="pedestrian" type="pedestrian" begin="0" end="0" number="100" departPos="-30">
        <walk from="beg" to="end" arrivalPos="-0.1"/>
    </personFlow>

请注意,行人流(由上面的 personFlow 元素表示)的语法略有不同,原因是行人可以步行或乘车(例如使用公共交通工具),这些不同的活动需要传达给 sumo。有关流属性含义的详细信息,请参阅 "流定义和人员流 "部分。

使用netedit

我们通过将定义写入 XML 文件,"手工 "创建了车辆类型和车辆流,但这些操作可以直接在 netedit 中进行(和可视化)!为此,您需要选择 "需求 "模式,而不是上面创建网络时使用的 "网络 "模式。要创建新的车辆类型,请使用 “创建类型模式”。您可以直接在左侧面板中修改主要参数,其他参数可在点击 "打开属性编辑器 "后修改,如图所示:
在这里插入图片描述
现在要创建机动车流,您需要使用 “创建车辆模式”。然后在左侧面板的顶部,您可以使用不同的选项创建单个车辆或车流。在这里选择 “流动(从边缘到边缘)”。然后,您可以使用特定的车辆类型,更改出发点属性和车辆数量。然后直接在网络上选择起点和终点边缘,一切设置完成后,点击左侧面板上的 "完成路线创建 "即可创建路线和车流。

注意在这里选好车辆的类型,然后选择好路径,按下Enter键就可以看到创建了载体。
在这里插入图片描述

青色代表起点边缘,浅绿色代表所选的终点边缘。将在流程的起始位置添加一个小载体,使其在图形用户界面中具体化。您还可以使用 netedit 主菜单中的 "查找 > 车辆 "来检查流程是否已创建。人员流的创建方式与此类似,但您需要使用专用的 “创建人员模式”。

首次模拟

最后,为准备模拟,创建一个 SUMO 配置文件(命名为 sumolympics.sumocfg):

<configuration>
    <input>
        <net-file value="sumolympics.net.xml"/>
        <route-file value="sumolympics.rou.xml">
    </input>
    <processing>
     <lateral-resolution value="1." />
    </processing>
</configuration>

在这里,我们给处理参数 "横向分辨率 "设置了一个与子车道宽度(米)相对应的值,以实现自行车手利用整个车道宽度相互超车的更真实行为(请参阅子车道模型和自行车模拟)。双击配置文件 sumolympics.sumocfg(Windows)、打开 SUMO GUI 或在终端运行 sumo-gui -c sumolympics.sumocfg,开始模拟。将步进延迟调整为 100 毫秒,然后按下运行按钮()。
运行效果如下:

在这里插入图片描述

使用交通信号灯定义启动信号

要实现公平、完整的比赛,还需要做一件事:应允许所有参赛者在刮线前自由摆放(自行车手被排成一排,尽管他们可以通过利用整个车道宽度更密集地分组来达到更好的效果)。
首先,我们使用 netedit 在边缘 "begin "和 "end "之间的交界处创建一个红绿灯:按 t 键进入红绿灯编辑模式。点击交界处,然后点击左侧面板中的 “创建 TLS”。在下方的 "阶段 "标签下,输入 "rrrrrr "表示第一阶段("r "表示红色),并将其持续时间设置为 100(秒)。这样就有足够的时间让骑自行车的人更密集地聚集在一起。在第二阶段输入 “GGGGG”(是的,"G "表示绿色),并将其持续时间设置为 1000(即直到模拟运行结束)。现在再次运行模拟,看看自行车是否超过了汽车。看到了吗?我们都应该多骑自行车!
在这里插入图片描述
在这里插入图片描述
注意:别忘记点存储!!!!!
而且
在这里可以看到所有的交通工具都整齐的等在红灯这里。

在这里插入图片描述

  • 21
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
要使用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、付费专栏及课程。

余额充值