Sumo-hello world对应的gui及文件操作

net.xml junctions + edge

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

<!-- generated on 2024-11-20 15:25:06 by Eclipse SUMO netedit Version 1.21.0
<neteditConfiguration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/neteditConfiguration.xsd">

    <input>
        <sumo-net-file value="C:\Program Files (x86)\Eclipse\Sumo\tools\learn\2\hello.net.xml"/>
    </input>

    <output>
        <output-file value="C:\Program Files (x86)\Eclipse\Sumo\tools\learn\2\hello.net.xml"/>
    </output>

    <processing>
        <offset.disable-normalization value="true"/>
    </processing>

    <junctions>
        <no-turnarounds value="true"/>
    </junctions>

    <netedit>
        <new-network value="false"/>
    </netedit>

</neteditConfiguration>
-->

<net version="1.20" 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="-90.11,-10.19,49.47,23.03" origBoundary="10000000000.00,10000000000.00,-10000000000.00,-10000000000.00" projParameter="!"/>

    <edge id=":J1_0" function="internal">
        <lane id=":J1_0_0" index="0" speed="4.14" length="1.36" shape="-16.89,21.00 -16.55,21.10 -16.22,21.12 -15.89,21.07 -15.57,20.95"/>
    </edge>

    <edge id="E0" from="J0" to="J1" priority="-1">
        <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
    </edge>
    <edge id="E1" from="J1" to="J2" priority="-1">
        <lane id="E1_0" index="0" speed="13.89" length="72.09" shape="-15.57,20.95 48.75,-11.62"/>
    </edge>

    <junction id="J0" type="dead_end" x="-90.11" y="-6.54" incLanes="" intLanes="" shape="-90.11,-6.54 -88.92,-9.51"/>
    <junction id="J1" type="priority" x="-16.14" y="23.03" incLanes="E0_0" intLanes=":J1_0_0" shape="-14.85,22.37 -16.29,19.52 -17.48,22.49 -16.59,22.72 -16.15,22.73 -15.71,22.68 -15.28,22.56">
        <request index="0" response="0" foes="0" cont="0"/>
    </junction>
    <junction id="J2" type="dead_end" x="49.47" y="-10.19" incLanes="E1_0" intLanes="" shape="48.02,-13.04 49.47,-10.19"/>

    <connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0" dir="r" state="M"/>

    <connection from=":J1_0" to="E1" fromLane="0" toLane="0" dir="r" state="M"/>

</net>

以下是对 SUMO<edge><junction><connection> 元素的详细整理与说明:


1. <edge>

作用:

  • <edge> 表示道路段(edge),是交通网络中的基本单位。
  • 它连接两个节点(<junction>),并包含有关道路几何信息、车道信息以及流量规则。

核心属性:

属性名 数据类型 描述
id string 唯一标识符,用于标识这条道路段(如 E0)。
from string 起点节点的 ID(<junction> ID)。
to string 终点节点的 ID(<junction> ID)。
priority int 优先级(用于控制交叉口车辆流量优先级)。
function string 可选值,如 internal 表示这是内部边,用于交叉口逻辑,不是普通道路段。

子元素:

  1. <lane>:
    • 描述道路上的每一条车道的信息,包括速度限制、长度和形状等。
    • 关键属性:
      • id:车道的唯一标识符。
      • index:车道的编号(从右到左,从 0 开始)。
      • speed:车道的最大速度限制(单位:m/s)。
      • shape:车道的几何形状(由多个 x,y 坐标点连接)。

示例:

<edge id="E0" from="J0" to="J1" priority="1">
    <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
</edge>
  • <edge> 表示从 J0J1 的道路段:
    • ID 为 E0
    • 包含一条车道(E0_0),最大速度为 13.89 m/s,长度为 78.21 米。

2. <junction>

作用:

  • <junction> 表示交叉点(junction),是道路段(<edge>)之间的连接点。
  • 它是网络中的节点,所有 <edge>fromto 都必须引用某个 <junction>

