sumo学习——sumo的路网介绍

2 sumo路网

这里的记录的内容,并不以如何绘制或者如何建立一个路网体系为主,而是较为详细的介绍,在sumo中是如何定义路网格式的。这里所有的内容都是来自于sumo的软件说明翻译,其中部分夹杂着自己对于sumo软件的理解,可能存在一些纰漏,欢迎大家及时指正。


这是一副德国的城市地图的截图,也是在sumo官网上面能够看到的一副地图。

sumo路网特点基本说明
文件扩展名.net.xml
内容类型地图
开放格式?
SUMO特定?
XML模式http://sumo.dlr.de/xsd/net_file.xsd

一个SUMO路网文件(.net.xml)描述了一个地图,地图包括模拟车辆沿道路或横跨运行街道和路口。粗略地说,SUMO路网是有向图。在sumo中,nodes 通常被定义为“路口”和 edges 被定义为道路或街道。请注意,edges是单向的。

具体来说,SUMO网络包含以下信息:

  • 每个edge是车道(lane)的集合,包括每个车道的id,位置,形状和速度限制,
  • 路口拥有交通信号灯逻辑,
  • 交汇处junction,包括其通行权监管,
  • lanes之间有交叉口(nodes)连接。

另外,根据使用的输入格式和设置处理选项,还可以找到

  • 地形,
  • 环形交叉口描述。

尽管SUMO路网XML文件可以被人们读取,但并不意味着可以手动进行编辑。相反,您应该将SUMO XML描述文件netconvert一起使用。您也可以从各种格式转换使用现有的地图 netconvert或产生几何形状简单,抽象的路线图与netgenerate。要修改现有的*.net.xml*文件,您可以将它与patch文件一起用netconvert加载。您也可以使用netedit来构建自己的道路网络或对从netconvertnetgenerate获得的道路网络进行重建。

netconvert允许转换其他地图文件重新生成的SUMO道路网络。

2.1 路网格式

SUMO道路网络被编码为XML文件。内容按实例按以下顺序分组:

  • 适用于该网络的地图投影
  • edge 首先提供的是internal edge,然后给出 plain edge;每个edge都包含属于它的 lane 列表
  • 交通灯逻辑
  • junctions路口,包括通行权定义;首先是plain junction ,然后是internal junction
  • 连接器 connections,首先是plain connection ,然后是internal connection
  • 可选的回旋处

2.2 坐标和对齐

sumo的路网使用笛卡尔坐标,其中最左侧的节点位于x = 0,而最底部的节点位于y = 0。这意味着,如果原始路网未使用笛卡尔坐标和/或度量坐标,则在导入时,netconvertnetgenerate会投影网络。然后,他们将道路网移至(0,0)的原点。

该过程记录在元素内的生成网络中location。您可以在此处找到以下属性:

