sumo搭建仿真环境(五)

本文介绍了如何使用SUMO工具在netedit中设置交通竞赛,包括创建特殊车道、交通信号灯、定义车辆类型和车流,以及设置模拟参数和交通信号灯以保证公平竞赛。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本教程为不同的交通模式设置了一个竞赛(集体 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(即直到模拟运行结束)。现在再次运行模拟,看看自行车是否超过了汽车。看到了吗?我们都应该多骑自行车!
在这里插入图片描述
在这里插入图片描述
注意:别忘记点存储!!!!!
而且
在这里可以看到所有的交通工具都整齐的等在红灯这里。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值