核心属性:

属性名 数据类型 描述
id string 唯一标识符,用于标识交叉点。
type string 交叉点的类型:priority(优先交叉口)、traffic_light(信号灯交叉口)、dead_end(死路)。
x/y float 交叉点的中心坐标(以米为单位)。
incLanes string 进入交叉点的所有车道(以空格分隔的车道 ID 列表)。
intLanes string 交叉点内部的车道(内部边)。
shape string 交叉点的几何边界,由一组 x,y 坐标点定义。

子元素:

  • <request>:
    • 描述进入交叉点的优先权规则(例如,谁先通过)。
    • 常用于复杂交叉口的优先权或信号灯逻辑。

示例:

<junction id="J1" type="priority" x="-16.14" y="23.03" incLanes="E0_0" intLanes=":J1_0_0" shape="-14.85,22.37 -16.29,19.52">
    <request index="0" response="0" foes="0" cont="0"/>
</junction>
  • <junction> 表示一个优先交叉点:
    • ID 为 J1
    • 位置坐标为 x=-16.14, y=23.03
    • 包含一个进入车道(E0_0)和一个内部车道(:J1_0_0)。

3. <connection>

作用:

  • <connection> 表示道路段(edge)之间的连接关系,用于定义从一个边的某条车道到另一个边的某条车道的路径。
  • 是描述路网逻辑的关键,决定了车辆如何在网络中移动。

核心属性:

属性名 数据类型 描述
from string 来源边的 ID(<edge> ID)。
to string 目标边的 ID(<edge> ID)。
fromLane int 来源车道的索引(从右到左,从 0 开始)。
toLane int 目标车道的索引(从右到左,从 0 开始)。
via string 连接所经过的内部边(internal edge ID)。
dir string 转向方向(r 表示右转,l 表示左转,s 表示直行)。
state string 连接状态(通常用于信号灯控制,如 M 表示允许通行)。

示例:

<connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0" dir="r" state="M"/>
  • <connection> 表示:
    • E0 的第 0 车道连接到 E1 的第 0 车道。
    • 途经内部边 :J1_0_0
    • 转向方向为右转(dir="r")。
    • 状态为允许通行(state="M")。

总结对比:

元素 含义 关键属性 作用
<edge> 表示道路段 idfromtopriority 定义路网中的道路,连接两个节点(交叉点)。
<junction> 表示交叉点或节点 idtypex/yincLanesshape 定义道路的交汇点,连接多个边。
<connection> 表示道路段之间的连接关系 fromtofromLanetoLanevia 定义从一个边的车道到另一个边的车道的路径和转向逻辑。

通过这三个元素的组合,SUMO 能够完整定义路网的结构和逻辑,包括道路、交叉口以及车辆行驶路径的连接规则。

rou.xml

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

<!-- generated on 2024-11-20 16:33:40 by Eclipse SUMO netedit Version 1.21.0
-->

<routes xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/routes_file.xsd">
    <!-- Routes -->
    <route id="r_0" edges="E0 E1"/>
    <!-- Vehicles, persons and containers (sorted by depart) -->
    <vehicle id="v_0" depart="0.00" route="r_0"/>
    <vehicle id="v_1" depart="0.00" route="r_0"/>
    <vehicle id="v_2" depart="0.00" route="r_0"/>
    <vehicle id="v_3" depart="0.00" route="r_0"/>
    <vehicle id="v_4" depart="0.00" route="r_0"/>
    <vehicle id="v_5" depart="0.00" route="r_0"/>
    <vehicle id="v_6" depart="0.00" route="r_0"/>
    <vehicle id="v_7" depart="0.00" route="r_0"/>
    <vehicle id="v_8" depart="0.00" route="r_0"/>
    <vehicle id="v_9" depart="0.00" route="r_0"/>
    <vehicle id="v_10" depart="0.00" route="r_0"/>
