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 表示这是内部边,用于交叉口逻辑,不是普通道路段。 |
子元素:
<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>
表示从J0
到J1
的道路段:- ID 为
E0
。 - 包含一条车道(
E0_0
),最大速度为 13.89 m/s,长度为 78.21 米。
- ID 为
2. <junction>
作用:
<junction>
表示交叉点(junction),是道路段(<edge>
)之间的连接点。- 它是网络中的节点,所有
<edge>
的from
和to
都必须引用某个<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
)。
- ID 为
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> |
表示道路段 | id 、from 、to 、priority |
定义路网中的道路,连接两个节点(交叉点)。 |
<junction> |
表示交叉点或节点 | id 、type 、x /y 、incLanes 、shape |
定义道路的交汇点,连接多个边。 |
<connection> |
表示道路段之间的连接关系 | from 、to 、fromLane 、toLane 、via |
定义从一个边的车道到另一个边的车道的路径和转向逻辑。 |
通过这三个元素的组合,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.xml
和 rou.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
的连接关系自动找到一条从E0
到E1
的路径。
- 定义了一辆车(
- 定义车辆如何利用路网中的连接关系来选择行驶方向,即:
-
重点:行驶方向
- 在没有明确的
route
或trip
定义时,车辆无法知道行驶路径,因为它需要明确的指令来选择方向。
- 在没有明确的
两者的关系:连接 vs 方向
文件 | 定义内容 | 重点 |
---|---|---|
net.xml |
路网结构、道路和交叉口的连接关系 | 定义网络连接关系(哪里能到哪里 )。车辆依赖它找到可能的路径。 |
rou.xml |
交通流、车辆路径和行驶方向 | 定义行驶方向(车辆从哪里来,去哪里 )。依赖 net.xml 中的连接实现。 |
关系说明:
net.xml
提供所有可能的连接关系,为车辆提供基础路网。- 例如,在
net.xml
中,E0
和E1
是相连的。
- 例如,在
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
(从J0
到J1
)和E1
(从J1
到J2
)这两条边。 - 通过
<connection>
定义了E0
和E1
的连接关系。 - 仿真中,车辆可以从
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_0
(index=0
):- 沿
shape
定义的轨迹,无偏移。
- 沿
E1_1
(index=1
):- 相对于
shape
向左偏移 3.2 米。
- 相对于
视觉效果:
- SUMO 会在图形界面中正确地将车道分开,而不会重叠。
3. 形状的起始位置 vs 偏移
-
shape
定义的坐标:- 是整条道路中心线的几何路径。
- 它不会定义每条车道的实际起始位置,车道的几何路径由
shape
和index
结合计算。
-
车道的起始坐标:
- SUMO 自动根据
shape
和偏移量计算车道的实际位置,确保每条车道都有独立的几何中心线。
- SUMO 自动根据
4. 何时需要不同的 shape
?
如果车道的形状在几何上确实不同(例如,转弯车道或交叉口分流),需要定义不同的 shape
:
- 例如,在交叉口中:
- 左转车道和直行车道的轨迹可能不同。
- 此时可以为每条车道定义独立的
shape
,以反映其不同的几何形状。
5. 总结
- 即使
shape
相同,不同车道通过索引偏移逻辑分布开,不会重叠。 shape
只是道路中心线的定义,而车道的几何路径还取决于车道宽度和索引偏移。- 如果需要明确区分车道几何路径,可以为每条车道定义不同的
shape
,但这通常只在交叉口或特殊场景中需要。