名称类型描述
netOffset偏移量(<2D-POSITION>用于将路网移动到(0,0)的偏移量
convBoundary边界(<2D-BOUNDING_BOX>跨越转换后的网络(现在给出的网络)的节点的边界
origBoundary边界(<2D-BOUNDING_BOX>投影和转换之前的网络初始边界
projParameter投影参数信息网络的投影方式(见下文)

projParameter 可能具有以下值之一:

编码方式描述
‘!’没有应用投影。
‘-’应用了“简单”投影
'. ’
proj-definition (PROJ_DEFINITION)投影是使用proj完成的,并使用这些参数对其进行了初始化。

为了从x / y坐标SUMO报告中获得原始坐标,必须先减去路网偏移。然后,关于,必须对初始投影进行逆变换 projParameter。对于投影项目的路网,可以使用名为pj_inv的proj函数执行逆变换。首先必须使用来自的投影参数来初始化proj projParameter。对于项目投影的网络,这看起来像:

Position2D cartesian = sumoXY(x, y);
projPJ myProjection = pj_init_plus(projParameter.c_str());
cartesian.sub(netOffset);
projUV p;
p.u = cartesian.x();
p.v = cartesian.y();
p = pj_inv(p, myProjection);
p.u *= RAD_TO_DEG;
p.v *= RAD_TO_DEG;
cartesian.set(p.u, p.v);

对于没有投影的网络(projParameter=’!’),仅必须应用偏移量。对于具有“简单”投影(projParameter=’-’)的网络,当前尚不知道反投影方法。

SUMO道路网络意在向北对齐。当然,这取决于用户如何定义道路网络,但是当从“开放街道地图”或形状文件的来源中导入时,向上方向应对应于北方。

2.3 Edges和Lanes

在sumo中定义的plain edge(并不是internal edge)如下图所示,这个edge由两条lane组成
  在这里插入图片描述

其中shape="7.20,-4.80,100.00,-4.80"中7.20是起点的横坐标,-4.8是起点的纵坐标,(100,-4.8)表示终点的横纵坐标。

<edge id="gneE0" from="gneJ0" to="gneJ1" priority="-1">
        <lane id="gneE0_0" index="0" speed="13.89" length="92.80" shape="7.20,-4.80 100.00,-4.80"/>
        <lane id="gneE0_1" index="1" speed="13.89" length="92.80" shape="7.20,-1.60 100.00,-1.60"/>
</edge>

“Normal”和“Internal”的edges的编码方式几乎相同,但是它们在强制属性和使用属性方面有所不同。

2.3.1 Normal Edge(正常的Edge或者一般的Edge)

一般的edge是两个交叉点(junction)之间的连接。

例如2.3中交叉点分别是"gneJ0"、“gneJ1”

<edge id="<ID>" from="<FROM_NODE_ID>" to="<TO_NODE_ID>" priority="<PRIORITY>">
    ... one or more lanes ...
</edge>

在此,ID(上面示例中的<ID>)是在路网导入期间读取的ID。在属性fromto中分别指定了开始节点和结束节点的ID 。优先级是确定路权规则的抽象序数。function上面的示例中省略了该属性,因为该属性默认为normal(一般的)。

边的属性是:

名称类型描述
IDid(字符串)edge的id
fromid(字符串)它开始于的node的id
toid(字符串)它结束于的node的id
priority优先整数指明道路的路权高低(可选)
功能枚举(“ normal”,“ internal”,“ connector”,“ crossing”,“ walkingarea”)抽象edge目的(可选,默认为“ normal”)

对于仿真,仅关注“功能”属性。它描述了边的使用方式,以及它是在现实世界中可以找到的边还是仅用于分配的辅助构造。定义了以下目的:

  • normal:edge是路网的常见部分,例如高速公路或连接两条道路的普通街道
  • connector:连接器是宏观连接器-并非真实世界道路网络的一部分。尽管如此,在模拟中,“连接器”道路和一般的node之间没有区别。只有sumo-gui允许隐藏连接器边缘。
  • internal:edge是交叉口的一部分(位于交叉口内),请参见上文。
  • crossing
  • walkingarea

2.3.2 lane 车道

每个edge都包括其组成的车道的定义。以下示例显示了具有两个车道的单个边。注意,坐标既可以是2D也可以是3D。

<edge id="<ID>" from="<FROM_NODE_ID>" to="<TO_NODE_ID>" priority="<PRIORITY>">
        <lane id="<ID>_0" index="0" speed="<SPEED>" length="<LENGTH>" shape="0.00,495.05 248.50,495.05"/>
        <lane id="<ID>_1" index="1" speed="<SPEED>" length="<LENGTH>" shape="0.00,498.35,2.00 248.50,498.35,3.00"/>
</edge>

可以看到,该ID由车道所属的edge的ID和行驶编号组成,两者均由下划线(_)分隔。如"<ID>_0",最右边车道的行驶数字从零开始。“ index”属性中也给出了相同的数字。车道也按此数字排序。

车道的属性是:

名称类型描述
IDid(字符串)车道编号
索引运行编号
(无符号整数)
一个运行数字,从最右边的车道以零开始
速度float此车道上允许的最大速度[m / s]
长度float该车道的长度[m]
形状位置向量车道的几何形状,由描述车道中心线的折线给出;不能为空或少于两个位置

应当注意,即使边缘的所有车道与形状的几何长度不同,当前其所有车道也具有相同的长度。 netconvert甚至明确允许覆盖几何长度。此外,即使将网络移到(0,0)开始,也不能保证网络的所有部分都具有正坐标。

警告

  最小edge长度为0.1m。
Internal Edges(内部Edges)

内部edge位于路口内,并将传入的法线边缘与传出的法线edge连接起来 。如果使用**–no-internal-links**选项构建网络,则不包括内部edge。内部edge的示例可能如下所示:

<edge id="<ID>" function="internal">
    ... one lane ...
</edge>

内部edge的ID组成为:<NODE_ID> _ <EDGE_INDEX> 其中*<NODE_ID>*是edge所在节点的ID, *<EDGE_INDEX>*是围绕该节点顺时针运行的运行编号(从北开始) )。请注意,该ID的前缀为“:”。如果由内部edge连接的传入和传出edge具有多个通道,则内部edge也具有多个通道(根据这两个edge之间的连接数)。如果是多车道内部edge,则INDEX会以车道数跳跃,因此EDGE_INDEX + LANE_INDEX = CONNECTION_INDEX。

下表中给出了属性。

名称类型描述
IDid(字符串)内部边缘的id
功能internal始终以“ internal”表示内部edge
Stop Offset

每个edge或车道可携带一个stopOffset子元素,以为某些类别的车辆指定附加的停车偏移量:

<edge id="<ID>">
    <stopOffset value="<distance in m.>" vClasses="<space-separated list of vClasses>" />
    <lane id="<ID>" index="<INDEX>" ... >
        <stopOffset value="<distance in m.>" exceptions="<space-separated list of vClasses>" />
    </lane>
    ...
</edge>

为edge定义此元素将影响edge的所有不拥有自己stopOffset元素的车道。请注意,可以定义受停止偏移量影响的所有车辆类别(属性vClasses),也可以定义不受影响的所有车辆类别(属性exceptions)。您不能同时使用两个属性。value-attribute指定从车道末端停止指定车辆类别所需的距离。

名称类型描述
值(双精度)停止偏移量为正值,以米为单位。
vClassesvClass列表指定stopOffset适用于哪些车辆类别。
例外情况vClass列表指定stopOffset不适用于哪些车辆类别。

有关车辆类别的说明,请参见 此处

2.4 交通灯模块

交通信号灯程序定义交通信号灯的阶段。

<tlLogic id="<ID>" type="<ALGORITHM_ID>" programID="<PROGRAM_ID>" offset="<TIME_OFFSET>">
        <phase duration="<DURATION#1>" state="<STATE#1>"/>
        <phase duration="<DURATION#1>" state="<STATE#1>"/>
        ... further states ...
        <phase duration="<DURATION#n>" state="<STATE#n>"/>
</tlLogic>

有关属性和语义的说明,请查阅 Simulation / Traffic Lights。请注意,通常,生成的程序的ID为“ 0”。

2.5 交叉口(Junctions)和路权(Right-of-Way)

Plain 交叉口

交叉口代表不同的道路交叉处的区域,包括车辆穿越交叉路口时必须遵循的通行规则。一个示例可能是:

<junction id="<ID>" type="<JUNCTION_TYPE>" x="<X-POSITION>" y="<Y-POSITION>"
          incLanes="<INCOMING_LANES>" intLanes="<INTERNAL_LANES>"
          shape="<SHAPE>">
    ... requests ...
</junction>

Junction本身由以下属性描述:

名称类型描述
IDid(字符串)联结的ID;请注意,控制该路口时,交通信号灯定义必须使用相同的ID。
XX位置(真实)相交的x坐标
yy位置(真实)相交的y坐标
zz位置(真实)相交的(可选)z坐标
incLanes编号清单在交叉路口结束的车道编号;按方向(顺时针)排序,方向向上= 0
intLanes编号清单交叉路口内车道的ID
shape职位清单描述十字路口道路边界的多边形
customShape布尔形状是否由用户自定义(因此不应由netconvertnetedit重建),默认为False

请注意,连接点的x / y位置描述的是给定值,而不是连接点的计算中心。允许两个节点具有相同的位置。

警告

从0.25.0版开始,每个结点的最大连接数(链接)限制为256。在sumo的早期版本中,限制为64。

要求

以下是“ request”,如下所示:

  <request index="<INDEX>" response="<RELATIVE_MAJOR_LINKS>" foes="<FOE_LINKS>" cont="<MAY_ENTER>"/>

他们描述了对于每个link(给定为“ index”),哪些车流具有更高的优先级(“ response”),并迫使link“ index”上的车辆停止,哪些流发生冲突。“ foes”是“ ”的超集response,添加优先级比被称为“ index”的流低的流。

可以按以下方式读取请求:索引描述了交叉路口进出车道之间的特定连接。索引是按连接方式计算的,顺序如下:首先,从0°(向上)开始按edge的方向对边缘进行排序;第二,使用车道顺序(最右优先);第三,从最右边开始,按照连接的方向进行排序。

从右开始,在“响应”和“敌人”字段中应用相同的顺序。这意味着:

  <request index="2" response="001" foes="011" cont="0"/>

使用索引为“ 2”的连接的车辆必须等待使用连接“ 0”的车辆。连接“ 0”和“ 1”是它的敌人。request元素的属性是:

名称类型描述
指数索引(无符号整数)在路权矩阵中描述的连接的索引
响应位集(字符串)一个位串,用于描述每个连接是否禁止该连接处的车辆通过减速路口。最右边的位对应于索引0。
敌人位集(字符串)一个位串,用于描述每个连接是否与此连接冲突。最右边的位对应于索引0。
布尔车辆是否可以通过第一条停车线在交叉路口内等待,直到没有更高优先级的车辆。从优先方向左移的流通常是这种情况。
警告

在属性位串`response`和`foes`必须从右到左被读(响应于链路0是最右边的条目)在对比`tlLogic`-`state`其被读取从左到右字符串(链路0的状态是最左侧的条目)。
内部交叉口

“内部”路口用于 为某些交通关系定义路口内的等待位置。通常用于优先方向左转的车辆或必须等待直行人的右转车辆。

从0.25.0版开始,用户可以自定义内部结的位置(和存在)

这些路口不需要通行权矩阵,而只需遵循以下信息

  • 进入内部路口所在路口的车道,并在车辆驶近时禁止通过内部路口
  • 穿越内部路口不得占用的内部车道

内部结点的编码如下:

<junction id="<ID>" type="internal" x="<X-POSITION>" y="<Y-POSITION>"
          incLanes="<INCOMING_PROHIBITING_LANES>"
          intLanes="<INTERNAL_PROHIBITING_LANES>"/>

ID与穿越内部路口本身时使用的通道相同。该类型始终为“内部”。请注意,内部结通常编码为一行。内部联结的属性是:

名称类型描述
IDid(字符串)联结的ID;请注意,控制该路口时,交通信号灯定义必须使用相同的ID。
XX位置(真实)相交的x坐标
yy位置(真实)相交的y坐标
zz位置(真实)相交的(可选)z坐标
内嵌编号清单在内部交界处的交叉路口处结束的车道的ID,并禁止越过内部交界处
互联网编号清单内部交汇点位于交叉路口内的车道编号,并禁止越过内部交汇点

Connections 连接器

Plain Connections 普通连接器

普通连接或“链接”描述可以从输入车道到达哪些输出车道。另外,给出了用于通过交叉路口的第一个车道。其他信息描述了连接的方向和“状态”。如果连接由交通信号灯控制,则会给出交通信号灯的名称以及在交通信号灯的相位定义内控制该连接的信号的索引。连接编码为:

<connection from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>" fromLane="<FROM_LANE_INDEX>" toLane="<TO_LANE_INDEX>"
            via="<VIA_LANE_ID>" tl="<TRAFFIC_LIGHT_ID>" linkIndex="12" dir="r" state="o"/>

这些属性是:

名称类型描述
边缘ID(字符串)连接开始的入站边缘的ID
边缘ID(字符串)连接结束的出站边缘的ID
fromlane索引(无符号整数)连接开始的入站边缘的车道
tolane索引(无符号整数)连接终止的输出边缘的通道
通过车道编号(字串)用来在连接处传递此连接的通道的ID
tl交通灯ID(字符串)控制此连接的交通灯的ID;如果连接不受交通信号灯控制,则缺少属性
linkIndex索引(无符号整数)负责交通信号灯内连接的信号的索引;如果连接不受交通信号灯控制,则缺少属性
目录枚举(“ s” =直行,“ t” =转弯,“ l” =左,“ r” =右,“ L” =部分左,R =部分右,“无效” =无方向)连接方向
state枚举(“-” =死角,“ =” =相等,“ m” =次要链接,“ M” =主要链接,仅红绿灯:“ O” =控制器关闭,“ o” =黄色闪烁,“ y” =黄色次要链接,“ Y” =黄色次要链接,“ r” =红色,“ g” =绿色次要,“ G”绿色主要)连接状态

在不使用netconvert创建这些连接时(不推荐),应考虑到具有内部通道的连接遵循特殊模式。例如,当通道1_f_0需要通过1_v_0连接到1_t_0时,存在以下连接条目:[从= 1_f_0,经由= 1_v_0到= 1_t_0]和[从= 1_v_0到= 1_t_0]。如果省略后者,SUMO将不会加载网络。如果在必要的连接旁边存在连接[从= 1_f_0到= 1_v_0],它也不会加载。

connection索引

每个连接都有关联的索引,可以通过自定义gui设置并激活Junctions-> Show … index来在 sumo-gui中显示该索引。这些索引通常是相同的,但可以彼此独立配置。

  • Junction Index:此索引在#Requests部分中进行了 描述。无法修改。索引对应于<junctions>s incLanes属性的顺序,也对应于元素的顺序<connection>。这些索引从顶部开始沿顺时针方向(在右侧网络中)围绕结点运行。

  • TLS索引:此索引分配给由交通信号灯控制的连接 。对于连接的交通信号灯(控制多个路口),此索引不同于**路口索引,**因为后者不再唯一。TLS索引可以使用*.con.xml* 文件配置。自定义索引可用于创建信号组(始终具有相同状态并共享相同索引的多个连接),从而简化交通灯阶段的状态定义。

环形交叉口

路网中的环形交叉口会影响通行权(在网络构建过程中在路口的Requests <request>元素中进行了编码 )。它们在路网文件中的存在有两个原因:

  • 有助于使用netconvert重新导入*.net.xml-*文件
  • 变道模型可能会考虑回旋处

每个回旋处均由其节点和边线定义(有些冗余):

<roundabout nodes="nodeID1 nodeID2 ..." edges="edgeID1 edgeID2 ..."/>

查看,编辑和处理软件

要创建SUMO路网文件,netconvert有助于从其他格式的地图生成文件,并 netgenerate构造具有简单几何形状的新地图。sumo直接在此文件的映射中执行其模拟。大多数其他SUMO工具都会读取此类文件以生成或导入必须映射到道路路网的信息。

可以使用netedit图形化地创建和编辑路网 。

SUMO net文件不适用于手动编辑。而是 使用netconvert将其转换为 SUMO本机XML描述。然后,您可以手动处理这些文件,并使用netconvert重建路网 。

更多文件

注意

处理旧版本的netconvert / netgenerate生成的网络时,请参阅ChangeLog

  • 8
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Sumo是一种源自日本的传统摔跤运动,在世界范围内越来越受到关注和喜爱。如果想要学习sumo,以下是一些学习资料的汇总。 1. 图书:有许多关于sumo的图书可供学习。其中一本经典的书籍是《相扑-百科全书》,它详细介绍了相扑的历史、规则、技巧和文化背景。此外,还有一些介绍相扑训练和比赛策略的教程书籍。 2. 视频教程:许多分享sumo技巧和战术的教学视频可以在网络上找到。这些视频通常由专业相扑选手或经验丰富的教练拍摄,在视频中他们会解释和演示各种技术动作和比赛战术。 3. 相扑训练营:参加相扑训练营是学习sumo的好方法。这些训练营通常由经验丰富的教练和专业选手指导,并提供专业的指导和训练设施。参加训练营可以让学习者接触到真实的sumo训练环境,并与其他学习者互动交流。 4. 在线论坛和社区:加入在线的sumo讨论论坛和社区是与其他相扑爱好者交流和学习的好途径。在这些论坛上,你可以提问问题、分享经验,并从其他人的回答和建议中获取帮助。 5. 实践:最重要的学习sumo的方法是实践。找到当地的sumo俱乐部或团体,参与他们的训练和比赛。通过与其他学习者和专业选手一起练习和比赛,你将更加熟悉sumo的技巧和规则,并提高自己的技能水平。 总结来说,要学习sumo,可以利用图书、视频教程、参加训练营、加入在线社区和通过实践来提高自己的技能。这些资源将帮助你更好地了解sumo的规则和文化,并提供专业的指导和交流机会。 ### 回答2: Sumo学习资料汇总可以包括以下内容: 1. 书籍:有很多关于Sumo的书籍可以作为学习资料,其中一些经典的包括《Sumo大将》、《Sumo的哲学》等。这些书籍可以帮助我们了解Sumo的起源、发展历史以及训练技巧等方面知识。 2. 视频教程:有许多Sumo比赛的录像可以通过互联网观看,这些视频可以帮助我们学习Sumo的比赛规则、技巧以及角力的策略等方面知识。同时,还有一些专门的Sumo教学视频,可以教授一些基本的动作和技巧。 3. 网络文章和博客:有很多Sumo爱好者在网络上分享他们的经验和观点,通过搜索相关的关键词,我们可以找到很多有关Sumo的文章和博客。这些文章可以帮助我们了解Sumo的历史背景、技巧训练以及相关比赛等方面内容。 4. Sumo俱乐部和培训班:在一些大城市,可以找到一些Sumo俱乐部或者培训班,这些地方提供专业的指导和培训,可以帮助我们系统地学习Sumo的知识和技巧。在这些场所,我们可以与其他Sumo爱好者一起训练,共同进步。 总而言之,想要学习Sumo,除了了解比赛规则之外,还需要了解Sumo的起源和发展、训练技巧以及背后的哲学理念等方面知识。通过阅读书籍、观看视频、阅读网络文章、参加Sumo俱乐部等方式,我们可以获取丰富的学习资料,提升自己的Sumo水平。 ### 回答3: sumo 是一种名为 "Simulation of Urban MObility" 的交通仿真软件,它被广泛应用于交通规划和研究领域。以下是 sumo 学习资料的汇总: 1. 官方文档和教程:sumo 官方网站上提供了详尽的文档和教程,包括安装指南、用户手册、示例文件等。这些资料可以帮助初学者快速上手 sumo,掌握基本的使用方法和功能。 2. 在线视频教程:在互联网上可以找到许多 sumo 的视频教程,这些教程通常由专业人士制作,通过实例演示 sumo 的使用和各种功能。观看视频教程可以更直观地理解 sumo 的操作和原理。 3. 书籍和论文:一些交通规划和仿真领域的专业书籍和学术论文也涉及到 sumo 的应用和技术细节。阅读这些书籍和论文可以深入了解 sumo 的背景知识和进阶技巧。 4. 开发者社区和论坛:sumo 有一个活跃的开发者社区和官方论坛,用户可以在这些平台上提问、讨论和分享关于 sumo 的问题和经验。通过参与讨论,用户可以学习其他人的使用经验,解决疑惑,并与其他 sumo 用户建立联系。 5. 源代码和示例文件:sumo 是开源软件,其源代码可以在官方网站上下载。对于对编程有一定了解的用户,可以通过研究源代码和示例文件来深入理解 sumo 的内部工作原理和实现细节。 综上所述,初学者可以通过官方文档、在线视频教程和书籍快速入门 sumo。对于进一步学习和探索 sumo 的用户,可以参与开发者社区的讨论,阅读相关论文和源代码,提升对 sumo 的理解和应用能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值