</routes>

上面两个文件之间的区别

是的,你的理解非常准确!以下是更详细的阐述,进一步明确 net.xmlrou.xml 的区别与用途:


1. net.xml 的核心:定义连接关系

  • 功能:

    • net.xml 是用来定义整个交通网络的结构和连接关系的。
    • 它描述了路网中的物理元素(道路、交叉口)及其之间的连接逻辑,包括:
      • 哪些道路之间有连接。
      • 每条道路的车道数量、长度和速度限制。
      • 每个交叉口的几何形状、优先权规则或信号灯逻辑。
    • 它是整个交通仿真的基础,没有它就无法运行仿真。
  • 核心作用:

    • 定义了网络中所有道路的连接性,即:
      • 从哪里可以去到哪里
      • 车道如何连接,如从哪条车道到达哪条车道。
      • 交叉口的内部路径(例如通过 internal edges 实现转向的连接)。
  • 重点:连接关系

    • 例如:
      <connection from="E0" to="E1" fromLane="0" toLane="0" via=":J1_0_0"/>
      
      • 定义了 E0 的第 0 车道连接到 E1 的第 0 车道,通过交叉口内部边 :J1_0_0 实现。
    • 所有可能的连接关系都必须在 net.xml 中预定义,仿真中的车辆只能基于这些连接关系行驶。

2. rou.xml 的核心:定义行驶方向

  • 功能:

    • rou.xml 是用来定义交通流和行驶方向的。
    • 它描述了车辆如何在 net.xml 定义的网络中运行,包括:
      • 车辆的出发时间。
      • 车辆的起点和终点。
      • 车辆的行驶路线(由 edges 序列组成)。
  • 核心作用:

    • 定义车辆如何利用路网中的连接关系来选择行驶方向,即:
      • 车辆应该从哪里来,去到哪里。
      • 车辆在路网上行驶的具体路线是怎样的(通过哪些 edges)。
    • 例如:
      <trip id="t_0" depart="0.00" from="E0" to="E1"/>
      
      • 定义了一辆车(t_0),从 E0 出发,到达 E1
      • 系统会根据 net.xml 的连接关系自动找到一条从 E0E1 的路径。
  • 重点:行驶方向

    • 在没有明确的 routetrip 定义时,车辆无法知道行驶路径,因为它需要明确的指令来选择方向。

两者的关系:连接 vs 方向

文件 定义内容 重点
net.xml 路网结构、道路和交叉口的连接关系 定义网络连接关系哪里能到哪里)。车辆依赖它找到可能的路径。
rou.xml 交通流、车辆路径和行驶方向 定义行驶方向车辆从哪里来,去哪里)。依赖 net.xml 中的连接实现。

关系说明:

  • net.xml 提供所有可能的连接关系,为车辆提供基础路网。
    • 例如,在 net.xml 中,E0E1 是相连的。
  • rou.xml 定义具体的行驶路径,指示车辆如何利用这些连接。
    • 例如,在 rou.xml 中,车辆会选择从 E0 到达 E1

示例解析

1. net.xml 示例:定义连接

<edge id="E0" from="J0" to="J1" priority="1">
    <lane id="E0_0" index="0" speed="13.89" length="78.21" shape="-89.51,-8.02 -16.89,21.00"/>
</edge>
<edge id="E1" from="J1" to="J2" priority="1">
    <lane id="E1_0" index="0" speed="13.89" length="72.09" shape="-15.57,20.95 48.75,-11.62"/>
</edge>
<connection from="E0" to="E1" fromLane="0" toLane="0"/>
  • 描述内容:
    • 定义了 E0(从 J0J1)和 E1(从 J1J2)这两条边。
    • 通过 <connection> 定义了 E0E1 的连接关系。
    • 仿真中,车辆可以从 E0 的车道驶入 E1 的车道。

