车辆、车辆类型和路径的定义
文件扩展名 .rou.xml
内容类型 车辆、车辆类型和路径
开放格式?
SUMO 特有?
XML Schema routes_file.xsd

各种应用程序可用于根据现有输入数据定义 SUMO 的车辆需求。也可以使用 netedit 以可视化方式创建和编辑交通需求。所有这些应用程序最终都会创建 XML 定义。

当然,也可以手动定义需求文件或使用文本编辑器编辑生成的文件。在开始之前,重要的是要知道 SUMO 中的车辆由三个部分组成:

  • 描述车辆物理属性的车辆类型,
  • 车辆应遵循的路径(route),
  • 以及车辆本身。

路径和车辆类型都可以被多个车辆共享。不强制定义车辆类型。如果未给出,则使用默认类型。车辆的驾驶员不必显式建模。对于在车辆中行走或乘坐的人员的模拟,需要额外的定义

车辆和路径#

首先,我们将定义一个带有其所属路径的车辆:

<routes>
    <vType id="type1" accel="0.8" decel="4.5" sigma="0.5" length="5" maxSpeed="70"/>

    <vehicle id="0" type="type1" depart="0" color="1,0,0">
      <route edges="beg middle end rend"/>
    </vehicle>

</routes>

通过向 sumo(或 sumo-gui)提供这样的路径定义,sumo 将构建一个红色(color=1,0,0)的 "type1" 类型的车辆,名为 "0",它在时间 0 启动。该车辆将沿着街道 "beg"、"middle"、"end" 行驶,一旦它接近边缘 "rend",它将从模拟中移除。

该车辆拥有自己的内部路径,不与其他车辆共享。也可以定义两个使用相同路径的车辆。在这种情况下,路径必须“外部化”——在被车辆引用之前定义。此外,必须通过给它一个 id 来命名路径。使用该路径的车辆通过 "route" 属性引用它。完整的更改如下所示:

<routes>
    <vType id="type1" accel="0.8" decel="4.5" sigma="0.5" length="5" maxSpeed="70"/>

    <route id="route0" color="1,1,0" edges="beg middle end rend"/>

    <vehicle id="0" type="type1" route="route0" depart="0" color="1,0,0"/>
    <vehicle id="1" type="type1" route="route0" depart="0" color="0,1,0"/>

</routes>

可用的车辆属性#

可以使用以下属性定义车辆:

