SUMO文档阅读——PlainXML
Tutorials
https://sumo.dlr.de/docs/Tutorials/index.html
net.xml (道路设置) 和 route.xml (车类型设置 + 车流量设置) + .sumocfg (综合前两个xml文件)
十字路口的例子
https://sumo.dlr.de/docs/Networks/PlainXML.html
Tools
https://sumo.dlr.de/docs/Tools/#tools_by_category
Documentation
https://sumo.dlr.de/docs/index.html
Traffic Light
交通灯的属性,动态 or 静态
以下是关于 tlType
属性中两种信号灯类型(static
和 actuated
)的对比表格:
属性类型 | static |
actuated |
---|---|---|
含义 | 每个信号灯相位的持续时间是固定的,不会根据交通流量进行调整。 | 绿灯相位的持续时间会根据交通流量数据(如感应线圈检测)动态调整。 |
适用场景 | - 适用于车流量固定、规律性强的路口,例如每天早晚高峰规律明显的路口。 - 适合简单场景,或无需动态控制的情况。 |
- 适用于车流量不稳定、动态变化较大的路口,例如繁忙的城市交叉路口。 - 适合需要更灵活的流量控制以提高通行效率的场景。 |
响应交通状况的能力 | 无:相位时间是静态的,不会根据交通流量变化进行调整。 | 有:根据实时交通流量检测结果(如车辆数量),可以延长或缩短绿灯时间以优化交通流。 |
技术要求 | - 不需要额外设备或感应器,配置简单,易于实现和维护。 | - 需要配备感应线圈或其他交通流量检测设备(例如车辆检测器),配置较复杂。 |
效率 | - 如果交通流量变化不大,效率较高。 - 如果流量波动较大,可能会导致拥堵或长时间空闲绿灯,效率降低。 |
- 能根据交通流量动态调整,减少无效等待时间,提升路口通行效率。 |
典型场景 | - 乡村或小型城镇的简单路口,交通模式稳定且可预测。 | - 繁忙的城市路口或动态交通场景,例如高峰时段的多向交汇路口,或流量随机变化的施工路段。 |
详细补充
-
static
示例:- 固定的信号灯相位,时间不变,例如:
<phase duration="30" state="GrGr"/> <!-- 东西向绿灯 30 秒 --> <phase duration="30" state="rGrG"/> <!-- 南北向绿灯 30 秒 -->
- 不管车流量是多少,每个方向的绿灯都严格执行预设时间。
- 固定的信号灯相位,时间不变,例如:
-
actuated
示例:- 动态控制的信号灯相位,例如:
<actuated> <!-- 使用感应器动态调整绿灯时间 --> <phase minDur="10" maxDur="60" state="GrGr"/> <!-- 东西向绿灯,根据流量调整在 10 到 60 秒之间 --> <phase minDur="10" maxDur="60" state="rGrG"/> <!-- 南北向绿灯,根据流量调整在 10 到 60 秒之间 --> </actuated>
- 如果检测到东向车流量大,则延长东西向绿灯时间;如果车少,则提前切换到南北方向。
- 动态控制的信号灯相位,例如:
如何选择?
-
使用
static
的场景:- 流量较小且规律性强的区域。
- 不需要动态优化交通流量的地方。
- 预算有限,无法安装流量检测设备。
-
使用
actuated
的场景:- 交通流量动态变化大,需要实时调整信号灯时间。
- 目标是提高通行效率,减少等待时间。
- 路口具备安装感应器或流量检测设备的条件。
交通灯的属性,相位控制
是的,你的理解是正确的!前面的 opposites
和 后面的 incoming
、alternateOneWay
的核心区别就在于:
- 前面的
opposites
:可能存在共享的绿灯相位,多个方向(通常是相对方向)同时获得绿灯,可以有一些冲突。 - 后面的
incoming
和alternateOneWay
:是严格的单方向绿灯控制,确保每次只有一个方向的交通流动,没有共享的绿灯。
具体对比
布局模式 | 是否共享绿灯相位 | 控制粒度 | 是否允许多个方向同时通行 | 典型场景 |
---|---|---|---|---|
opposites |
是 | 相对方向共享绿灯 | 允许(有冲突可能) | 简单四向交叉路口,低车流量区域。 |
incoming |
否 | 每个方向单独相位 | 不允许 | 复杂交叉路口,防止冲突,需要精确控制每个方向车流。 |
alternateOneWay |
否 | 每个方向单独相位(带全红相位) | 不允许 | 窄路、单车道、施工区域等需要交替通行的场景。 |
前面的 opposites
特点
-
共享绿灯相位:
- 左右相对方向(如东向和西向,北向和南向)通常会共享一个绿灯相位。
- 左转车辆可能会与对向直行车辆发生冲突,要求左转车辆主动避让(除非专门为左转车道分配了相位)。
-
多个方向同时通行:
- 对向方向共享绿灯时,不需要等待另一个方向完全结束,整体通行效率更高。
- 但安全性取决于驾驶员的判断(如左转避让对向直行车)。
后面的 incoming
和 alternateOneWay
特点
-
没有共享绿灯:
- 每个方向的绿灯完全独立,其他方向必须为红灯,不存在冲突。
-
控制粒度更精细:
incoming
:每条进入道路有单独的绿灯控制。alternateOneWay
:更进一步,确保当前方向车辆完全清空后(通过全红相位),再允许下一方向通行。
总结
前面模式 (opposites) 的优劣:
- 优点:
- 适用于简单场景,通行效率较高。
- 方向间共享绿灯,相位数少,设计简单。
- 缺点:
- 存在潜在冲突(如左转与对向直行冲突),安全性稍低。
- 不适合车流量大的复杂路口。
后面模式 (incoming 和 alternateOneWay) 的优劣:
- 优点:
- 严格避免方向冲突,安全性高。
- 适合复杂路口、狭窄路段或特殊场景。
- 缺点:
- 整体通行效率降低(尤其是
alternateOneWay
需要全红相位)。
- 整体通行效率降低(尤其是
如果将这三种模式放到实际应用中,选择依据如下:
opposites
:适合常规、简单的十字路口或低车流量区域。incoming
:适合复杂的多路口交汇或车流方向差异较大的路口。alternateOneWay
:适合单车道、狭窄区域或必须保证单方向通行的特殊场景。
Node的type,表示路口当中,不同方向车辆行驶的优先级 (规则)
以下是 Node Types(节点类型) 参数的整理表格:
节点类型 | 描述 | 典型应用场景 |
---|---|---|
priority |
低优先级边的车辆需要等待高优先级边的车辆通过后再进入交叉路口。 | 简单的优先级路口,例如乡村或小城镇交叉路口。 |
traffic_light |
交叉口由交通信号灯控制,通过优先规则避免冲突。 | 城市中的常规信号灯路口。 |
right_before_left |
来自右侧的车辆优先,左侧车辆需要让行(在左行网络中会自动翻转为 left_before_right )。 |
常用于右行规则的国家,例如欧洲大部分国家。 |
left_before_right |
来自左侧的车辆优先,右侧车辆需要让行(仅适用于某些特定地区,例如马达加斯加)。 | 适用于特殊左行规则的地区。 |
unregulated |
路口完全不受控制,所有车辆自由通行,可能会发生碰撞(交叉口内不进行碰撞检测,但交叉口外会检测)。 | 无需规则的非正式路段,例如工地或非正式交汇点。 |
traffic_light_unregulated |
交叉口由信号灯控制,但没有进一步规则。如果信号灯规划不合理,可能会发生碰撞(交叉口内不检测碰撞)。 | 信号灯失效的交叉路口,或临时交通灯配置。 |
priority_stop |
类似优先级路口,但次要道路的车辆需要完全停下后再通行。 | 小型十字路口,通常用于低流量的次要路段。 |
allway_stop |
所有进入交叉口的车辆都必须完全停下后通行,类似于 "全向停车路口(All-way stop)" 的规则。 | 北美常见的全向停车路口。 |
rail_signal |
路口由铁路信号灯控制,仅适用于铁路。 | 铁路和普通道路的交汇处,需要铁路优先通行的场景。 |
zipper |
用于车道数减少的交汇点,车辆以“拉链式(Zipper-style)”方式合流。 | 合流区域,如多车道变为单车道的场景。 |
rail_crossing |
模拟铁路道口,当火车接近时,会停止道路车辆以允许火车通行。 | 铁路道口,火车优先的路段。 |
traffic_light_right_on_red |
信号灯控制的路口,但右转车辆在确保安全的情况下,可以在任何相位右转(需要先停止观察)。 | 美国和部分国家允许右转车辆在红灯时通行的路口。 |
dead_end |
没有任何连接的节点类型,通常由系统自动分配,用于标识死胡同。 | 死胡同、没有出口的终点区域。 |
总结
- 规则型节点(如
priority
、right_before_left
):适用于简单规则交叉口。 - 信号控制节点(如
traffic_light
、traffic_light_unregulated
):适用于需要信号灯管理的复杂路口。 - 特殊节点(如
rail_signal
、zipper
、rail_crossing
):针对特定应用场景,如铁路道口和合流区。 - 无控制节点(如
unregulated
):适用于没有明确规则的特殊场景。 - 自动标识节点(如
dead_end
):用于标识没有连接的区域。
Right-of-way作为边优先级的补充
是的,完全正确!如果两个道路的 Node Type 都是 priority
(或者 priority_stop
),并且仅通过节点类型无法明确决定哪条道路具有更高优先级时,会进一步依赖 Right-of-Way 中的 Edge Priority(边优先级) 来决定通行权。
总结逻辑
-
节点类型是基础规则:
priority
:低优先级车辆需要给高优先级车辆让行。priority_stop
:次要道路的车辆需要完全停下后再通行,但通行顺序仍然由优先级决定。
-
边优先级作为补充规则:
- 当多个方向都属于同一节点类型时(如两个
priority
或两个priority_stop
),Right-of-Way 中的规则会进一步细化,尤其是通过 Edge Priority 决定。 - 边优先级的评估依据包括:
priority
(边的优先级属性)。speed
(道路限速)。laneNumber
(车道数量)。
- 当多个方向都属于同一节点类型时(如两个
-
最终优先权的决定:
- 边的优先级值越高,通行权优先级越高。
- 如果边优先级相同,则可能进一步评估车辆的行驶方向(如:直行优先于左转)。
举例说明
场景 1:两个 priority
类型的边
- 假设路口有两条进入边,节点类型都是
priority
。 - Edge 1:
priority
= 8- 限速 = 60 km/h
- 车道数 = 2
- Edge 2:
priority
= 5- 限速 = 40 km/h
- 车道数 = 1
- Right-of-Way 决策:
- Edge 1 的优先级更高,因此车辆来自 Edge 1 的方向具有通行优先权。
- Edge 2 的车辆需要让行。
场景 2:priority_stop
类型的边
- 假设路口是一个全向停车路口,所有车辆都需要停车,但进入边优先权不同。
- Edge 1:
priority
= 7- 限速 = 50 km/h
- Edge 2:
priority
= 7- 限速 = 50 km/h
- Right-of-Way 决策:
- 如果两条边的
priority
和其他属性(如限速、车道数)完全相同,则进一步通过行驶方向评估:- 直行优先于左转。
- 左转需避让对向直行车辆。
- 如果两条边的
总结
- Node Type 决定基础规则:如
priority
定义“高优先级先行”,priority_stop
定义“停车后通行”。 - Right-of-Way 决定更细节的优先权:
- 如果仅靠 Node Type 无法明确优先权,则通过边的属性(如 Edge Priority)进一步判断。
- 边的优先级越高,车辆的通行权越高。
其他的规则
以下是对 Special Cases(特殊情况) 规则的详细整理:
1. 转弯优先规则(Turning Priority Road)
- 规则:
- 如果某条路被定义为优先通行的转弯道路(turning priority road):
- 该道路的 所有进入边(incoming edges) 和 离开边(outgoing edges) 的优先级值(
priority
)必须高于非优先道路的边。
- 该道路的 所有进入边(incoming edges) 和 离开边(outgoing edges) 的优先级值(
- 如果某条路被定义为优先通行的转弯道路(turning priority road):
- 目的:
- 确保这条道路的流量优先通过,而其他方向的道路必须让行。
2. 环岛优先规则(Roundabouts)
- 规则:
- 环岛内的道路边(edges within the roundabout)始终优先于外部进入环岛的道路边(edges incoming from the outside)。
- 目的:
- 保护环岛内部的流量,避免外部车辆进入环岛时干扰内部交通。
3. 同一边的车道合并规则(Lane Merging from the Same Edge)
- 规则:
- 当同一条道路的两个车道需要合并到同一个目标车道时:
- 如果节点类型为
zipper
:- 两条车道会对称地反应,车辆按照“拉链式合并”的方式交替进入目标车道。
- 如果节点类型不是
zipper
:- 左车道具有优先权。
- 右车道需要让行。
- 如果节点类型为
- 当同一条道路的两个车道需要合并到同一个目标车道时:
- 目的:
- 确保车道合并的有序性:
- 在
zipper
场景下实现平等合并; - 在非
zipper
场景下优先左车道,符合常见交通规则。
- 在
- 确保车道合并的有序性:
总结规则表
场景 | 规则描述 | 优先方向 |
---|---|---|
转弯优先道路 | 转弯道路的所有进入边和离开边的 priority 值必须高于其他道路。 |
转弯道路 |
环岛优先 | 环岛内部的边优先,外部进入环岛的边必须让行。 | 环岛内部道路 |
车道合并(节点类型为 zipper ) |
两条车道对称反应,车辆以拉链式方式交替进入目标车道。 | 无优先,交替合并 |
车道合并(非 zipper ) |
左车道优先,右车道需要让行。 | 左车道优先 |
fringe 作为空间的划分
是的,你的理解是正确的!可以将 fringe
属性 看作是对网络空间的一种逻辑划分,将整个网络划分为 外部(outer) 和 内部(inner 和 default)。具体来说:
空间划分的方式
-
外部空间(
outer
):- 定义:网络的边界,表示与仿真网络范围之外的现实世界道路直接连接的节点或交叉点。
- 作用:
- 用于表示交通进入或离开仿真区域的入口/出口。
- 通常是路径生成(如起点或终点)时的重要参考点。
-
内部空间(
inner
和default
):inner
:- 表示内部的边界节点,但连接的是优先级较低或已被仿真网络移除的现实道路。
- 这些节点仍属于仿真网络的一部分,但仅与次要道路相关。
default
:- 表示完全位于网络核心部分的节点,与外部或次要道路无直接联系。
- 通常是仿真网络的中间节点,用于描述内部交通流的路径。
通过 fringe
属性进行的逻辑划分
空间类型 | 描述 | 使用场景 |
---|---|---|
外部(outer) | 表示网络的最外围,与真实世界的外部道路连接。 | - 用于生成路径的起点或终点。 - 模拟外部流量进入或离开仿真网络。 |
内部边界(inner) | 表示网络内部的边界,与次要道路(优先级较低)或被移除的现实世界道路相连接。 | - 用于内部交通路径生成,通常在需要模拟与次要道路的潜在连接时使用。 |
内部核心(default) | 表示网络的核心节点,与外部或次要道路无直接联系。 | - 仅用于仿真网络的内部路径计算,例如描述区域内部交通流的移动。 |
举例说明
-
现实世界映射到仿真网络的情况:
- 实际场景:
- 一个模拟网络表示某个城市区域,外围的高速公路或连接邻近城市的道路被截断,只有该城市范围内的道路被保留。
- 对应的
fringe
设置:- 高速公路入口/出口节点:标记为
outer
。 - 与次要道路(如乡村小路)相连的节点:标记为
inner
。 - 城市核心交叉路口:标记为
default
。
- 高速公路入口/出口节点:标记为
- 实际场景:
-
路径生成的影响:
- 外部路径:
- 起点或终点位于
outer
节点,模拟外部流量进入城市。
- 起点或终点位于
- 内部路径:
- 在
inner
或default
节点之间生成路径,描述区域内部的车辆流动。
- 在
- 外部路径:
总结
你可以简单地理解为:
- 外部(outer):连接仿真网络与真实世界的接口。
- 内部(inner 和 default):描述仿真网络内的道路和节点。
- 划分意义:
- 外部(outer):用于表示网络的边界。
- 内部(inner 和 default):用于网络内部的交通流动模拟。
这种划分方式不仅清晰地组织了仿真网络的逻辑,还能有效支持路径生成、交通流量模拟等任务。
如果你有进一步的疑问或具体应用场景需要解析,随时告诉我!
Road和Lane的区别
是的,你的理解非常准确!我们可以通过以下解释进一步细化 road 和 lane 的区别:
1. 定义与层级区别
术语 | 定义 | 示例 |
---|---|---|
Road(道路) | 一条完整的道路,通常指同向行驶的所有车道的集合。 | 假设一条双向四车道道路:每个方向的两条车道组成一个单独的 road(一边一条)。 |
Lane(车道) | Road 的组成部分,指道路上的一条独立行车路径,供车辆按序行驶。 | 同方向的道路包含 两个 lane:左侧车道和右侧车道。例如,在高速公路上,超车道是一个 lane,慢车道是另一个 lane。 |
2. Road 和 Lane 的场景对比
场景 | Road(道路) | Lane(车道) |
---|---|---|
道路通行优先权 | 在涉及整条道路的通行权时(如交叉路口、环岛),规则通常基于 road 层面。例如: - 转弯优先道路; - 环岛内外优先规则。 | 在一条道路内,如果涉及到具体的车道合并或冲突时,规则基于 lane 层面。例如: - 车道合并(拉链式); - 左车道优先合并规则。 |
规则影响范围 | 影响的是同向道路上的所有车道。例如,环岛优先规则会使得整个进入环岛的外部道路必须给环岛内所有车道让行。 | 影响的是具体车道。例如,在两个车道需要合并时,会明确左车道是否优先、右车道是否需要让行。 |
交通控制类型 | 信号灯、优先级规则等更多基于 road 的整体流量管理。 | 通常适用于微观层面的控制,例如一条车道是否可以自由变道或合并。 |
3. 示例解释
场景 1:同方向两条车道的道路
-
假设一条路分为两条同方向车道:
- 左车道(Lane 1):超车道。
- 右车道(Lane 2):慢车道。
-
如果规则是 Road 层级:
- 整个方向的道路(包括 Lane 1 和 Lane 2)被视为一个整体,例如:
- 转弯优先规则中,整个道路获得优先通行权。
- 整个方向的道路(包括 Lane 1 和 Lane 2)被视为一个整体,例如:
-
如果规则是 Lane 层级:
- 只针对某条具体车道,例如:
- 在合并时,Lane 1(左车道)优先,而 Lane 2(右车道)需要让行。
- 只针对某条具体车道,例如:
场景 2:环岛(Roundabout)
- 环岛内所有车道属于 一个 Road。
- 环岛内外规则:
- 所有环岛内的道路(Road)对外部进入环岛的道路(Road)具有优先权。
场景 3:车道合并(Lane Merging)
- 在同一条道路上,两条车道(Lane)需要合并到一个目标车道:
- 如果节点类型是
zipper
:- 左车道和右车道平等,车辆交替合并。
- 如果节点类型是 非
zipper
:- 左车道优先,右车道需要让行。
- 如果节点类型是
4. 总结
- Road:代表一整条道路,包含所有同向车道,规则更宏观。
- Lane:是 Road 的组成部分,代表具体的单个车道,规则更细化。
两者的区别在于适用范围:
- 如果规则影响整个方向或所有车道,则是 Road 层级规则。
- 如果规则仅涉及特定车道之间的关系(如合并、避让等),则是 Lane 层级规则。
如果你还有其他问题或具体场景需要解释,欢迎随时问我!
Joining Nodes(合并节点)得到就是junctions
是的,这张图正是描述 Joining Nodes(合并节点) 的过程以及其效果。
图像解释
- 左侧的图像(未合并的交叉路口)
-
特点:
- 交叉路口由多个独立的节点(白色点)组成,每个节点之间有单独的道路连接。
- 可以看到:
- 每条道路的左转、直行和右转路径需要通过多个节点进行。
- 道路连接之间有不必要的复杂性,可能导致路径计算出现问题。
- 这种情况可能出现在从 OpenStreetMap 或其他地图数据中导入时,尤其是在几何上道路不对齐的情况下。
-
问题:
- 路径规划不平滑:例如,左转轨迹可能呈现折线状(由多个节点构成的折角路径)。
- 交通信号灯复杂:多个节点需要独立信号控制,信号灯设计繁琐且容易冲突。
- 效率低下:每个节点都需要单独计算车辆轨迹,增加计算负担。
-
- 右侧的图像(合并后的交叉路口)
- 特点:
- 交叉路口中的多个节点被合并为一个单一的节点(中间的黑色大节点)。
- 所有的左转、右转、直行路径都直接连接到这个节点。
- 道路之间的车道连接(绿色线条)被重新计算和优化。
- 优势:
- 简化了连接关系:所有道路只需要连接到单一节点,连接更清晰。
- 优化了路径规划:车辆的转向路径更平滑(如左转可用单一曲线表示)。
- 信号灯设计更高效:整个路口只需要一个交通信号灯系统即可控制所有路径。
- 仿真效率提高:减少了节点数量和连接的复杂性,降低计算成本。
- 特点:
总结
这张图清晰展示了:
- 左图 是未合并节点的交叉路口,复杂且容易导致问题。
- 右图 是通过 Joining Nodes 操作后的合并结果,优化了交叉路口的结构、连接和仿真效率。
设置边的类型
以下是 edge
(道路) 的参数整理表,包括每个参数的名称、类型和描述:
参数名称(Attribute Name) | 值类型(Value Type) | 描述(Description) |
---|---|---|
id | id (string) |
边(道路)的唯一标识符,必须是唯一的。 |
from | 引用的节点 ID | 边的起始节点,必须在节点文件中定义。 |
to | 引用的节点 ID | 边的终止节点,必须在节点文件中定义。 |
type | 引用的类型 ID | 边的类型,引用自 SUMO 边类型文件。如果设置类型,可以在类型的基础上覆盖部分属性(如allow , numLanes 等)。 |
numLanes | int |
边的车道数量,必须是整数值。 |
speed | float |
边允许的最大速度(单位:m/s)。默认值为 13.9 m/s(约 50 km/h)。 |
priority | int |
边的优先级,用于节点的通行规则计算(Right-of-way)。优先级越高,表示更高的通行权。 |
length | float |
边的长度(单位:米)。如果未定义,则根据起点和终点节点的距离计算。 |
shape | 列表(x,y 或 x,y,z ,以米为单位) |
边的几何形状,表示多个点的坐标序列。路径通常以from 和to 节点的坐标为起点和终点。 |
spreadType | 枚举值("right" , "center" , "roadCenter" ) |
描述车道几何形状的计算方式: - right :车道向右偏移(默认值); - center :车道在几何中心分布; - roadCenter :道路的中心线为参考。 |
allow | 车辆类别列表 | 允许通过的车辆类别(例如:passenger , bus , truck 等)。 |
disallow | 车辆类别列表 | 禁止通过的车辆类别。 |
width | float |
边的每条车道的宽度(单位:米),用于可视化效果。 |
name | string |
道路名称,不需要唯一,仅用于可视化。 |
endOffset | float >= 0 |
将停止线从交叉路口向后移动的距离(单位:米),有效缩短边的长度,并局部扩大交叉口范围。 |
sidewalkWidth | float >= 0 |
增加人行道的宽度(单位:米)。默认值为 -1,表示不添加人行道。 |
bikeLaneWidth | float >= 0 |
增加自行车道的宽度(单位:米)。默认值为 -1,表示不添加自行车道。 |
distance | float |
边的起点处的公里数(单位:千米)。正值表示公里数沿驾驶方向增加,负值表示减少。公里数沿边缘计算为 abs(distance + offsetFromStart) 。 |
重要补充说明
-
优先级(priority):
- 在交叉路口通行规则计算中非常重要。
- 如果未定义,会默认使用车速和车道数来计算优先级。
-
默认值:
- 如果
numLanes
未设置,默认值为 1。 - 如果
speed
未设置,默认值为 13.9 m/s(约 50 km/h)。 - 如果
length
未设置,则根据节点之间的距离自动计算。
- 如果
-
几何形状(shape):
- 允许定义边的复杂路径(多段折线)。
- 如果未定义形状,路径为起点到终点的直线。
-
允许/禁止车辆(allow/disallow):
- 可以根据车辆类别定义特定车辆是否允许通行。
是否允许通行
这里描述的是 allow
和 disallow
参数,它们用于控制道路(edge
)的通行权限(access permissions),帮助在多模式(multi-modal)场景中定义哪些车辆类型可以或不能使用某条道路。
参数的作用和规则
1. 默认行为
- 如果未定义
allow
或disallow
:- 没有任何通行限制。
- 这意味着所有类型的车辆都可以使用该道路。
2. allow
的规则
- 作用:
- 明确允许的车辆类型列表。
- 仅允许指定的车辆类型使用该道路,所有未列出的车辆都被禁止通行。
- 语法:
allow="<VEHICLE_CLASS> [<VEHICLE_CLASS>]*"
- 例如:
allow="bus bicycle"
表示只有公交车和自行车可以使用该道路。
- 例如:
- 适用场景:
- 专用车道(如:公交车专用道、自行车道)。
- 禁止某些车辆类型(如货车)的城市中心道路。
3. disallow
的规则
- 作用:
- 明确禁止的车辆类型列表。
- 所有车辆类型都被允许,除了指定的车辆类型被禁止。
- 语法:
disallow="<VEHICLE_CLASS> [<VEHICLE_CLASS>]*"
- 例如:
disallow="pedestrian"
表示禁止行人进入该道路,但其他所有车辆类型都被允许。
- 例如:
- 适用场景:
- 禁止非机动车的高速公路。
- 允许机动车行驶,但禁止行人和自行车。
4. 特殊值 all
- 作用:
disallow="all"
:禁止所有车辆通行。
- 用途:
- 表示完全禁止通行的区域,例如绿化带、人行隔离区等。
- 注意:
allow="all"
没有意义,因为默认情况下没有通行限制。
通行权限的决策逻辑
-
未定义
allow
或disallow
:- 所有车辆类型都可以通行,没有任何限制。
-
仅定义
allow
:- 只有列出的车辆类型可以通行。
- 示例:
<edge id="e1" allow="bus bicycle"/>
- 表示:只有公交车和自行车可以通行。
-
仅定义
disallow
:- 所有车辆类型都可以通行,除了列出的车辆类型被禁止。
- 示例:
<edge id="e2" disallow="pedestrian"/>
- 表示:行人不能使用该道路,其他车辆类型可以通行。
-
定义
disallow="all"
:- 禁止所有车辆使用该道路。
- 示例:
<edge id="e3" disallow="all"/>
- 表示:该道路完全禁止通行,通常用于非车道区域(如绿化带)。
常见车辆类型(VEHICLE_CLASS
)
以下是 SUMO 支持的常见车辆类型,可以在 allow
和 disallow
中使用:
类型 | 描述 |
---|---|
passenger |
乘用车(小轿车)。 |
bus |
公交车。 |
bicycle |
自行车。 |
truck |
卡车或货运车辆。 |
motorcycle |
摩托车。 |
pedestrian |
行人。 |
rail |
火车或轨道车辆。 |
tram |
有轨电车。 |
emergency |
紧急车辆(如救护车、消防车)。 |
all |
所有车辆类型(在 disallow 中表示禁止所有车辆通行)。 |
示例
1. 公交车专用道
<edge id="bus_lane" allow="bus"/>
- 解释:只有公交车可以通行。
2. 禁止行人但允许其他车辆
<edge id="highway" disallow="pedestrian"/>
- 解释:禁止行人通行,其他车辆类型(如汽车、自行车)都被允许。
3. 完全禁止通行的区域
<edge id="green_verge" disallow="all"/>
- 解释:禁止所有车辆通行,通常用于绿化带或隔离区。
4. 高速公路,仅允许机动车
<edge id="motorway" allow="passenger bus truck"/>
- 解释:仅允许乘用车、公交车和货运车辆通行,禁止行人和自行车。
总结
allow
定义允许通行的车辆类型,其他车辆禁止通行。disallow
定义禁止通行的车辆类型,其他车辆被允许。- 如果未定义
allow
或disallow
,则没有任何限制。 - 使用
disallow="all"
可以完全禁止通行。
这是一种非常灵活的机制,可以为不同类型的道路定义专用车道或限制通行规则。如果你有具体的场景需要配置,可以进一步探讨!
车辆车辆的限制
以下是 Lane-specific Definitions(车道特定定义) 的参数整理表,包括每个参数的名称、类型和描述:
参数名称(Attribute Name) | 值类型(Value Type) | 描述(Description) |
---|---|---|
index | int |
车道的索引编号:0 表示最右侧车道,<NUM_LANES>-1 表示最左侧车道。 |
allow | 列表(车辆类别) | 允许使用此车道的车辆类别列表,例如:allow="bus truck" 。 |
disallow | 列表(车辆类别) | 禁止使用此车道的车辆类别列表,例如:disallow="passenger taxi" 。 |
changeLeft | 列表(车辆类别) | 允许从此车道向左变道的车辆类别列表,例如:changeLeft="bus emergency" 。 |
changeRight | 列表(车辆类别) | 允许从此车道向右变道的车辆类别列表,例如:changeRight="passenger truck" 。 |
speed | float |
此车道的最高车速,单位为米/秒(m/s)。 |
width | float |
此车道的宽度,单位为米(用于可视化)。 |
endOffset | float >= 0 |
将停止线从交叉路口向后移动的距离(单位:米),有效缩短车道长度,并局部扩大交叉口范围。 |
shape | 列表(位置:x,y 或 x,y,z ) |
自定义车道的几何形状,定义为位置列表。路径通常以edge 的起点和终点为起始和结束点。 |
type | string |
自定义车道类型的描述,仅用于信息展示,没有实际功能。 |
acceleration | bool |
标识此车道是否为高速公路的加速车道(默认值为 false )。 |
补充说明
-
车道索引(
index
)- 从右向左进行编号。
- 最右侧车道索引为
0
,最左侧车道索引为<NUM_LANES>-1
。
-
通行权限(
allow
和disallow
)- 通过
allow
和disallow
参数控制车辆类别的通行权限。 allow
指定仅允许的车辆类别,其他车辆禁止通行。disallow
指定禁止的车辆类别,其他车辆允许通行。
- 通过
-
车道变道限制(
changeLeft
和changeRight
)- 指定哪些车辆类别可以从当前车道向左或向右变道。
- 建议:应允许紧急车辆(
emergency
)变道,即使车道有其他限制,因为紧急车辆通常可以忽略非物理限制。
-
车速(
speed
)- 定义车道的最高车速,单位为 米/秒(m/s)。
- 不同车道可以设置不同的最高车速。
-
几何形状(
shape
)- 自定义车道的路径(多段折线),通常与
edge
的几何形状一致,但也可以为某些特殊用途定义独立路径。
- 自定义车道的路径(多段折线),通常与
-
加速车道(
acceleration
)- 如果某车道为高速公路的加速车道,可以将其标记为
true
。
- 如果某车道为高速公路的加速车道,可以将其标记为
示例用法
1. 公交车专用车道
<lane index="2" allow="bus"/>
- 解释:只有公交车可以使用索引为 2 的车道(通常是最左侧车道)。
2. 禁止乘用车和出租车
<lane index="0" disallow="passenger taxi"/>
- 解释:禁止乘用车和出租车使用索引为 0 的车道(最右侧车道)。
3. 允许左变道的车辆
<lane index="1" changeLeft="bus emergency"/>
- 解释:索引为 1 的车道允许公交车和紧急车辆向左变道。
4. 自定义车道宽度和车速
<lane index="0" speed="20" width="3.5"/>
- 解释:索引为 0 的车道限制最高车速为 20 m/s,宽度为 3.5 米。
5. 停止线后移
<lane index="1" endOffset="5"/>
- 解释:索引为 1 的车道停止线向后移动 5 米。
总结
- 参数如
allow
和disallow
为车道提供了细粒度的通行权限控制。 changeLeft
和changeRight
允许指定变道规则。- 其他参数如
speed
,width
等可以进一步调整车道的特性。 - 自定义这些参数可以满足复杂的道路模拟需求,特别是在多模式交通仿真中。
split 分道
以下是 Road Segment Refining(道路分段细化) 中 split
元素的参数整理表,包括每个参数的名称、类型和描述:
参数名称(Attribute Name) | 值类型(Value Type) | 描述(Description) |
---|---|---|
pos | float |
分段位置,表示在边(edge)上的距离(单位:米)。如果值为负数,则从边的末端向前计算距离进行分段。 |
lanes | 列表(车道 ID,整数值) | 定义分段后保留的车道编号列表。例如:lanes="0 1" 表示分段后只保留编号为 0 和 1 的车道。 |
speed | float |
分段后车道的最大速度限制(单位:米/秒)。 |
id | id (string) |
新创建节点的唯一标识符。如果未设置,将默认生成 ID,格式为 <EDGE_ID>.<POSITION> 。 |
idBefore | id (string) |
分段前边的 ID(默认为原始边的 ID)。 |
idAfter | id (string) |
分段后边的 ID(默认为 <原始ID>.<POSITION> )。 |
type, tl, tlType, shape, radius, keepClear | 参见 #Node_Descriptions | 分段后生成的节点的其他属性(如类型、交通灯类型等)。 |
功能与作用
-
目的:
- 实现道路的动态细化,调整车道数量或速度限制,而无需将道路划分为多个固定的边(
edges
)。 - 提高道路建模的灵活性,例如表示道路拓宽、变窄或限速变化。
- 实现道路的动态细化,调整车道数量或速度限制,而无需将道路划分为多个固定的边(
-
常见用法:
- 车道减少:移除某些车道,如主干道变为辅道。
- 车道增加:增加额外的车道,如进出高速公路的加速或减速车道。
- 速度限制调整:设置不同区段的速度限制,如进入居民区时降低速度。
参数详细说明
1. pos
- 定义:分段操作的位置。
- 单位:米(m)。
- 用法:
- 如果为正数:从边的起点开始计算。
- 如果为负数:从边的末端向前计算。
- 示例:
<split pos="30"/> <!-- 从起点 30 米处分段 --> <split pos="-30"/> <!-- 从终点前 30 米处分段 -->
2. lanes
- 定义:分段后需要保留的车道列表。
- 值类型:整数列表。
- 用法:
- 列出需要保留的车道编号(从右向左编号,
0
表示最右车道)。 - 未设置时,分段后默认保留所有车道。
- 列出需要保留的车道编号(从右向左编号,
- 示例:
<split pos="30" lanes="0 1"/> <!-- 分段后保留编号为 0 和 1 的车道 -->
3. speed
- 定义:分段后车道的速度限制。
- 单位:米/秒(m/s)。
- 用法:
- 分段后为特定路段设置新的速度限制。
- 未设置时,分段后使用默认速度限制。
- 示例:
<split pos="50" speed="10"/> <!-- 分段后设置速度为 10 m/s -->
4. id
- 定义:新创建节点的唯一标识符。
- 用法:
- 如果未设置,ID 将自动生成,格式为
<EDGE_ID>.<POS>
。 - 可手动指定 ID,用于更好地控制和管理网络结构。
- 如果未设置,ID 将自动生成,格式为
- 示例:
<split pos="30" id="newNode1"/> <!-- 手动设置新节点的 ID -->
5. idBefore
和 idAfter
- 定义:
idBefore
:分段前的边的 ID。idAfter
:分段后的边的 ID。
- 默认值:
idBefore
默认为原始边的 ID。idAfter
默认为<原始ID>.<POS>
。
- 示例:
<split pos="30" idAfter="newEdge"/> <!-- 分段后的边 ID 为 newEdge -->
6. 其他属性
type
、tl
(交通灯)、tlType
、shape
、radius
、keepClear
:- 定义分段后新节点的其他属性(参见节点描述部分的详细说明)。
注意事项
-
车道编号(
lanes
)基于总车道数- 在定义分段时,
lanes
的最大值为边的车道总数减 1。
- 在定义分段时,
-
速度限制默认值
- 如果未定义
speed
,分段后的速度限制将使用边的默认速度。
- 如果未定义
-
双向道路的分段
- 可以同时为正向和反向边定义分段。例如:
<edge id="123"> <split id="newNode" pos="150"/> </edge> <edge id="-123"> <split id="newNode" pos="-150"/> </edge>
- 可以同时为正向和反向边定义分段。例如:
-
位置为 0 的分段
- 如果分段位置为
0
,则分段不会生成新节点,只会直接调整车道数量或速度。
- 如果分段位置为
示例
1. 删除车道
<edge id="edge1" from="nodeA" to="nodeB" numLanes="3" speed="15">
<split pos="50" lanes="0 1" speed="10"/>
</edge>
- 解释:
- 边
edge1
的总车道数为 3,速度限制为 15 m/s。 - 在距离起点 50 米处分段:
- 仅保留车道编号为 0 和 1 的车道。
- 分段后的车速限制为 10 m/s。
- 边
2. 增加车道
<edge id="edge2" from="nodeX" to="nodeY" numLanes="2" speed="20">
<split pos="0" lanes="0 1"/>
<split pos="30" lanes="0 1 2"/>
</edge>
- 解释:
- 边
edge2
最初有 2 条车道。 - 在起点处定义初始车道为 0 和 1。
- 在 30 米处分段,增加一条车道(车道编号为 2)。
- 边
总结
split
元素使得在同一条边中可以动态调整车道数量和速度限制,提升了建模的灵活性。- 核心参数包括分段位置(
pos
)、分段后的车道(lanes
)和速度(speed
)。 - 可结合双向道路和节点属性定义更复杂的网络结构。
Roundabouts 环形路口
相同道路不同方向的边,两个lane
配置内容解释:
-
定义了两条边:
- 边
a
(从节点X
到节点Y
),有两个车道(numLanes="2"
)。 - 边
b
(从节点Y
到节点X
),方向与边a
相反。
- 边
-
邻接关系声明:
- 在边
a
中,使用<neigh lane="b_0"/>
指定它的 第一个车道(从编号0开始) 与边b
的第一个车道(b_0
)相邻。 - 在边
b
中,使用<neigh lane="a_1"/>
指定它的 第一个车道(b_0
) 与边a
的第二个车道(a_1
)相邻。
- 在边
具体含义:
这种设置声明了两条边的内侧车道(最靠近中线的车道)是 邻接 的,也就是驾驶过程中可以在这些车道之间切换(比如超车或掉头时)。
-
对于 边
a
,车道编号:a_0
是靠外的车道。a_1
是靠内的车道,与b_0
邻接。
-
对于 边
b
,车道编号:b_0
是靠内的车道,与a_1
邻接。
应用场景:
这种定义通常用于模拟双向交通,特别是在需要精确控制车道相邻关系的仿真场景中,比如道路中线允许临时超车或者掉头的情况。
可视化帮助:
假如我们有如下的双向道路:
X --------> Y (边 a, 2个车道: a_0, a_1)
Y <-------- X (边 b, 1个车道: b_0)
配置说明 a_1 和 b_0 是邻接的。即:
a_1
(a的内侧车道)可以连接到b_0
。- 模拟器中车辆可能会在
a_1
和b_0
之间切换以模拟现实交通。
删除车道
以下是对上述内容的整理:
删除边或车道
在 SUMO 中,可以通过以下方式删除边或车道:
-
删除整个边:
<edges> <delete id="a"/> <!-- 删除 id 为 "a" 的边 --> </edges>
-
删除某条边的指定车道:
<edges> <delete id="a" index="0"/> <!-- 删除 id 为 "a" 的第一个车道 --> </edges>
-
删除特定类型的所有边:
- 可以通过在
<type>
元素中使用remove="true"
来删除某个类型的所有边。
- 可以通过在
使用type类型辅助边的定义 + 边类型描述
边类型(Edge Types)是用于统一定义边属性的工具,简化了边的配置。
边类型文件的基本信息:
- 文件扩展名:
.typ.xml
- 用途: 定义边类型及其属性。
- 格式: XML 格式,符合
types_file.xsd
。 - 特点: 专为 SUMO 设计。
边类型属性:
- 边类型的属性与边本身的属性相同,但边类型中不包括节点的起点和终点。
- 常用属性包括:
numLanes
: 车道数量。speed
: 允许的最大速度。priority
: 优先级。allowed/disallowed vehicle classes
: 允许/禁止的车辆类型。
通过边类型简化边的定义
可以在边的定义中通过 type
属性引用定义好的边类型。
边的定义示例:
<edges>
<edge id="1fi" from="1" to="m1" type="b"/> <!-- 使用类型 "b" -->
<edge id="1si" from="m1" to="0" type="a"/> <!-- 使用类型 "a" -->
<edge id="1o" from="0" to="1" type="c"/> <!-- 使用类型 "c" -->
</edges>
对应的边类型文件:
<types>
<type id="a" priority="3" numLanes="3" speed="13.889"/> <!-- 类型 "a" -->
<type id="b" priority="2" numLanes="2" speed="11.111"/> <!-- 类型 "b" -->
<type id="c" priority="1" numLanes="1" speed="11.111"/> <!-- 类型 "c" -->
</types>
解析说明:
- 边
1fi
使用类型b
,所以它继承了以下属性:numLanes=2
,speed=11.111
,priority=2
。
- 边
1si
使用类型a
,所以它继承了:numLanes=3
,speed=13.889
,priority=3
。
- 边
1o
使用类型c
,继承了:numLanes=1
,speed=11.111
,priority=1
。
总结:边和边类型的关系
-
边类型的作用:
- 避免重复设置相同的属性,便于统一管理。
- 提高配置的可读性和可维护性。
-
定义方式:
- 在
<types>
文件中定义边类型。 - 在
<edges>
文件中通过type
属性引用这些类型。
- 在
-
灵活性:
- 如果需要删除某些边或特定类型的边,使用
<delete>
或remove="true"
即可实现。
- 如果需要删除某些边或特定类型的边,使用
通过以上方式,可以高效地管理复杂路网中的边和车道定义。
为不同的车辆类别(vehicle class,vClass)设置特定的速度限制
这部分内容解释了如何为不同的车辆类别(vehicle class,vClass)设置特定的速度限制。以下是整理和总结:
通过 <type>
定义车辆类别特定的速度限制
在 SUMO 中,可以在 <type>
元素中使用 <restriction>
子元素为特定的车辆类别设置速度限制。这种方法可以为不同类型的车辆(如卡车、公共汽车等)单独定义速度限制,而不会影响其他车辆。
示例:
<type id="a" priority="3" numLanes="3" speed="38.89">
<restriction vClass="truck" speed="27.89"/>
</type>
解析:
id="a"
: 定义了类型为a
的边。speed="38.89"
: 默认速度限制为 38.89 m/s(约 140 km/h)。<restriction>
: 为指定车辆类别设置限制:vClass="truck"
: 表示限制仅对车辆类别为卡车(truck)的车辆生效。speed="27.89"
: 卡车的最高速度限制为 27.89 m/s(约 100 km/h)。
应用场景:
德国高速公路上的卡车限速示例:
- 在德国,高速公路上对小汽车的限速较高(或无上限),但卡车(truck)的最高速度通常不得超过 100 km/h。
- 通过上述定义,卡车的速度限制为 100 km/h,而小汽车仍可以使用更高的速度。
与其他方法的区别:
- 虽然可以通过直接设置卡车的
maxSpeed
属性来实现限速,但这样做会失去模拟速度分布的灵活性(如speedDev
和speedFactor
属性)。 - 使用
<restriction>
,可以在保持车辆速度随机分布的基础上,强制遵循法定的速度限制。
直接加载 vClass 限速文件
- 速度限制还可以通过额外的文件加载到 SUMO 中,适用于更复杂的场景管理。
- 在这种情况下,只需要指定
type
的id
属性,而限制规则在另一个文件中定义。
示例:
<types>
<type id="highway_type"/>
</types>
附加文件:
<restrictions>
<restriction id="highway_type" vClass="truck" speed="27.89"/>
</restrictions>
总结:
-
核心功能:
- 针对特定车辆类别(vClass)设置速度限制,而不影响其他类别车辆。
- 支持更精细化的仿真,比如同时模拟卡车和小汽车在同一路段的不同速度行为。
-
实现方法:
- 在
<type>
元素中嵌套<restriction>
子元素。 - 或者通过单独的文件加载速度限制规则。
- 在
-
优势:
- 与直接设置
maxSpeed
不同,这种方法允许使用速度分布参数(如speedDev
和speedFactor
),以更真实地模拟车辆速度的变化。
- 与直接设置
关于边和边连接,道路和道路连接的设置
以下是整理后的 SUMO 中关于手动设置或删除边/车道连接的参数和选项说明:
基本连接设置
定义连接的格式
-
仅定义边到边的连接:
<connection from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>"/>
- 允许从边
<FROM_EDGE_ID>
到<TO_EDGE_ID>
的车辆通行。 - 如果未定义其他连接,默认禁止从
<FROM_EDGE_ID>
到其他边的通行。
- 允许从边
-
定义车道到车道的连接:
<connection from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>" fromLane="<INT_1>" toLane="<INT_2>"/>
- 指定从边
<FROM_EDGE_ID>
的车道<INT_1>
到边<TO_EDGE_ID>
的车道<INT_2>
的连接。
- 指定从边
参数说明
参数名 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
from |
referenced edge id | 必填 | 离开连接的边的名称。 |
to |
referenced edge id | 必填 | 到达连接的边的名称。如果省略或为空,表示禁止从该边进行任何连接。 |
fromLane |
<INT> |
无 | 连接的起点车道索引(从右向左编号,从0开始)。 |
toLane |
<INT> |
无 | 连接的终点车道索引(从右向左编号,从0开始)。 |
高级连接参数
额外属性说明
参数名 | 数据类型 | 默认值 | 描述 |
---|---|---|---|
pass |
bool |
false |
是否允许车辆无等待通过此连接。 |
keepClear |
bool |
true |
是否允许车辆阻塞交叉口。 |
contPos |
float |
-1 |
内部交叉点的生成位置(以米为单位),设置为0时不生成内部交叉点。 |
visibility |
float |
4.5 |
可见距离(以米为单位),低于此距离车辆会全速加速通过连接。 |
speed |
float |
-1 |
连接处的最大通过速度(以米/秒为单位)。 |
shape |
list of positions |
无 | 自定义连接形状(用 x,y 或 x,y,z 格式,不允许空格)。 |
uncontrolled |
bool |
false |
是否不受交通信号灯控制。 |
allow |
list of vClass |
无 | 允许使用此连接的车辆类别列表。 |
disallow |
list of vClass |
无 | 禁止使用此连接的车辆类别列表。 |
changeLeft |
list of vClass |
无 | 允许左侧换道的车辆类别列表。 |
changeRight |
list of vClass |
无 | 允许右侧换道的车辆类别列表。 |
length |
float |
无 | 自定义连接的长度。 |
indirect |
bool |
false |
声明间接(两步)转向移动,影响几何形状和优先权分配。 |
type |
string |
无 | 设置自定义边类型,用于应用车辆类别特定的速度限制。 |
删除连接
格式
-
删除边到边的连接:
<delete from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>"/>
- 删除从
<FROM_EDGE_ID>
到<TO_EDGE_ID>
的所有连接。
- 删除从
-
删除车道到车道的连接:
<delete from="<FROM_EDGE_ID>" to="<TO_EDGE_ID>" fromLane="<INT_1>" toLane="<INT_2>"/>
- 删除从
<FROM_EDGE_ID>
的车道<INT_1>
到<TO_EDGE_ID>
的车道<INT_2>
的连接。
- 删除从
参数说明
参数名 | 数据类型 | 描述 |
---|---|---|
from |
referenced edge id | 删除的源边名称。 |
to |
referenced edge id | 删除的目标边名称。 |
fromLane |
<INT> |
删除的起点车道索引(可选)。 |
toLane |
<INT> |
删除的终点车道索引(可选)。 |
总结
-
基本连接设置:
- 使用
<connection>
定义从边到边、或从车道到车道的连接。 - 未定义的连接会被默认禁止。
- 使用
-
高级属性:
- 可以设置连接的速度限制、形状、可见性、允许的车辆类别等,提供更细致的控制。
-
删除连接:
- 使用
<delete>
删除边或车道间的连接。
- 使用
通过这些设置,可以精确地控制路网的连接行为,满足复杂的交通仿真需求。
定义从哪条车道出,哪条车道进
这三个图展示了 SUMO 中通过显式定义连接如何影响路网的行为。以下是每张图的详细解读:
图 1: Unconstrained Network (无约束网络)
-
描述:
- 这是一个默认生成的十字路口示例。
- 路网未定义任何具体的连接关系,所有转向和通行连接由 SUMO 的默认算法 推断生成。
- 在这种情况下:
- 每条进入的边(incoming edge)可以与所有可能的退出边(outgoing edge)连接。
- 包括直行、左转和右转的所有转向行为都被允许。
-
特性:
- 无显式约束连接行为。
- 所有可能的连接均被允许,适用于快速构建简单的路网。
图 2: Network with Explicit Edge-to-Edge Connections (显式边到边连接)
- 描述:
- 此图通过一个连接文件显式限制了某些边的连接。
- 示例中,定义了仅允许从 “1si” 到 “30” 和 “20”,以及从 “2si” 到 “40” 和 “10” 的连接。
- 具体 XML 定义如下:
<connections> <connection from="1si" to="30"/> <connection from="1si" to="20"/> <connection from="2si" to="40"/> <connection from="2si" to="10"/> </connections>
- 效果:
- 水平边(1si 和 2si)仅允许直行或右转,不允许左转行为。
- 比默认的无约束网络更有控制力,适合需要限制部分连接的场景。
图 3: Network with Explicit Lane-to-Lane Connections (显式车道到车道连接)
- 描述:
- 此图通过更详细的连接文件,显式定义了每条车道的连接关系。
- 示例中,指定了进入边的第二条车道与退出边的特定车道之间的连接:
<connections> <connection from="1si" to="30" fromLane="0" toLane="0"/> <connection from="1si" to="20" fromLane="2" toLane="0"/> <connection from="2si" to="40" fromLane="0" toLane="0"/> <connection from="2si" to="10" fromLane="2" toLane="0"/> </connections>
- 效果:
- 比前一图进一步细化了车道的连接。
- 例如,从 “1si” 的第 0 车道只能连接到 “30” 的第 0 车道。
- 提供了更细粒度的控制,可用于复杂的交叉口设计或特殊规则实现。
注意事项
-
文件定义方式:
- 第一张图未定义连接,默认生成。
- 第二张图通过边到边的连接定义文件(edge-to-edge connection)。
- 第三张图通过车道到车道的连接定义文件(lane-to-lane connection)。
-
重要提示:
- 不要同时对同一条进入边既定义“边到边”连接,又定义“车道到车道”连接,这会导致不确定行为。
总结
- 图 1 (Unconstrained Network):
- 默认连接,允许所有可能的转向。
- 图 2 (Explicit Edge-to-Edge Connections):
- 限制某些边之间的连接,适合简单控制的场景。
- 图 3 (Explicit Lane-to-Lane Connections):
- 精确到车道级别的控制,适合复杂的交叉口和特殊规则。
选择合适的连接类型定义方式,取决于路网的复杂性和仿真需求。
设置右转优先级的降低
这句话的意思是:
自 SUMO 版本 0.9.6 起,可以通过显式设置优先权规则,使通过某一连接的车辆需要等待另一方向车流通行。这意味着,在交叉路口中,可以人为控制哪些车流有优先权,哪些车流需要等待。
具体来说,这里提到的例子:
-
网络上下文:
- 这是一个十字路口,其中有水平边(左右方向)和垂直边(上下方向)。
- 默认情况下,右转车辆(right-moving vehicles)总是可以通行,即不受阻碍地完成右转。
-
优先权调整:
- 通过文件中的定义,指定让垂直方向上右转的车辆(例如从北向东或从南向西的右转),等待水平方向直行的车辆(例如从西向东或从东向西的直行车流)。
-
实现方法:
- 在连接文件中使用
<prohibition>
标签,定义了优先流向(prohibitor) 和 受限流向(prohibited)。 - 例如:
<prohibition prohibitor="2si->1o" prohibited="4si->1o"/>
- prohibitor:
2si->1o
表示从南向北直行的车流有优先权。 - prohibited:
4si->1o
表示从北向东右转的车流需要等待南向北直行的车流。
- prohibitor:
- 在连接文件中使用
-
实际效果:
- 当水平直行车辆正在通过时,垂直方向的右转车辆会被迫等待,直到水平直行车流清空。
- 这种设置打破了默认规则(右转优先),通过明确的优先权定义,让特定方向的车辆更顺畅地通过路口。
总结:
这句话的核心意思是:
- 默认情况下,右转车辆可以通行(优先权)。
- 通过设置连接优先规则,可以让某些车流(如垂直方向右转车辆)优先权降低,从而需要等待另一车流(如水平直行车流)的通行。
同一方向优先级的设置
是的,pass="true"
的确是用来改变进入同一目标车道的优先级的设置。
详细解读:
-
默认行为:
- 当多个车道连接到同一目标车道时,右侧车道优先(车道编号越小的车道,优先级越高)。
- 例如,如果有两条连接:
<connection from="WC" to="CE" fromLane="0" toLane="0"/> <connection from="WC" to="CE" fromLane="1" toLane="0"/>
- 默认情况下:
fromLane="0"
的车流(右车道)会优先进入toLane="0"
。fromLane="1"
的车流(左车道)需要等待。
- 默认情况下:
-
pass="true"
的作用:- 赋予当前连接优先权,即即使它本来不是默认优先级较高的车道,它也会被优先考虑。
- 例如:
<connection from="WC" to="CE" fromLane="0" toLane="0"/> <connection from="WC" to="CE" fromLane="1" toLane="0" pass="true"/>
- 这表示:
- 即使
fromLane="1"
(左车道)本来不是优先车道,由于有pass="true"
,它现在被赋予了优先权。 fromLane="0"
的车流需要等待fromLane="1"
的车流先通过。
- 即使
- 这表示:
-
优先权控制机制:
- 默认优先权规则:右车道优先。
- 显式优先权设置:通过
pass="true"
,手动调整特定车道的优先权。 - 实现无冲突的合流:SUMO 会根据这些优先权设定,确保多个车道连接到同一目标车道时不发生冲突。
应用场景:
-
合流控制:
- 在路段合流时,手动设置某些车道的优先级,确保车辆按预期顺序进入目标车道。
-
特殊优先级需求:
- 模拟现实中某些道路场景,例如:
- 左侧车道可能是主车道,因此需要赋予其优先权。
- 右车道可能是匝道车流,需让主车道车辆先通过。
- 模拟现实中某些道路场景,例如:
总结:
pass="true"
的作用:改变默认的优先权规则,赋予当前连接更高的优先权。- 用法场景:在需要控制车道合流或交叉口车辆通行顺序时非常有用。
- 实际效果:SUMO 仿真会根据设置,优先让有
pass="true"
的连接先通过,从而实现更精确的交通行为控制。
交通灯的设置
以下是关于 SUMO 中交通信号灯定义(Traffic Light Definitions)以及受控连接(Controlled Connections)的参数设置整理:
<tlLogic>
元素
-
作用:
- 定义交通信号灯逻辑(信号计划)。
- 可以嵌入到
.net.xml
文件中,也可以单独加载到仿真中。
-
限制:
- 不支持将 WAUTs(动态信号计划切换) 嵌入到
.net.xml
中,必须作为附加文件加载。
- 不支持将 WAUTs(动态信号计划切换) 嵌入到
<connection>
元素
- 作用:
- 定义交通信号灯与受控连接(车道连接)的关系。
- 用于简化信号计划(例如,通过信号组将多个连接绑定到同一个信号阶段)。
- 允许单个信号灯控制多个交叉口。
<connection>
元素参数说明
参数名 | 数据类型 | 描述 |
---|---|---|
from | referenced edge id | 定义车辆离开的边(来源边)的名称。 |
to | referenced edge id | 定义车辆到达的边(目标边)的名称。 |
fromLane | int |
定义进入边的车道索引(从 0 开始编号,右侧为 0)。 |
toLane | int |
定义目标边的车道索引(从 0 开始编号,右侧为 0)。 |
tl | string |
控制此连接的信号灯 ID(信号灯控制器 ID)。 |
linkIndex | int |
与 <phase> 元素中的 state 属性的索引对应,用于控制此连接的状态。 |
示例说明
1. 交通信号灯逻辑定义
<tlLogic id="tl1" type="static" programID="1" offset="0">
<phase duration="31" state="GGrr"/>
<phase duration="6" state="yyrr"/>
<phase duration="31" state="rrGG"/>
<phase duration="6" state="rryy"/>
</tlLogic>
-
tlLogic 参数:
id="tl1"
:信号灯的唯一标识符。type="static"
:信号灯类型,表示静态固定周期信号灯。programID="1"
:信号灯的程序 ID。offset="0"
:信号灯的初始偏移量。
-
phase 定义:
duration
:信号灯阶段的持续时间(单位:秒)。state
:阶段状态,定义各方向信号灯的颜色:G
:绿灯。y
:黄灯。r
:红灯。- 每个字符对应一个方向的信号灯状态。
2. 定义受控连接
<connection from="edge1" to="edge2" fromLane="0" toLane="0" tl="tl1" linkIndex="0"/>
<connection from="edge1" to="edge3" fromLane="0" toLane="1" tl="tl1" linkIndex="1"/>
- connection 参数:
from="edge1"
:车辆离开的边 ID(来源边)。to="edge2"
:车辆到达的边 ID(目标边)。fromLane="0"
:来源边的第 0 车道。toLane="0"
:目标边的第 0 车道。tl="tl1"
:信号灯 ID,表示此连接由信号灯tl1
控制。linkIndex="0"
:信号灯状态中对应的索引,表示此连接由<phase>
中的第 0 位字符控制。
信号灯与受控连接的结合
信号灯定义:
<tlLogic id="tl1" type="static" programID="1" offset="0">
<phase duration="31" state="GGrr"/>
<phase duration="6" state="yyrr"/>
<phase duration="31" state="rrGG"/>
<phase duration="6" state="rryy"/>
</tlLogic>
state="GGrr"
表示:- 前两位(对应 linkIndex 0 和 1):绿灯。
- 后两位(对应 linkIndex 2 和 3):红灯。
受控连接定义:
<connections>
<connection from="edge1" to="edge2" fromLane="0" toLane="0" tl="tl1" linkIndex="0"/>
<connection from="edge1" to="edge3" fromLane="0" toLane="1" tl="tl1" linkIndex="1"/>
</connections>
- 第 0 和第 1 个连接由
linkIndex
控制:- 当
state="GGrr"
时,edge1->edge2
和edge1->edge3
可以通行。
- 当
总结:
-
<tlLogic>
定义交通信号灯的逻辑:- 包括信号灯 ID、类型(静态/动态)、程序 ID、阶段持续时间及对应状态。
-
<connection>
定义受控连接:- 连接来源边和目标边,同时指定控制此连接的信号灯和对应的信号阶段索引。
-
linkIndex
的作用:- 通过索引将信号灯的状态(
state
)与连接绑定,实现特定连接的通行控制。
- 通过索引将信号灯的状态(
-
使用建议:
- 如果需要简化信号控制,可以将多个连接绑定到相同的
linkIndex
,实现分组控制。 - 使用
netconvert --plain-output-prefix
可以提取示例文件,快速了解定义格式。
- 如果需要简化信号控制,可以将多个连接绑定到相同的
行人
是的,<crossing>
和 <walkingArea>
在 SUMO 中的功能和现实中的对应关系可以理解为:
1. <crossing>
:斑马线
-
功能:
- 用于定义行人过街的位置,即行人从一个道路边(
edge
)跨越到另一个道路边的路径。 - 现实中对应斑马线或人行过街道。
- 用于定义行人过街的位置,即行人从一个道路边(
-
典型特性:
- 通常与车辆行驶的道路(
edge
)相关联,定义行人横跨这些道路的路径。 - 可以设置优先权(
priority
):priority=true
:车辆需要为行人让行(如信号灯控制的斑马线)。priority=false
:行人需要等候车辆空隙(如无优先权的普通斑马线)。
- 形状(
shape
)通常是一条直线,但可以根据需要定义为曲线或其他形状。
- 通常与车辆行驶的道路(
-
现实示例:
- 十字路口中连接两个行人道的斑马线。
- 单独的道路斑马线(如在非信号灯控制的街区中)。
2. <walkingArea>
:行人道
-
功能:
- 用于定义行人专用区域,通常是步行道、人行道或行人活动的开放区域。
- 连接多个行人道或与其他行人过街设施(
<crossing>
)相连。
-
典型特性:
- 主要用于行人专属的路径或区域。
- 形状(
shape
)可以定义为多边形,表示行人道的边界。 - 可以与行人过街设施(
<crossing>
)搭配使用,为行人提供完整的通行路径。
-
现实示例:
- 路口角落的步行区域。
- 与道路平行的人行道。
- 行人广场或开放区域(如商场入口或公园步行区)。
3. <crossing>
和 <walkingArea>
的关系
<crossing>
(斑马线)通常连接两个<walkingArea>
(人行道或步行区域)。- 在仿真中,它们共同定义了行人如何在路网中移动:
- 行人从一个步行区域(
<walkingArea>
)出发。 - 使用
<crossing>
横穿车道(edge
)。 - 到达另一个步行区域(
<walkingArea>
)。
- 行人从一个步行区域(
总结:现实对应关系
SUMO 元素 | 现实对应 | 用途 |
---|---|---|
<crossing> |
斑马线或行人过街道 | 行人横穿车辆车道时的路径,定义行人与车辆的交互关系。 |
<walkingArea> |
人行道、步行区或行人活动区域 | 行人的专用区域,连接行人设施(如斑马线),用于构建完整的行人网络。 |
通过这两者的组合,可以模拟真实世界中行人和车辆的互动,并为行人提供完整的出行路径设计。