2. rou.xml 示例:定义行驶方向

<routes>
    <route id="r_0" edges="E0 E1"/>
    <trip id="t_0" depart="0.00" from="E0" to="E1"/>
</routes>
  • 描述内容:
    • 定义了 r_0 这条行驶路线,车辆从 E0 行驶到 E1
    • trip 定义了一辆车(t_0),出发时间为 0 秒,行驶路径为 E0 -> E1

总结:连接关系 vs 行驶方向

  • net.xml 是关于“基础设施”的文件:

    • 描述了所有道路和车道的连接关系,定义了车辆在网络中可能行驶的路径。
    • 仿真不会自动生成车辆的行驶路径。
  • rou.xml 是关于“车辆动态”的文件:

    • 定义了车辆如何使用这些连接关系,描述了行驶方向和交通流动态。
    • 它依赖于 net.xml 提供的连接信息。

因此,可以简单理解为:

  • net.xml 描述“连接关系”——哪里可以去哪里。
  • rou.xml 描述“行驶方向”——车辆从哪里来,去哪里,以及怎么走。

关于相同shape与不同shape的问题

SUMO 的 shape 定义了车道的中心线,而车道宽度和位置由车道索引(index)和 SUMO 的渲染逻辑决定,因此即使 shape 相同,车道也不会重合。

以下是详细解释:


1. shape 的作用

  • shape 定义了车道的中心线:

    • 它指定了一条曲线(由一组坐标点组成),表示车道的几何路径。
    • 所有车辆都沿着这条曲线的轨迹移动。
  • 车道的宽度由 SUMO 默认设置:

    • 在 SUMO 中,车道有默认宽度(通常为 3.2 米,可通过选项调整)。
    • 每条车道相对于中心线会偏移一定的距离,偏移量由车道的 index 和默认宽度决定。

2. 为什么不会重合?

即使 shape 相同,车道通过 车道索引(index 的偏移计算逻辑分布开来。

SUMO 的偏移逻辑:

  • 每个车道的中心线会以默认宽度 向左或向右偏移
  • 偏移量 = 车道宽度 × 车道索引
    • 车道索引 0 不偏移,沿 shape 直接绘制。
    • 车道索引 1 向左偏移一条车道宽度。
    • 车道索引 -1(如果有): 向右偏移一条车道宽度。

示例:

假设车道宽度为 3.2 米E1 有两个车道,shape 均为:

shape="-15.57,20.95 48.75,-11.62"
  • E1_0index=0):
    • 沿 shape 定义的轨迹,无偏移。
  • E1_1index=1):
    • 相对于 shape 向左偏移 3.2 米。

视觉效果:

  • SUMO 会在图形界面中正确地将车道分开,而不会重叠。

3. 形状的起始位置 vs 偏移

  • shape 定义的坐标:

    • 是整条道路中心线的几何路径。
    • 它不会定义每条车道的实际起始位置,车道的几何路径由 shapeindex 结合计算。
  • 车道的起始坐标:

    • SUMO 自动根据 shape 和偏移量计算车道的实际位置,确保每条车道都有独立的几何中心线。

4. 何时需要不同的 shape

如果车道的形状在几何上确实不同(例如,转弯车道或交叉口分流),需要定义不同的 shape

  • 例如,在交叉口中:
    • 左转车道和直行车道的轨迹可能不同。
  • 此时可以为每条车道定义独立的 shape,以反映其不同的几何形状。

5. 总结

  • 即使 shape 相同,不同车道通过索引偏移逻辑分布开,不会重叠。
  • shape 只是道路中心线的定义,而车道的几何路径还取决于车道宽度和索引偏移。
  • 如果需要明确区分车道几何路径,可以为每条车道定义不同的 shape,但这通常只在交叉口或特殊场景中需要。

tlLogic + request

posted @ 2024-11-21 01:27  GraphL  阅读(4)  评论(0编辑  收藏  举报