属性名称 值类型 描述
id id (字符串) 车辆的名称
type id 用于此车辆的车辆类型的 id。
route id 车辆应沿其行驶的路径的 id
color 颜色 此车辆的颜色
depart float (s) 或 人类可读时间triggered, containerTriggered, begin 之一 车辆进入网络的时间步长;参见 #depart。或者,车辆在人员进入容器被装载时出发
departLane int/string (≥0, "random", "free", "allowed", "best", "first", "best_prob") 车辆应被插入的车道;参见 #departLane默认值: "first",可以使用选项 --default.departlane 设置默认值
departPos float(m)/string ("random", "free", "random_free", "base", "last", "stop", "splitFront") 车辆应进入网络的位置;参见 #departPos默认值: "base"
departSpeed float(m/s)/string (≥0, "random", "max", "desired", "speedLimit", "last", "avg") 车辆进入网络时的速度;参见 #departSpeed默认值: 0,默认值可以使用选项 --default.departlane 设置
departEdge int (索引,从 [0, routeLength[ 或 "random") 车辆应进入网络的路径上的初始边缘(仅在定义了完整路径时支持);参见 #departEdge默认值: 0
arrivalLane int/string (≥0,"current") 车辆应离开网络的车道;参见 #arrivalLane默认值: "current"
arrivalPos float(m)/string (≥0(1), "random", "max") 车辆应离开网络的位置;参见 #arrivalPos默认值: "max"
arrivalSpeed float(m/s)/string (≥0,"current") 车辆离开网络时的速度;参见 #arrivalSpeed默认值: "current"
arrivalEdge int (索引,从 [0, routeLength[ 或 "random") 车辆应离开网络的路径上的最终边缘(仅在定义了完整路径时支持);参见 #arrivalEdge
line string 指定公共交通线路 id 的字符串,可用于在指定人员乘车
personNumber int (在 [0,personCapacity] 范围内) 车辆插入时占用的座位数。默认值: 0
containerNumber int (在 [0,containerCapacity] 范围内) 车辆插入时占用的容器位置数。默认值: 0
reroute bool 车辆是否应配备重新路径规划设备(将此设置为 false 不会优先于其他分配选项)
via id 列表 应在重新路径规划时经过的中间边缘列表

注意: 如果未设置 via,属于此路径的任何 <stop> 元素将自动用作中间边缘。否则 via 优先。
departPosLat float(m)/string ("random", "free", "random_free", "left", "right", "center") 车辆进入网络时在出发车道上的横向位置;参见 Simulation/SublaneModel默认值: "center"
arrivalPosLat float(m)/string ("default", "left", "right", "center") 车辆到达时在到达车道上的横向位置;参见 Simulation/SublaneModel。默认情况下,车辆不关心横向到达位置
speedFactor float > 0 设置自定义的 speedFactor(道路速度限制的乘数)并覆盖车辆类型的 speedFactor 分布
insertionChecks string 列表 设置在车辆插入期间要执行的安全检查列表。可能的值为:all, none, collision, leaderGap, followerGap, junction, stop, arrivalSpeed, oncomingTrain, speedLimit, pedestrian。默认 all
parkingBadges string 列表 用于访问受限停车区域的关键词列表(默认的空列表仍将允许访问不受限制的停车区域)

注意

由属性 typeroute 引用的任何车辆类型或路径必须在使用之前定义。加载顺序在此描述。

重复车辆(流)#

可以定义重复的车辆排放(“流”),它们具有与车辆或行程定义相同的参数,除了出发时间。创建的车辆的 id 是 "flowId.runningNumber",它们在给定的时间间隔内均匀或随机分布。已知以下附加参数:

属性名称 值类型 描述
begin float (s) 或 人类可读时间triggered, containerTriggered 之一 第一个车辆出发时间
end float(s) 出发间隔的结束时间(如果未定义,则默认为 24 小时)
vehsPerHour float(#/h) 每小时的车辆数,等间距(不与 period 或 probability 一起使用)
period float(s) 或 "exp(X)",其中 x 是 float 如果给定浮点数,则以该周期等间距插入车辆。如果给定 exp(X),则以指数分布的时间间隔插入车辆。这将插入转变为泊松过程,每秒预期插入 X 次(不与 vehsPerHour 或 probability 一起使用),另见 Simulation/Randomness
probability float([0,1]) 每秒发射一辆车的概率(不与 vehsPerHour 或 period 一起使用),另见 Simulation/Randomness
number int(#) 车辆总数,等间距

流可以像车辆一样显式定义其路径,也可以使用 from,to,via(像行程一样):

<flow id="type1" color="1,1,0"  begin="0" end= "7200" period="900" type="BUS">
    <route edges="beg middle end rend"/>
    <stop busStop="station1" duration="30"/>
</flow>

<route id="route1" edges="beg middle end rend"/>
<flow id="type2" color="1,1,0"  begin="0" end= "7200" period="900" type="BUS" route="route1">
    <stop busStop="station1" duration="30"/>
</flow>

<flow id="type3" color="1,1,0"  begin="0" end= "7200" period="900" type="BUS" from="beg" to="end">
    <stop busStop="station1" duration="30"/>
</flow>

注意

虽然流和车辆定义可以任意混合,但路径文件必须始终按出发/开始时间排序。

如果要加载未排序的车辆/流,则将文件作为附加文件加载。这将一次性加载整个文件,从而增加内存消耗。你也可以使用 tools/route/sort_routes.py 来排序路径文件。

路径#

人们可能会注意到,路径本身也有一个颜色定义,所以路径的属性是:

属性名称 值类型 描述
id id (字符串) 路径的名称
edges id 列表 车辆应沿其行驶的边缘,以它们的 id 给出,用空格分隔
color 颜色 此路径的颜色
repeat int 此路径的边缘应重复的次数(默认 0)
cycleTime time (s) 当定义带有停靠点的重复路径,并且这些停靠点使用 until 属性时,时间将在每次重复时向前移动 'cycleTime'

在构建自己的路径时,有几件重要的事情需要考虑:

  • 路径必须是连接的。目前,如果路径的下一个边缘不是当前边缘的后继者,或者车辆不允许在任何车道上行驶,模拟会报错。如果你想要旧行为,即车辆在当前边缘末端停止,并可能在等待时间后“传送”到下一个边缘,请使用选项 --ignore-route-errors
  • 路径必须包含至少一个边缘。
  • 路径文件必须按开始时间排序。事实上,这只有在你定义了大量路径或出发时间之间有较大间隔时才相关。模拟参数 --route-steps(默认为 200)定义了模拟加载其路径的时间间隔大小。这意味着默认情况下,在启动时,只加载出发时间 <200 的路径,如果所有车辆都已出发,则加载出发时间高达 400 的路径,依此类推。这仅在路径文件已排序的情况下有效。可以通过指定 --route-steps 0 来禁用此行为。可以将未排序的路径文件作为附加文件加载,这将一次性加载整个文件。

前两个条件可以使用 <SUMO_HOME>/tools/route/routecheck.py 检查,第三个可以使用 <SUMO_HOME>/tools/route/sort_routes.py “修复”。

注意

如果给定未排序的路径文件和人员定义,sumo 可能会进入无限循环。

重复路径#

当使用属性 'repeat' 来重复路径时。边缘的数量将在第一次行驶后重复给定的次数。 如果路径是作为独立路径定义的(在车辆定义之外有自己的 id),则路径中定义的任何停靠点也将被重复。如果停靠点使用属性 'until',它们将在每次迭代中按属性 'cycleTime' 偏移。

注意

当将路径定义为车辆的子元素时,任何定义的停靠点将属于车辆而不是路径,并且不会被重复。

注意

当重复的路径只包含一个停靠点时,该停靠点的所有重复实例都将位于路径的第一次迭代中。可以通过在第一个停靠点之后稍加第二个停靠点 duration="0" 来避免这种情况。

不完整路径(行程和流)#

模拟的需求信息也可以采用出发和目的地方案的形式,而不是完整的边缘列表。在这种情况下,模拟根据出发/流开始时网络中的交通状况执行最快路径路由。可选地,可以使用 via 属性指定中间边缘列表。输入格式与 duarouter 应用程序完全相同,可以在此处找到

<routes>
  <trip id="t" depart="0" from="beg" to="end"/>
  <flow id="f" begin="0" end="100" number="23" from="beg" to="end"/>
  <flow id="f2" begin="0" end="100" number="23" from="beg" to="end" via="e1 e23 e7"/>
</routes>

有关如何处理路由错误和在此情况下影响路由的更多详细信息,请参见 Demand/Automatic_Routing

有关流和行程的受支持属性,请参见此处。

交通分配区 (TAZ)#

也可以让车辆在交通分配区 (TAZ) 出发和到达。这允许从预定义的边缘列表中选择出发和到达边缘。使用那些从源 TAZ 到目的 TAZ 旅行时间最小的边缘。当将行程加载到 duarouter 时,使用加载的旅行时间(空网络旅行时间作为默认值)。当将行程加载到 sumo 时,使用网络中当前的旅行时间,由重新路由设备确定。

<routes>
  <trip id="t" depart="0" fromTaz="taz1" toTaz="taz2"/>
</routes>
<additional>
  <taz id="<TAZ_ID>" edges="<EDGE_ID> <EDGE_ID> ..."/>
  ...
</additional>

注意

当在 duaroutersumo 中使用时,TAZ 内的边缘权重被忽略。

当在 sumo-gui 中加载 <taz> 时,可以使用可选属性 shape 来绘制任意多边形边框以可视化交通分配区。

注意

当将 TAZ 与 sumoduarouter 一起使用时,将选择它们的边缘以最小化旅行时间。这与在 od2trips 中使用 TAZ 不同,后者根据概率分布选择边缘。

路由在交叉口之间#

行程和流可以使用属性 fromJunctiontoJunctionviaJunctions 来描述起点、终点和中间位置。这是 TAZ 路由的一种特殊形式,必须通过设置 SUMO 选项 --junction-taz 或加载使用相应交叉口 ID 的 TAZ 定义来启用。当使用选项 --junction-taz 时,来自交叉口的所有出边都可以在起点使用,所有进入交叉口的入边都可以用于到达中间和最终交叉口。

来自停靠点的隐式起点和终点#

如果行程或流定义了至少一个停靠点作为子元素,则可以省略属性 'from' 和 'to'。在这种情况下,第一个停靠点的边缘将用作 'from' 边缘,最后一个停靠点的边缘将用作 'to' 边缘。

注意

与隐式起点的一个很好的组合是设置属性 departPos="stop",以使车辆从第一个停靠点的确切位置开始。

车辆的出发和到达参数#

使用 depart...arrival... 属性,可以控制车辆如何插入网络以及如何离开网络。

depart#

确定车辆进入网络的时间(对于 <flow>,使用 begin 的值代替)。如果网络中没有足够的空间,实际的出发时间可能会更晚。

  • 当使用选项 --max-depart-delay <TIME> 时,如果车辆在给定的延迟后无法出发,则会被丢弃
  • 当使用选项 --random-depart-offset <TIME> 时,每个车辆的指定出发时间会添加一个随机偏移量
  • 当使用特殊值 triggered 时,车辆将在人员进入时出发。
  • 特殊值 begin 将在模拟开始时触发出发。这对于出租车(或其他公共交通)车队特别有用。

departLane#

确定尝试在哪个车道插入车辆;

  • ≥0: 车道的索引,从最右边=0 开始
  • "random": 随机选择一个车道(在所有允许该车辆的车道中)。每个模拟步骤只测试一个随机车道
  • "free": 在所有允许该车辆的车道中选择最空闲(占用最少)的车道
  • "allowed": 在所有允许该车辆并允许继续到下一个路径边缘的车道中选择最空闲(占用最少)的车道
  • "best": 在所有允许该车辆并最小化未来所需换道次数的车道中选择最空闲(占用最少)的车道
  • "first": 车辆可以使用的最右边车道
  • "best_prob": 类似于 best,但在车道同样合适的情况下,具有较低 speedFactor 的车辆永远不会插入到具有较高 speedFactor 的车辆的左侧

departPos#

确定在所选出发车道上尝试插入车辆的位置;

  • ≥0: 车道上的位置,从车道起点开始;必须小于起始车道的长度
  • "random": 随机选择一个位置;如果第一次尝试失败,则不会重试插入车辆
  • "free": 使用一个空闲位置(如果存在)
  • "random_free": 首先尝试十个随机位置,如果都失败,则应用 "free"
  • "base": 尝试在车辆后部位于车道起点的位置插入车辆(车辆前部位置=车辆长度)
  • "last": 车辆以给定速度尽可能靠近车道上最后一辆车的后面插入。如果车道为空,则插入到车道末端。当 departSpeed="max" 时,车辆速度不会被调整。
  • "stop": 如果车辆定义了停靠点,它将在停靠点的 endPos 处出发。如果未定义停靠点,则行为默认为 "base"
  • "splitFront": 如果车辆使用属性 depart="split",它将被插入到它所拆分的车辆的前部,而不是后部

departSpeed#

确定插入时车辆的速度,其中 maxDepartSpeed = MIN(speedLimit * speedFactor, vType_desiredMaxSpeed * speedFactor, vType_maxSpeed);

  • ≥0: 尝试使用给定速度插入车辆。如果该速度不安全,则出发会延迟。
  • "random": 使用 0 和 maxDepartSpeed 之间的随机速度,速度可能会被调整以适应前车或交叉口,确保与前车的安全距离。
  • "max": 尽可能使用 maxDepartSpeed,速度可能会降低以适应前车或交叉口。
  • "desired": 使用 maxDepartSpeed。如果该速度不安全,则出发会延迟。
  • "speedLimit": 使用车道的速度限制。如果该速度不安全,则出发会延迟。
  • "last": 使用出发车道上最后一辆车的当前速度(如果车道为空,则使用 'desired' 速度)。如果该速度不安全,则出发会延迟。
  • "avg": 使用出发车道上的平均速度(如果车道为空,则使用 'speedLimit' 和 'desired' 的最小值)。如果该速度不安全,则出发会延迟。

departEdge#

确定车辆进入网络的路径上的边缘(默认为 0:第一个边缘)。

  • 整数索引 ≥0<routeLength: 车辆在给定索引处插入
  • "random": 使用路径上的随机索引。

注意

属性 departEdge 对于 <trip> 和不使用属性 route 且未定义子元素 <route><flow> 会被忽略。

departPosLat#

车辆进入网络时在出发车道上的横向位置。默认为 0

  • FLOAT: 距车道中心的偏移量,正值表示向右偏移(在右侧通行网络中)。
  • "random": 在车道内随机选择一个位置;如果第一次尝试失败,则不会重试插入车辆
  • "free": 使用一个空闲位置(如果存在)
  • "random_free": 首先尝试十个随机位置,如果都失败,则应用 "free"
  • "center": 车道中心(偏移量 0)。这是默认值
  • "left": 接触车道的左边界
  • "right": 接触车道的右边界

arrivalLane#

确定车辆应结束其路径的车道

  • "current": 车辆在接近到达时不会改变其车道。它将使用更方便到达其到达位置的任何车道。(默认行为)
  • ≥0: 车辆换道以在指定车道上结束其路径
  • "random": 车辆将在其到达边缘上选择一个随机的允许车道,并在必要时换道以到达那里。
  • "first": 车辆将到达最右边的允许车道。

arrivalPos#

确定车辆在目的地方案边缘上被认为已到达的位置;

  • "max": 车辆将行驶到其最终车道的末端。(默认行为)
  • <FLOAT>: 车道上的位置,从车道起点开始;负值从车道末端开始计算
  • "random": 在出发时随机选择一个位置;如果车辆被重新路由,则选择一个新的随机位置。

arrivalSpeed#

确定车辆结束其路径时的速度;

  • "current": 车辆在接近到达时不会修改其速度。它将尽可能快地(安全地)行驶。(默认行为)
  • ≥0: 车辆接近其到达位置时以指定速度结束

arrivalEdge#

确定车辆离开网络的路径上的边缘(默认为最终边缘)。

  • 整数索引 ≥0<routeLength: 车辆在给定索引处插入
  • "random": 使用路径上的随机索引。

注意

属性 arrivalEdge 对于 <trip> 和不使用属性 route 且未定义子元素 <route><flow> 会被忽略。

arrivalPosLat#

车辆尝试在其到达车道上完成路径的横向位置

  • FLOAT: 距车道中心的偏移量,正值表示向右偏移(在右侧通行网络中)。
  • "default": 车辆可以以任意偏移到达
  • "center": 车道中心(偏移量 0)。这是默认值
  • "left": 接触车道的左边界
  • "right": 接触车道的右边界

车辆类型#

使用 vType 元素定义车辆,如下所示:

<routes>
    <vType id="type1" accel="2.6" decel="4.5" sigma="0.5" length="5" maxSpeed="70"/>
</routes>

定义了这个之后,就可以构建 "type1" 类型的车辆。上面使用的值是大多数示例使用的值。它们类似于 Stefan Krauß 论文中使用的标准车辆。

<routes>
    <vType id="type1" accel="2.6" decel="4.5" sigma="0.5" length="5" maxSpeed="70"/>
    <vehicle id="veh1" type="type1" depart="0">
        <route edges="edge1 edge2 edge3"/>
    </vehicle>
</routes>

这个定义是最初的定义,它包括车辆“纯物理”参数的定义,例如其长度、颜色或最大速度,以及所用车辆跟驰模型的参数。请注意,即使车辆跟驰参数描述了诸如最大加速度或最大减速度等值,它们大多与人们所假设的并不对应。例如,最大加速度不是车辆的最大加速度可能性,而是驾驶员选择的最大加速度——即使你有一辆捷豹,在城市中行驶时,你可能也不会试图在 5 秒内达到 100 公里/小时。

默认的车辆跟驰模型基于 Krauß 的工作,但也可以选择其他模型。模型选择和参数化是通过设置更多的 vType 属性来完成的,如下所示。模型及其参数将在下面描述。

<routes>
    <vType id="type1" length="5" maxSpeed="70" carFollowModel="Krauss" accel="2.6" decel="4.5" sigma="0.5"/>
</routes>

可用的 vType 属性#

注意

许多默认值依赖于 vClass,因此指定 vClass 通常就足够了。

这些值具有以下含义:

属性名称 值类型 默认值 描述
id id (字符串) - 车辆类型的名称
accel float 2.6 此类型车辆的加速能力(单位:m/s^2)
decel float 4.5 此类型车辆的减速能力(单位:m/s^2)
apparentDecel float ==decel 标准模型使用的车辆表观减速度(单位:m/s^2)。跟随者将此值用作前车预期的最大减速度。
emergencyDecel float 9.0 车辆的最大物理可能减速度(单位:m/s^2)。
maxAccelProfile 速度-加速度对列表 "0.0 accel, 2778 accel" 车辆的最大物理可能加速度,取决于速度(单位:m/s m/s^2)。
desAccelProfile 速度-加速度对列表 "0.0 accel, 2778 accel" 车辆的最大期望加速度,取决于速度(单位:m/s m/s^2)。
startupDelay float >= 0 0 在不得不停止后,开始行驶前的额外延迟时间。这不适用于计划的 <stop>,除非 carFollowModel="Rail"
sigma float 0.5 车辆跟驰模型 参数,见下文
tau float 1.0 车辆跟驰模型 参数,见下文
length float 5.0 车辆的长度(长度)(单位:m)
minGap float 2.5 与前车的空闲空间 [m]
maxSpeed float 55.55 (200 km/h) 对于大多数车辆,参见 vClass 特定默认值 车辆的(技术)最大速度(单位:m/s)
desiredMaxSpeed float 2778 (1e4 km/h), 5.56 (20km/h) 对于自行车, 1.39 (5 km/h) 对于行人, 参见 模型细节 车辆期望的最大速度(单位:m/s)计算为 desiredMaxSpeed * individual_speedFactor
speedFactor float 或 分布规范 1.0 车辆预期的车道速度限制和 desiredMaxSpeed 的乘数
speedDev float 0.1 speedFactor 的偏差;详见下文(某些 vClass 使用不同的默认值)
color RGB-颜色 "1,1,0" (黄色) 此车辆类型的颜色
vClass class (枚举) "passenger" 抽象车辆类别(见下文)。默认情况下,车辆代表常规乘用车。
emissionClass 排放类别 (枚举) "PC_G_EU4" 排放类别(见下文)。默认情况下,使用符合排放标准 EURO 4 的汽油乘用车。
guiShape 形状 (枚举) "unknown" 用于绘制的车辆形状。默认情况下绘制标准乘用车车身。
width float 1.8 车辆的宽度 [m](仅在默认模型的可视化中使用,影响子车道模型)
height float 1.5 车辆的高度 [m]
mass float 1500 车辆的空载质量 [kg]
collisionMinGapFactor float 取决于 carFollowModel(大多数模型为 1.0) 必须保持到前车的最小 minGap 分数,以避免碰撞事件
imgFile 文件名 (字符串) "" 用于渲染此类型车辆的图像文件(应为灰度以允许功能着色)
osgFile 文件名 (字符串) "" 用于使用 OpenSceneGraph 渲染的对象文件(任何可用 OSG 插件支持的文件类型)
laneChangeModel 换道模型名称 (字符串) 'LC2013' 用于换道的模型
carFollowModel 车辆跟驰模型名称 (字符串) 'Krauss' 用于车辆跟驰的模型
personCapacity int 4 车辆可运输的人员数量(不包括自动驾驶员)。
containerCapacity int 0 车辆可运输的容器数量。
boardingDuration float 0.5 人员上车所需的时间。
loadingDuration float 90.0 将容器装载到车辆上所需的时间。
latAlignment float, "left", "right", "center", "compact", "nice", "arbitrary" "right" 对于自行车, "center" 对于其他 使用子车道模型时的首选横向对齐方式。<FLOAT>(距车道中心的米数)或 ("left", "right", "center", "compact", "nice", "arbitrary") 之一。
maxSpeedLat float 1.0 使用子车道模型或连续换道模型时的最大横向速度
actionStepLength float 全局默认值(默认为模拟步长,可通过 --default.action-step-length 配置) 车辆执行其决策逻辑(加速和换道)的间隔长度。给定的值被处理为最接近的(如果可能,更小的)模拟步长的正倍数。参见 actionStepLength 细节
scale float >= 0 交通的缩放因子。作为 --scale 选项的乘数,适用于此类型的所有车辆。小于 1 的值会导致交通按比例减少,而大于 1 的值会按此因子增加交通量。(默认 1)
timeToTeleport float 为此类型的车辆覆盖选项 --time-to-teleport
timeToTeleportBidi float 为此类型的车辆覆盖选项 --time-to-teleport.bidi
speedFactorPremature float 当设置为正值时,如果停靠点设置了 arrival 属性,并且车辆本应提前到达,则可能导致火车在接近停靠点时减速。给定的值乘以边缘速度限制,并用作减速的下限。如果设置了选项 --use-stop-started 并且停靠点定义了 started 属性,则使用该属性代替 arrival
parkingBadges string 列表 - 用于访问受限停车区域的关键词列表(默认的空列表仍将允许访问不受限制的停车区域)

除了描述车辆跟驰特性的值之外,还可以找到分配车辆的形状、排放和抽象车辆类别的定义。这些概念将在下面描述。此外,你可以在小节 #车辆跟驰模型 中找到有关已实施车辆跟驰模型的更多描述。

速度分布#

个体速度因子#

期望的行驶速度通常在车队中的车辆之间有所不同。在 SUMO 中,这是通过为每辆车分配一个单独的乘数来建模的,该乘数应用于道路速度限制。这个乘数被称为个体速度因子或简称为车辆的速度因子。 道路速度限制和个体速度因子的乘积给出了车辆期望的自由流行驶速度。如果个体速度因子大于 1,车辆可以超过边缘速度。但是,车辆速度仍然受车辆类型 maxSpeed 的限制。

虽然可以直接在 <vehicle><trip><flow> 定义中使用属性 speedFactor 分配个体速度因子值,但更常见的用例是为 <vType> 定义这些因子的分布。

拥有速度因子(以及因此期望速度)的分布有利于模拟的真实性。如果期望速度在车辆队列中是恒定的,这意味着车辆之间的间隙将在很长一段时间内保持其大小不变。出于这个原因,每个模拟车辆(无论是定义为 <vehicle><trip> 还是 <flow> 的一部分)的个体速度因子默认是从分布中抽取的。

车辆的 speedFactor 也与其 vTypedesiredMaxSpeed 值相乘。结果值给出了速度的另一个上限。这对于道路使用者(即自行车和行人)的速度限制没有意义的情况实现了速度分布。

车辆的 speedFactor 被写入各种输出(tripinfo-output, vehroute-output),也可以通过车辆参数对话框检查。

为车辆速度定义正态分布#

可以通过在 <vType> 元素中给出以下属性之一(分布属性之间没有空格)来定义两种类型的分布,用于对每辆车的个体速度因子进行采样:

  • 正态分布:speedFactor="norm(mean,deviation)"
  • 截断正态分布:speedFactor="normc(mean,deviation,lowerCutOff,upperCutOff)"

乘用车的默认值是 "normc(1,0.1,0.2,2)",这意味着大约 95% 的车辆在法定速度限制的 80% 到 120% 之间行驶。

除了上面给出的多参数定义之外,也可以使用更简单的定义样式。

  • 直接设置分布的偏差:speedDev="0.3"
  • 直接设置分布的均值:speedFactor="1.2"

当以这种方式使用属性时,默认的截止范围 [0.2, 2] 保持不变。

注意

分布均值必须落在截止范围内。为了使用低于 0.2 或高于 2.0 的均值,必须使用 4 参数版本来修改截止参数。

注意

属性 speedFactor 有三种不同的含义:在 <vehicle> 中,它直接定义个体速度因子。在 <vType> 中,如果给定为单个浮点值,它定义速度分布的均值;当给定为 norm(...) / normc(...) 时,它定义整个分布。

车辆类别特定的默认值#

当使用 vClass 定义车辆类型时,将使用以下默认速度偏差。

  • passenger(默认 vClass): 0.1
  • pedestrian: 0.1
  • bicycle: 0.1
  • truck, trailer, coach, delivery, taxi: 0.05
  • tram, rail_urban, rail, rail_electric, rail_fast: 0
  • emergency: 0
  • 其他所有: 0.1

注意

在 1.0.0 版本之前,默认的 speedDev 值为 0

全局配置#

代替在 <vType> 定义中配置速度分布(如下所述),可以使用 sumo 选项 --default.speeddev <FLOAT> 来设置全局默认值。该选项值覆盖所有 vClass 默认值。设置 --default.speeddev 0 恢复 1.0.0 之前的行为。

汽车和卡车的不同分布#

速度分布的中心是相对于道路速度限制定义的。在某些道路上,汽车和卡车可能适用不同的速度限制。 为了对此建模,可以在网络中定义vClass 特定的速度限制,或直接在附加文件中定义:

注意,给定的类型 id 指的是边缘类型而不是车辆类型。边缘类型可以在网络文件中设置为任意值

<type id="a" priority="3" numLanes="3" speed="38.89"/>
   <restriction vClass="truck" speed="27.89"/>
</type>

关于速度分布的附加说明#

注意

当用于行人时,speedFactor 属性直接应用于 vType 的最大速度,因为速度限制不适用于行人

注意

如果指定的车辆出发速度超过速度限制,并且其 vType 的 speedFactor 偏差 > 0,则选择的个体速度乘数至少足以满足指定的出发速度。

示例#

定义一个期望以速度限制的 120% 行驶且没有任何偏差的车辆流:

  <vType id="example" speedFactor="1.2" speedDev="0"/>
  <flow id="f" type="example" begin="0" end="3600" probability="0.2" from="A" to="B"/>

定义一个具有高速度偏差且无截止的车辆类型

  <vType id="example2" speedFactor="norm(1.0,0.5)"/>

车辆长度#

由于车辆跟驰模型的工作,我们决定使用两个值来表示车辆长度。length 属性描述车辆本身的长度。此外,minGap 属性描述了在堵塞中静止时与前车的偏移量。

这在下图中说明:

Length_vs_minGap

在模拟中,每辆车需要——当忽略安全间隙时——length+minGap。但只有 length 的道路应被标记为被占用。

抽象车辆类别#

SUMO 车辆可以分配一个“抽象车辆类别”,通过使用属性 vClass 定义。这些类别用于车道定义,并允许/禁止某些车辆类型使用车道。可以想象一条有三个车道的道路,其中最右边的可能只允许“出租车”或“公交车”使用。默认车辆类别是 passenger(表示常规乘用车)。

注意

由于车辆的 vClass道路许可不匹配,路由或插入可能会失败。这可以在 sumo-gui 中通过根据其许可高亮显示边缘来诊断。

存在以下车辆类别:

vClass 位掩码位 注释
ignoring - (所有位设置为 0) 可以在所有车道上行驶,无论设置的许可如何。
private 0
emergency 1
authority 2
army 3
vip 4
pedestrian 5 仅允许此类别的车道在 netconvert 中被视为“人行道”
passenger 6 这是默认车辆类别,表示常规乘用车
hov 7 高乘载率车辆
taxi 8
bus 9 城市线路交通
coach 10 长途运输
delivery 11 允许在非公共道路的维修道路上行驶
truck 12
trailer 13 带拖车的卡车
motorcycle 14
moped 15 机动两轮车,不得在高速公路上行驶
bicycle 16
evehicle 17 未来的移动概念,例如可能获得特殊访问权限的电动车辆
tram 18
rail_urban 19 比 'tram' 更重,但与 'rail' 不同。包括轻轨S-Bahn
rail 20 重轨
rail_electric 21 可能仅在电气化轨道上行驶的重轨车辆
rail_fast 22 高速铁路
ship 23 用于导航水道的基本类别
custom1 24 保留用于用户定义的语义
custom2 25 保留用于用户定义的语义

这些值是某种程度上有意义的值的“最佳猜测”,当然值得讨论。尽管在某些方面,它们代表了导入格式中找到的类别。它们是“抽象的”,意味着它们只是名称,可以构建一辆长度为 0.5 米的公交车。

注意

vClass 值主要用于确定车道和边缘的访问限制。从版本 0.21.0 开始,它们也会影响一些其他 vType 参数的默认值。这些默认值记录在 Vehicle_Type_Parameter_Defaults 中。

存在以下已弃用的车辆类别,用于维护向后兼容性:

已弃用的 vClass 替代品
public_emergency 已弃用。使用 'emergency'
public_authority 已弃用,使用 'authority'
public_army 已弃用,使用 'army'
public_transport 已弃用,使用 'bus'
transport 已弃用,使用 'truck'
lightrail 已弃用,使用 'tram'
cityrail 已弃用,使用 'rail_urban'
rail_slow 已弃用,使用 'rail'

车辆排放类别#

排放类别代表特定的排放类别。使用 emissionClass 属性定义。可能的值在 Models/Emissions 及其小节中给出。

可视化#

为了更好地可视化交通,可以通过使用 guiShape 属性为其分配特定形状来更改车辆类型车辆的外观。当将车辆的绘制模式设置为简单形状时,会使用这些形状。已知以下形状:

  • "pedestrian"
  • "bicycle"
  • "moped"
  • "motorcycle"
  • "passenger"
  • "passenger/sedan"
  • "passenger/hatchback"
  • "passenger/wagon"
  • "passenger/van"
  • "taxi"
  • "delivery"
  • "truck"
  • "truck/semitrailer" (13.5)
  • "truck/trailer" (6.75)
  • "bus"
  • "bus/coach" (8.25)
  • "bus/flexible" (8.25)
  • "bus/trolley"
  • "rail" (24.5)
  • "rail/railcar" (16.85)
  • "rail/cargo" (13.86)
  • "evehicle"
  • "ant"
  • "ship"
  • "emergency"
  • "firebrigade"
  • "police"
  • "rickshaw"
  • "scooter"
  • "aircraft"

其中一些类别被绘制为车厢序列。单个车厢的长度在类型后的括号中指示。对于这些类型,vehicleType 的长度用作火车的总长度(所有车厢组合)。例如,形状为 rail/cargo 且长度为 70m 的车辆将有 5 节车厢。车厢数量将始终是整数,并且没有车厢会比括号中给出的长度短,但可能更长以满足整个车辆的长度要求。当使用光栅图像绘制车辆时,图像将为每个车厢重复。

此外,可以使用属性 width 确定车辆的宽度。使用形状时,应考虑不同车辆类别(乘用车或公交车)具有不同的长度。长度超过 10 米的乘用车看起来很奇怪,长度为 2 米的公交车也是如此。

注意

并非所有这些命名形状都有独特的可视化效果。

车厢、自定义可视化#

可以使用更多参数来实现单个火车车厢的可视化,并配置在车站的退出行为。

<vType id="rail" vClass="rail" imgFile="locomotive.png">
    <param key="carriageLength" value="20"/>
    <param key="carriageGap" value="1"/>
    <param key="carriageImages" value="freight.png,passengers.png"/>
    <param key="locomotiveLength" value="25"/>
    <param key="frontSeatPos" value="1.7"/>
    <param key="seatingWidth" value="2.0"/>
    <param key="carriageDoors" value="2"/>
    <param key="scaleVisual" value="1.5"/>
</vType>

车辆跟驰模型#

SUMO 中当前实现的车辆跟驰模型如下表所示。

元素名称 (已弃用) 属性值 (声明为属性时) 描述
carFollowing-Krauss Krauss Krauß 模型,带有一些修改,是 SUMO 中使用的默认模型
carFollowing-KraussOrig1 KraussOrig1 原始的 Krauß 模型
carFollowing-PWagner2009 PWagner2009 Peter Wagner 的模型,使用 Todosiev 的动作点
carFollowing-BKerner BKerner Boris Kerner 的模型

注意: 目前正在进行中
carFollowing-IDM IDM Martin Treiber 的智能驾驶员模型 (Intelligent Driver Model)

注意: 默认参数导致非常保守的换道间隙接受
carFollowing-IDMM IDMM IDMM 的变体

注意: 缺乏文档
carFollowing-EIDM EIDM Dominik Salles 的用于亚秒级模拟的扩展智能驾驶员模型
carFollowing-KraussPS KraussPS 默认的 Krauss 模型,考虑了道路坡度
carFollowing-KraussAB KraussAB 默认的 Krauss 模型,具有受限的加速度(仅在使用 PHEM 类时相关)
carFollowing-SmartSK SmartSK 默认 Krauss 模型的变体

注意: 缺乏文档
carFollowing-Wiedemann Wiedemann Wiedemann 的车辆跟驰模型(2 参数)
carFollowing-W99 W99 Wiedemann 的车辆跟驰模型,10 参数版本
carFollowing-Daniel1 Daniel1 Daniel Krajzewicz 的车辆跟驰模型

注意: 缺乏文档
carFollowing-ACC ACC Milanés V. 和 Shladover S.E. 的车辆跟驰模型
carFollowing-CACC CACC Milanés V. 和 Shladover S.E. 的车辆跟驰模型
carFollowing-Rail Rail 各种火车类型的模型

车辆跟驰模型参数#

大多数情况下,每个模型使用自己的一组参数。下表列出了哪些参数由哪些模型使用。有关车辆跟驰模型及其参数的详细信息,请参见此处

属性 默认值 范围 描述 模型
minGap vClass 特定 >= 0 静止时的最小间隙 (m) 所有模型
accel vClass 特定 >= 0 此类型车辆的加速能力 (单位: m/s^2) 所有模型
decel vClass 特定 >= 0 此类型车辆的减速能力 (单位: m/s^2) 所有模型
emergencyDecel vClass 特定 >= decel 此类型车辆在紧急情况下的最大减速能力 (单位: m/s^2) 所有模型,除了 "Daniel1"
speedTable - float >= 0 的列表 速度值列表,与以下任何属性一起使用:resistanceTable, tractionTable, maxAccelProfile, desAccelProfile
maxAccelProfile - float >= 0 的列表 车辆的最大物理可能加速度,与 speedTable 中的相同索引对应 (单位: m/s m/s^2) 所有模型
desAccelProfile - float >= 0 的列表 车辆的最大期望加速度,与 speedTable 中的相同索引对应 (单位: m/s m/s^2) 所有模型
tractionTable trainType 特定 float >= 0 的列表 牵引力,单位为 kN,与 speedTable 中的相同索引对应 (单位: m/s m/s^2) Rail
resistanceTable trainType 特定 float >= 0 的列表 制动阻力,单位为 kN,与 speedTable 中的相同索引对应 (单位: m/s m/s^2) Rail
startupDelay 0 >=0 在不得不停止后,开始行驶前的额外延迟时间。这不适用于计划的 <stop>,除非 carFollowModel="Rail" 所有模型,除了 "Daniel1"
sigma 0.5 [0,1] 驾驶员的不完美程度(0 表示完美驾驶) Krauss, SKOrig, PW2009
sigmaStep step-length > 0 与驾驶员不完美相关的加速度更新频率。如果设置为常数(即 1),这将使驾驶不完美与模拟步长解耦 Krauss, SKOrig, PW2009
tau 1 >= 0 驾驶员期望的(最小)时间间隔。确切的解释因模型而异。对于默认模型 Krauss,这是基于前车后部和跟随者前部之间的净空间。有关限制,请参见 Car-Following-Models#tau)。 所有模型
k Kerner
phi Kerner
delta 4 加速度指数 IDM, EIDM
stepping 0.25 >= 0 计算跟随速度时的内部步长 (单位: s) IDM, EIDM
adaptFactor 1.8 >= 0 考虑过去服务水平的因子 IDMM
adaptTime 600 >= 0 放松过去服务水平的时间间隔 (单位: s) IDMM
security 0.5 对安全的需求 Wiedemann
estimation 0.5 情况估计的准确性 Wiedemann
speedControlGain -0.4 确定速度偏差率的控制增益(速度控制模式) ACC
gapClosingControlGainSpeed 0.8 确定速度偏差率的控制增益(间隙闭合控制模式) ACC
gapClosingControlGainSpace 0.04 确定定位偏差率的控制增益(间隙闭合控制模式) ACC
gapControlGainSpeed 0.07 确定速度偏差率的控制增益(间隙控制模式) ACC
gapControlGainSpace 0.23 确定定位偏差率的控制增益(间隙控制模式) ACC
collisionAvoidanceGainSpace 0.8 确定定位偏差率的控制增益(防碰撞模式) ACC
collisionAvoidanceGainSpeed 0.23 确定速度偏差率的控制增益(防碰撞模式) ACC
collisionAvoidanceOverride 2 如果 ACC 跟随速度比 Krauss 跟随速度高给定值 X,则将速度限制为 Krauss 速度 + X 以避免碰撞 ACC, CACC
speedControlGainCACC -0.4 确定速度偏差率的控制增益(速度控制模式) CACC
gapClosingControlGainGap 0.005 确定定位偏差率的控制增益(间隙闭合控制模式) CACC
gapClosingControlGainGapDot 0.05 确定定位偏差导数的控制增益(间隙闭合控制模式) CACC
gapControlGainGap 0.45 确定定位偏差率的控制增益(间隙控制模式) CACC
gapControlGainGapDot 0.0125 确定定位偏差导数的控制增益(间隙控制模式) CACC
collisionAvoidanceGainGap 0.45 确定定位偏差率的控制增益(防碰撞模式) CACC
collisionAvoidanceGainGapDot 0.05 确定定位偏差导数的控制增益(防碰撞模式) CACC
cc1 1.30 间隔时间 - s W99
cc2 8.00 跟随变化 - m W99
cc3 -12.00 进入“跟随”状态的阈值 - s W99
cc4 -0.25 负“跟随”阈值 - m/s W99
cc5 0.35 正“跟随”阈值 - m/s W99
cc6 6.00 振荡的速度依赖性 - 10^-4 rad/s W99
cc7 0.25 振荡加速度 - m/s^2 W99
cc8 2.00 静止加速度 - m/s^2 W99
cc9 1.50 80km/h 时的加速度 - m/s^2 W99
trainType 预定义火车类型的字符串 id Rail
tpreview 4.00 >= 1 期望速度的前瞻时间间隔。较低的值会导致在交叉口转弯或速度限制变化时延迟和猛烈制动 (s) EIDM
tPersDrive 3.00 >= 1 驾驶错误的维纳过程相关时间(源自人类驾驶员模型) (s) EIDM
tPersEstimate 10.00 >= 1 估计误差的维纳过程相关时间(源自人类驾驶员模型) (s) EIDM
treaction 0.50 >= 0 CF 模型执行其决策逻辑(仅加速)的间隔长度。类似于 actionStepLength 属性,但这里可以看作是最大值。驾驶员在危急情况下会更快反应。不应将 ActionStepLength/Driverstate 与此模型一起使用 参考 (s) EIDM
ccoolness 0.99 [0,1] 酷度参数,驾驶员考虑前车的加速度。驾驶员对换道的反应有多酷,这会减小与下一个前车的间隙。0 表示根本不使用此术语。(源自增强型智能驾驶员模型 (-) EIDM
sigmaleader 0.02 [0,1] 前车速度估计误差幅度(源自人类驾驶员模型) (-) EIDM
sigmagap 0.10 [0,1] 车辆与前车之间间隙的估计误差幅度(源自人类驾驶员模型) (-) EIDM
sigmaerror 0.10 [0,1] 驾驶误差幅度(源自人类驾驶员模型) (-) EIDM
jerkmax 3.00 >= 1 模拟步长之间的最大加速度变化 (m/s^3) EIDM
epsilonacc 1.00 >= 0 模拟步长之间的最大加速度差。当达到计算的阈值时,驾驶员会立即反应(源自参考) (m/s^2) EIDM
taccmax 1.20 >= 0 驾驶员达到最大加速度所需的大约时间 (s) EIDM
Mflatness 2.00 >= 1 & <= 5.0 用于平坦化起步加速度曲线的值 (-) EIDM
Mbegin 0.70 >= 0 & <= 1.5 用于沿 x 轴平移起步加速度曲线的值 (-) EIDM
maxvehpreview 0 >= 0 - 尚未集成 - 驾驶员可以看到的车辆数量,用于空间预测(源自人类驾驶员模型) (-) EIDM
vehdynamics 0 0 or 1 - 尚未集成 - 布尔变量,用于将车辆阻力项添加到 CF 模型的加速度计算中(开启=1/关闭=0) (-) EIDM

要选择车辆跟驰模型,应使用以下语法:

<vType id="idmAlternative" length="5" minGap="2" carFollowModel="IDM" tau="1.0" .../>

默认的 Krauss 模型描述#

默认模型是 Stefan Krauß 在 Microscopic Modeling of Traffic Flow: Investigation of Collision Free Vehicle Dynamics 中定义的模型的修改版。实现的模型遵循 Krauß 的相同理念,即:让车辆在保持完美安全的情况下尽可能快地行驶(如果前车在前车和后车最大加速度范围内开始制动,始终能够避免碰撞)。在 <SUMO_HOME>/src/microsim/cfmodels/MSCFModel_Krauss.cpp 中实现的模型有以下不同之处:

  • 不同车辆的减速能力在不违反安全的情况下得到处理(原始模型在此情况下允许碰撞)
  • 安全速度公式经过调整,以在使用 弹道式 位置更新规则时保持安全。这是通过离散化一些连续项来完成的。原始模型是为 欧拉 位置更新规则定义的,当使用 弹道式 时会产生碰撞。另见 Simulation/Basic_Definition#Defining_the_Integration_Method

瞬态 carFollowModel 参数#

预期在模拟期间会改变的 carFollowModel 参数通过通用参数建模。以下参数受支持(通过 xml 输入和 traci.vehicle.setParameter):

  • carFollowModel.ignoreIDs : 忽略具有给定 id 的敌对车辆
  • carFollowModel.ignoreTypes : 忽略具有任何给定类型的敌对车辆

如果设置了多个忽略参数,它们将与“或”组合。在被跟随时,敌对车辆会被忽略。 示例:

<vehicle id="ego" depart="0" route="r0">
   <param key="carFollowModel.ignoreIDs" value="foe1 foe2"/>
   <param key="carFollowModel.ignoreTypes" value="bikeType"/>
</vehicle>

注意

这些参数在 meso 中不起作用

另见瞬态 junctionModel 参数

换道模型#

SUMO 中当前实现的换道模型如下表所示。

属性值 描述
LC2013 默认的换道模型,由 Jakob Erdmann 基于 DK2008 开发(参见 SUMO 的换道模型)。这是默认模型。
SL2015 用于子车道模拟的换道模型(当设置选项 --lateral-resolution <FLOAT> 时默认使用)。此模型只能与子车道扩展一起使用。

注意: 此模型可以在不激活子车道模拟的情况下使用,但此用法尚未完全测试,可能无法按预期工作。
DK2008 直到版本 0.18.0 的 SUMO 的原始换道模型,由 Daniel Krajzewicz 开发(参见 Traffic Simulation with SUMO – Simulation of Urban Mobility)。

大多数情况下,每个模型使用自己的一组参数。下表列出了哪些参数由哪些模型使用。

属性 描述 模型
lcStrategic 执行战略性换道的渴望程度。较高的值导致较早的换道。默认值: 1.0, 范围 [0-inf), -1 值为 0 将前瞻距离设置为 0(车辆仍可以在车道末端换道),而 -1 完全禁用战略性换道。 LC2013, SL2015
lcCooperative 执行合作换道的意愿。较低的值导致合作减少。默认值: 1.0, 范围 [0-1] , -1 值为 0 仍然允许在目标车道速度更高时换道,而 -1 完全禁用合作换道 LC2013, SL2015
lcSpeedGain 为获得速度而执行换道的渴望程度。较高的值导致更多的换道。默认值: 1.0, 范围 [0-inf) 值为 0 禁用为获得速度的换道 LC2013, SL2015
lcKeepRight 遵循靠右行驶义务的渴望程度。较高的值导致较早的换道。默认值: 1.0, 范围 [0-inf) 值为 0 禁用此类换道。 LC2013, SL2015
lcContRight 当车道数量增加时选择最右边车道的概率。默认值: 1.0, 范围 [0-1] LC2013, SL2015
lcOvertakeRight 违反右侧超车规则的概率 默认值: 0, 范围 [0-1] LC2013, SL2015
lcOpposite 通过反向车道超车的渴望程度。较高的值导致更多的换道。默认值: 1.0, 范围 [0-inf) LC2013
lcStrategicLookahead 计算战略性最佳车道时的前瞻距离(最佳车道在进入新车道时重新计算) 默认值: 3000.0, 范围 [0-inf) LC2013, SL2015
lcLookaheadLeft 配置当需要向左换道时的战略前瞻距离的因子(相对于右侧前瞻)。默认值: 2.0, 范围 [0-inf) LC2013, SL2015
lcSpeedGainRight 配置为获得速度而向左或向右换道时的阈值不对称性的因子。默认情况下,向右换道的决定需要更多的考虑。当设置为 1.0 时实现对称。默认值: 0.1, 范围 [0-inf) LC2013, SL2015
lcSpeedGainLookahead 预期减速的前瞻时间(秒)。默认值: 0 (LC2013), 5 (SL2015), 范围 [0-inf) LC2013, SL2015
lcSpeedGainRemainTime 为获得速度而换道后可以在新车道上行驶的最小持续时间(秒)。默认值: 20 (LC2013), 20 (SL2015), 范围 [0-inf) LC2013, SL2015
lcSpeedGainUrgency 内部 speedGain 动机的阈值,该值将换道分类为紧急,并触发相邻(阻碍)车辆的速度调整。默认值: 50 , 范围 [0-inf) LC2013
lcOvertakeDeltaSpeedFactor 速度差因子,用于确定在换道前超车邻近车辆的渴望程度。如果自我车辆和邻近车辆之间的实际速度差高于因子*速度限制,则该车辆将尝试在执行换道之前在相邻车道上超车前导车辆。默认值: 0 范围 [-1-1] LC2013, SL2015
lcKeepRightAcceptanceTime 改变向右换道意愿的时间阈值。该值与预期在右侧无障碍驾驶的时间进行比较。较低的值将鼓励 keepRight 换道。如果该值从其默认值更改,快速接近的跟随车辆也会影响向右车道移动的意愿。默认值: -1(旧行为,其中接受时间 ~ 7 * currentSpeed)范围 [0-inf) LC2013, SL2015
lcCooperativeRoundabout 在多车道环形交叉口增加向内车道移动意愿的因子。默认值: lcCooperative, 范围 [0-1] LC2013, SL2015
lcCooperativeSpeed 合作速度调整的因子。默认值: lcCooperative, 范围 [0-1] LC2013, SL2015
minGapLat 使用子车道模型时所需的最小横向间隙,默认值: 0.6 SL2015
lcSublane 在车道内使用配置的横向对齐方式的渴望程度。较高的值导致更愿意为对齐方式牺牲速度。默认值: 1.0, 范围 [0-inf) SL2015
lcPushy 侵入其他驾驶员横向空间的意愿。默认值: 0, 范围 [0-1] SL2015
lcPushyGap 侵入其他驾驶员横向空间时的最小横向间隙(定义 lcPushy 的替代方式)。默认值: minGapLat, 范围 0 到 minGapLat SL2015
lcAssertive 接受目标车道上较低的前车间隙和后车间隙的意愿。所需间隙除以该值。默认值: 1, 范围: 正实数 LC2013,SL2015
lcImpatience 修改 lcAssertive 和 lcPushy 的动态因子。默认值: 0(无效果)范围 -1 到 1。不耐烦充当乘数。在 -1 时乘数为 0.5,在 1 时乘数为 1.5。 SL2015
lcTimeToImpatience 达到最大不耐烦(1)的时间。每当换道操作被阻止时,不耐烦就会增长。*默认值: infinity(禁用不耐烦增长) SL2015
lcAccelLat 每秒最大横向加速度。默认值: 1.0 SL2015
lcTurnAlignmentDistance 车辆路径上即将转弯的距离,低于此距离时,对齐方式应动态调整以匹配转弯方向。*默认值: 0.0(即禁用) SL2015
lcMaxSpeedLatStanding 静止时的横向速度常数项。设置为 0 以避免正交滑动。*默认值: maxSpeedLat(即禁用) LC2013, SL2015
lcMaxSpeedLatFactor 移动时横向速度的界限,计算为 lcMaxSpeedLatStanding + lcMaxSpeedLatFactor * getSpeed()。如果 > 0,这是一个上限(车辆在低速时换道较慢),如果 < 0,这是一个下限,应与 lcMaxSpeedLatStanding > maxSpeedLat 结合使用(车辆在低速时换道较快)。默认值: 1.0 LC2013, SL2015
lcMaxDistLatStanding 静止时的最大横向机动距离(m)(目前用于防止“滑动”的 keepRight 换道)。默认值: 1.6,对于两轮车为 0 SL2015
lcLaneDiscipline 不愿执行会将车辆放置在车道边界上的 speedGain 换道。默认值: 0.0 SL2015
lcSigma 横向定位不完美程度。默认值: 0.0 LC2013, SL2015

参数在 <vType> 中设置:

<vType id="myType" lcStrategic="0.5" lcCooperative="0.0"/>

注意

参数 'lcMaxSpeedLatStanding' 在车辆处于车道末端时不会应用(以确保没有死锁)。

注意

通过 TraCI 修改和检索换道模型属性与其他 vType 属性的工作方式不同

交叉口模型参数#

交叉口的行为可以用下面列出的参数来配置。

属性 值类型 默认值 描述
jmCrossingGap float >= 0 (m) 10 与自我车辆走向冲突点的行人的最小距离。如果行人距离较远,车辆可能会驶过行人过街处(不包括步行区)。因此,值越低,驾驶员越勇敢(更具攻击性)。
jmIgnoreKeepClearTime float (s) -1 累积等待时间(参见选项 --waiting-time-memory),超过此时间后,车辆将驶上交叉口,即使这可能导致堵塞。对于负值,车辆将始终尝试保持交叉口畅通。
jmDriveAfterRedTime float (s) -1 如果红灯亮起的时间短于给定阈值,此值会导致车辆违反红灯。当设置为 0 时,车辆将在黄灯时行驶,但会尝试在红灯时刹车。如果此行为导致车辆行驶过快而无法刹车,它将不会尝试刹车。此值也适用于默认行人模型
jmDriveAfterYellowTime float (s) -1 如果黄灯亮起的时间短于给定阈值,此值会导致车辆违反黄灯。速度太快而无法刹车的车辆总是在黄灯时行驶。
jmDriveRedSpeed float (m/s) maxSpeed 此值会导致受 jmDriveAfterRedTime 影响的车辆在违反红灯时减速。给定的速度在进入交叉口时不会超过。
jmIgnoreFoeProb float 0 此值会导致车辆和行人以给定概率忽略具有通行权的敌对车辆。检查在每个模拟步骤重新执行。范围 [0,1]。此值也适用于默认行人模型
jmIgnoreFoeSpeed float (m/s) 0 此值与 jmIgnoreFoeProb 结合使用。只有速度低于或等于给定值的车辆才可能被忽略。此值也适用于默认行人模型
jmIgnoreJunctionFoeProb float 0 此值会导致车辆以给定概率忽略已进入交叉口的敌对车辆和行人。检查在每个模拟步骤重新执行。范围 [0,1]。
jmSigmaMinor float, 缩放因子 (类似 sigma) sigma 此值配置通过次要链接时的驾驶不完美程度(在已承诺行驶且仍在交叉口上时,在交叉口之前)。
jmStoplineGap float >= 0 (m) 1 此值配置在优先/信号灯控制的停车线前的停车距离。如果停车线已被 stopOffset 项重新定位,则应用两者距离的最大值。
jmStoplineGapMinor float >= 0 (m) 0 此值配置在非优先停车线前的停车距离。如果停车线已被 stopOffset 项重新定位,则应用两者距离的最大值。
jmStoplineCrossingGap float >= 0 (m) 1 此值配置在行人过街处前的停车距离。如果停车线已被 stopOffset 项重新定位,则应用两者距离的最大值。
jmTimegapMinor float s 1 此值定义在通过前方或在优先车辆之后时的最小时间间隔。当敌对车辆尚未进入交叉口时应用
jmAdvance 0 or 1 1 如果此值设置为 1,当自我车辆的轨迹与已进入交叉口的敌对车辆交叉时,自我车辆可以向冲突点前进(它将选择一个速度,使其在敌对车辆通过冲突点时刚好到达冲突点)。如果设置为 0,自我车辆将保持在停车线或内部交叉口,直到敌对车辆通过冲突点
jmExtraGap float m 0 此值定义在合并冲突中要保持的额外间隙,其中敌对车辆已进入交叉口。对于交叉而不是合并的轨迹,它还定义了敌对车辆必须通过冲突点的距离,然后自我车辆才能进入冲突点
jmStopSignWait float s step-length 此值定义在通过停车标志或等效情况(例如在红灯时右转)之前的最小停车持续时间。
jmAllwayStopWait float s step-length 此值定义在通过全向停车标志之前的最小停车持续时间。
impatience float or 'off' 0.0 驾驶员阻碍具有更高优先级车辆的意愿。见下文语义。

参数在 <vType> 中设置:

<vType id="ambulance" jmDriveAfterRedTime="300" jmDriveRedSpeed="5.56"/>

不耐烦#

驾驶员的不耐烦是一个介于 0 和 1 之间的值,每当驾驶员不得不停止(即由于堵塞或在交叉口等待)时,该值就会增长。不耐烦值的计算如下:

MAX(0, MIN(1.0, baseImpatience + waitingTime / timeToMaxImpatience))

其中 baseImpatience 通过设置 vType 属性 impatience 配置,timeToMaxImpatience 使用选项 --time-to-impatience 设置(默认 180s)。将此选项设置为 0 可禁用不耐烦增长。baseImpatience 的值可以为负,以减慢动态计算的不耐烦的增长速度。也可以使用值 off 定义,以防止驾驶员变得不耐烦。

不耐烦值用于表示驾驶员阻碍具有更高优先级车辆的意愿。当值为 1 或更高时,驾驶员将使用任何安全的间隙(在防碰撞意义上),即使这意味着另一辆车必须尽可能用力刹车。当值为 0 时,驾驶员将只执行不会迫使其他车辆减速的操作。中间值在这些极端值之间平滑插值。

行人的不耐烦#

不耐烦的概念也用于行人没有通行权时过马路。与汽车一样,当前的不耐烦是从 baseImpatience(在 vType 中配置)和当前的 waitingTime 计算出来的。timeToMaxImpatience 硬编码为 120s。不耐烦的行人可能会过马路,即使这迫使汽车刹车。在 vType 中将不耐烦设置为负值或 off 可以使行人更有耐心。

瞬态参数#

预期在模拟期间会改变的交叉口模型参数通过通用参数建模。以下参数受支持(通过 xml 输入和 traci.vehicle.setParameter):

  • junctionModel.ignoreIDs : 忽略具有给定 id 的敌对车辆
  • junctionModel.ignoreTypes : 忽略具有任何给定类型的敌对车辆

如果设置了多个忽略参数,它们将与“或”组合。在接近交叉口时以及在交叉口上时,敌对车辆会被忽略。

示例:

<vehicle id="ego" depart="0" route="r0">
   <param key="junctionModel.ignoreIDs" value="foe1 foe2"/>
   <param key="junctionModel.ignoreTypes" value="bikeType"/>
</vehicle>

注意

这些参数也适用于多式联运模拟。它们可用于让行人忽略车辆,反之亦然。

默认车辆类型#

如果车辆的 type 属性未定义,则默认为 "DEFAULT_VEHTYPE"。 通过使用此 id 定义车辆类型 (<vType id="DEFAULT_VEHTYPE" ..../>),可以更改未明确定义类型的车辆的默认参数。默认车辆类型的更改需要在对类型进行任何引用之前发生,因此基本上在任何车辆或车辆类型定义之前。因此,它应该始终位于第一个路径文件的顶部。

路径和车辆类型分布#

代替显式定义车辆的路径和 vType,sumo 可以在运行时从给定的分布中选择它们。为了使用此功能,只需按如下方式定义分布:

车辆类型分布#

<routes>
    <vTypeDistribution id="typedist1">
        <vType id="type1" accel="0.8" length="5" maxSpeed="70" probability="0.9"/>
        <vType id="type2" accel="1.8" length="15" maxSpeed="50" probability="0.1"/>
    </vTypeDistribution>
</routes>

注意

Python 工具 createVehTypeDistribution.py 可用于生成大型分布,这些分布独立地改变多个 vType 参数。

使用现有类型#

多个分布可以使用相同的类型,并可选择覆盖其概率。先前定义的车辆类型分布也可以被引用。

<routes>
    <vType id="type1" accel="0.8" length="5" maxSpeed="70" probability="0.9"/>
    <vType id="type2" accel="1.8" length="15" maxSpeed="50" probability="0.1"/>
    <vType id="type3" accel="1.9" length="15" maxSpeed="50"/>
    <vType id="type4" accel="1.7" length="12" maxSpeed="50"/>
    <vTypeDistribution id="typedist1" vTypes="type1 type2"/>
    <vTypeDistribution id="typedist2" vTypes="type3 type4"/>
    <vTypeDistribution id="typedist3" vTypes="type1 type2" probabilities="0.5 0.5"/>
    <vTypeDistribution id="alltypesdist" vTypes="typedist1 typedist2" probabilities="0.5 0.5"/>
</routes>

路径分布#

<routes>
    <routeDistribution id="routedist1">
        <route id="route0" color="1,1,0" edges="beg middle end rend" probability="0.9"/>
        <route id="route1" color="1,2,0" edges="beg middle end" probability="0.1"/>
    </routeDistribution>

    <route id="route2" edges="beg middle end rend"/>
    <route id="route3" edges="beg middle end"/>
    <routeDistribution id="routedist2">
        <route refId="route2" probability="2"/>
        <route refId="route3" probability="3"/>
    </routeDistribution>
</routes>

分布只有 id 作为(强制性)属性,并且需要为其每个子元素设置一个概率属性。概率值的总和不需要为 1,它们会相应缩放。注意,如果未指定,概率默认为 1.00。目前,子元素的 id 是强制性的,这在未来的版本中可能会改变。

分布可以像使用单个类型和路径一样使用:

<routes>
    <vehicle id="0" type="typedist1" route="routedist1" depart="0" color="1,0,0"/>
</routes>

注意

当使用 duarouter 处理包含分布的输入文件时,输出文件将包含每个车辆的固定路径和类型,分布将消失。这是为了确保当使用输入文件与 sumo 时,每辆车的路径都适合其采样的 vClass

停靠点和航点#

车辆可以通过使用停靠点元素作为路径或车辆定义的一部分来强制停止一段时间或等待人员。停靠点元素也可用于引导车辆沿路径到达航点。下面的示例展示了所有三种情况:

<routes>
    <route id="route0" edges="beg middle end rend">
        <stop lane="middle_0" endPos="50" duration="20"/>
    </route>
    <vehicle id="v0" route="route0" depart="0">
        <stop lane="end_0" endPos="10" until="50"/>
    </vehicle>
    <vehicle id="v1" route="route0" depart="90">
        <stop lane="end_1" endPos="10" speed="13.89"/>
    </vehicle>
</routes>

生成的车辆 v0 将停止两次,一次在车道 middle_0,因为其路径中定义了停靠点,第二次是因为车辆本身定义的停靠点。第一次停止将持续 20 秒,第二次停止直到模拟秒 50。有关停靠点属性的详细列表,请参见下文。有关如何使用它们模拟公共交通的描述,请参见 Simulation/Public Transport。 第二辆车 v1 将在路径中定义的车道 middle_0 停止一次,然后前往车道 end_1,并以 13.89 m/s 的速度通过该点,然后在 rend 边缘终止路径。

停靠点可以是车辆、路径、人员或容器的子元素。

属性 类型 范围 默认值 备注
busStop string 有效的 busStop id - 如果给定,则不允许 containerStop, chargingStation, edge, lane, startPos 和 endPos
containerStop string 有效的 containerStop id - 如果给定,则不允许 busStop, chargingStation, edge, lane, startPos 和 endPos
chargingStation string 有效的 chargingStation id - 如果给定,则不允许 busStop, containerStop, edge, lane, startPos 和 endPos
parkingArea string 有效的 parkingArea id - 更多信息见 parkingArea
lane string 车道 id - 车道 id 的形式为 <edge_id>_<lane_index>。边缘必须是相应路径的一部分。如果边缘支持反向行驶,车道索引可以使用超出停靠边缘车道索引的值来定义反向车道上的停靠点。
edge string 边缘 id - 车辆将在允许其 vClass 的最右边车道上停止
endPos float(m) -lane.length < x < lane.length(负值从车道末端向后计算) lane.length
startPos float(m) -lane.length < x < lane.length(负值从车道末端向后计算) endPos-0.2m startPosendPos 之间必须有超过 0.1m 的差异
friendlyPos bool true,false false 是否应自动更正无效的停靠点位置
duration float(s) 或 HH:MM:SS ≥0 - 停止的最短持续时间
until float(s) 或 HH:MM:SS ≥0 - 路径继续的最早时间步长
arrival float(s) 或 HH:MM:SS ≥0 - 停靠点的预期到达时间。如果设置了此值,停靠点输出 将包含属性 ''arrivalDelay''。如果车辆的 vType 定义了属性 speedFactorPremature,车辆可能会减速以防止提前到达。
ended float(s) 或 HH:MM:SS ≥0 - 停靠点结束的时间步长(即由先前的模拟记录)。可以通过设置选项 --use-stop-ended 来覆盖 'until'(即当尝试重现已知时间时)
started float(s) 或 HH:MM:SS ≥0 - 停靠点的已知到达时间(即由先前的模拟记录)。可以通过设置选项 --use-stop-started 来覆盖 'arrival'(即当尝试重现已知时间时)
extension float(s) 或 HH:MM:SS ≥0 - 由于人员上车以及等待预期人员/触发停止而延长停靠持续时间的最大时间
index int, "end", "fit" 0≤index≤路径中的停靠点数量 "end" 在车辆的停靠点列表中插入停靠点的位置。如果给定的索引大于先前的停靠点数量,并且路径多次循环经过停靠点边缘,则索引的每次递增都会跳过停靠点边缘的一个实例
triggered string 列表 "person", "container", "join", "true", "false" "false" 结束停靠点的必要条件列表(见下文)
expected string 人员 ID 列表 必须登上车辆的人员列表(仅对触发的停靠点生效)
expectedContainers string 容器 ID 列表 必须装载到车辆上的容器列表(仅对触发的停靠点生效)
permitted string 人员和容器 ID 列表 允许在此停靠点进入车辆的可运输物列表
parking bool true,false triggered 的值 车辆是停在路上还是停在旁边
actType string 任意 GUI 和输出文件中的活动描述
tripId string 任意 应用于车辆的参数,用于在循环公共交通路线中跟踪行程 id
line string 任意 当到达此停靠点时要设置在车辆上的新线路属性(用于循环公共交通路线)
speed float 正数 - 在 startPos 和 endPos 之间行驶时要保持的速度。这将停靠点转变为航点。
posLat float - 停止时的横向偏移
onDemand bool false 如果没有人想在此处上下车,是否可以跳过停止
jump float(s) 或 HH:MM:SS -1 当设置为非负值时,跳转到下一个强制性路径边缘(下一个停靠点或到达边缘),并花费给定的时间进行跳转
jumpUntil float(s) 或 HH:MM:SS -1 当设置为非负值时,跳转到下一个路径边缘将持续至少直到给定时间(并且可能更长,具体取决于 jump 的值)
split string 车辆 id 必须设置为具有 depart="split" 的车辆的 id。拆分火车到达停靠点时。
join string 车辆 id 必须设置为以 triggered="join" 停止的车辆的 id。将此火车连接到另一列火车到达停靠点时。
  • 如果同时给出了“duration”和“until”,车辆将至少停止“duration”秒。
  • 如果“duration”为 0,车辆将减速至速度 0,然后再次开始加速。
  • 如果给出了“until”而没有给出“duration”,并且车辆在“until”定义的时间步长或之后到达停靠点,它将减速至速度 0,然后再次加速。
  • 如果人员登上车辆,停靠点将延长车辆的“boardingDuration”或直到达到“personCapacity”。(对于容器,则是“loadingDuration”和“containerCapacity”)。
  • 如果在重复车辆插入(流)的上下文中定义了 until,它将按车辆创建时间与流的“begin”之间的差值递增。
  • 如果既没有给出“duration”也没有给出“until”,则“triggered”默认为 true。如果“triggered”显式设置为 false,车辆将永远停止。
  • 如果“duration”或“until”与“triggered”一起给出,则车辆将停止直到达到给定的 duration/until 并且 一个人已上车
  • 如果“parking”设置为 true。车辆停在道路旁边,不阻塞其他车辆。

注意

如果 triggered 为 true,则 parking 默认也将设置为 true。如果你然后将 parking 设置为 false,可能会创建死锁,阻止模拟终止

注意

公交站长度必须至少为 10

startPos 和 endPos#

  • 默认情况下,车辆将尝试停在给定的 endPos
  • 如果车辆提前停止(即由于堵塞),则如果车辆前部在 startPos 和 endPos 之间,则认为已到达停靠点
  • 如果车辆接载人员或容器,只要人员在 startPos 和 endPos 之间,就可以进行
  • 如果停靠点使用属性 'speed',则该速度将在 startPos 和 endPos 之间保持

触发的停靠点#

通常,计划的停靠点基于时间相关条件结束(作为 until 给出的计划出发时间或最小停止 duration 或两者)。但是,也可以设置其他要求,这些要求必须满足才能结束停靠点,并使用属性 triggered 定义。该属性定义了一个条件列表,每个关键字解释如下:

  • "person":车辆停止,直到至少一个人进入
    • 必要和符合条件的人员列表可以使用属性 expectedpermitted 进一步定制
  • "container":车辆停止,直到至少一个容器被装载
    • 必要和符合条件的容器列表可以使用属性 expectedContainerspermitted 进一步定制
  • "join":车辆停止,直到与另一辆车连接
  • "true""person" 的别名
  • "false":不定义任何触发条件的别名

航点#

通过将属性 'speed' 定义为正值,停靠点定义转变为航点。车辆将通过给定的车道行驶,并在 startPos 和 endPos 之间保持不超过定义的速度。实际的车辆速度不能高于没有航点时的速度。

其他属性的特殊处理:

  • 'duration' 值被忽略
  • 'triggered' 值与航点不兼容,将触发错误
  • 当设置了 'until' 值时,如果车辆过早到达航点,可能会停止

跳转#

当将属性 'jump' 定义为非负值时,车辆将在完成停靠点后立即离开网络,并在路径的下一个边缘开始时重新进入网络。跳转后断开的路径是允许的。当将跳转作为路由器输入时,会按设计创建断开的路径。

跳转的典型用例是公共交通车辆,其部分停靠点在模拟区域之外,并且预计在离开模拟后稍后重新进入(同时保留其 ID 和延迟)。

注意

下一个停靠点必须在与跳转开始的边缘不同的边缘上,否则下一个停靠点将被跳过。

用户定义的参数#

停靠点支持通用参数。这些也可以通过 TraCI 检索和修改

<trip id="r0" depart="0"/>
  <stop edge="E0" duration="10">
      <param key="userDefined" value="42"/>
  </stop>
</trip>

颜色#

颜色定义为 红,绿,蓝红,绿,蓝,透明度,可以在车辆、路径或 vType 中定义。

<route id="r0" color="0,255,255"/>
<type id="t0" color="0,0,255"/>
<vehicle id="v0" color="255,0,0,0"/>

在默认可视化设置中,如果定义了车辆颜色,则使用车辆颜色,否则使用类型颜色,最后使用路径颜色。可以更改这些设置。

默认情况下,颜色分量应作为 (0,255) 范围内的整数给出,但也支持其他定义:

color="0.5, 0.5, 1.0"
color="#FF0000"
color="red"

透明度值(alpha)仅在同时使用 vType 属性 imgFile生效

设备#

车辆设备用于建模和配置不同的方面,例如输出(device.fcd)或行为(device.rerouting)。

以下设备名称受支持,可用于下面的占位符 <DEVICENAME>

自动分配#

一些设备是自动分配的。加载到模拟中的每个 <trip> 都会自动配备一个 rerouting 设备以执行初始路径计算。

其他设备,如 fcd,在设置了选项 --fcd-output 时会自动分配。

通过全局选项分配#

可以通过设置选项 --device.<DEVICENAME>.probability(例如 --device.fcd.probability 0.25)为模拟中的所有车辆全局配置设备。这将为大约四分之一的车辆配备 fcd 设备(每辆车随机确定,概率为 25%)。为了进行精确分配,可以设置附加选项 --device.<DEVICENAME>.deterministic。另一个选项是使用选项 --device.<DEVICENAME>.explicit <ID1,ID2,...IDk> 传递应配备设备的车辆 ID 列表。

注意

这些选项优先于输出选项的自动分配。

通过通用参数分配#

为车辆类型或单个车辆分配设备的另一个选项是使用通用参数。这是通过在车辆或车辆类型中按如下方式定义它们来完成的:

<routes>
    <vehicle id="v0" route="route0" depart="0">
        <param key="has.<DEVICENAME>.device" value="true"/>
    </vehicle>

    <vType id="t1">
        <param key="has.<DEVICENAME>.device" value="true"/>
    </vType>

    <vehicle id="v1" route="route0" depart="0" type="t1"/>

    <vType id="t2">
        <param key="device.<DEVICENAME>.probability" value="0.5"/>
    </vType>

    <vehicle id="v2" route="route0" depart="0" type="t2"/>
</routes>

注意

车辆的 <param> 优先于车辆类型的 <param>。两者都优先于通过选项的分配。