安全性

碰撞#

sumo 会追踪位于同一条边缘(edge)上(无论是完全还是部分位于)的车辆之间的间距。默认情况下,当这些间距缩小到低于车辆的 minGap 时,就会记录一次碰撞(默认为 2.5 米)。这种(可能令人惊讶的)行为用于检测默认跟驰模型的问题,该模型本应永远不会将间距缩小到 minGap 以下。通过设置选项 --collision.mingap-factor,可以降低此阈值。当设置 --collision.mingap-factor 0 时,仅记录 物理碰撞(即前保险杠和后保险杠相遇或重叠)。

当设置选项 --collision.check-junctions 时,还会通过检测车辆形状的重叠来检查同一交叉口上车辆之间的碰撞。

Note

交叉口碰撞永远不会在类型为 unregulated 的交叉口上记录。

碰撞的后果使用选项 --collision.action 进行配置,使用以下关键字之一:

  • teleport: (默认):跟随车辆被移动(传送)到其路线上的下一个边缘
  • warn: 发出警告
  • none: 不采取任何操作
  • remove: 两辆车都从模拟中移除

此外,还可以在执行 碰撞操作 之前将车辆停止固定时间。这允许发生连环相撞和交通干扰。要启用停止,必须设置选项 --collision.stoptime <TIME>,停止时间以秒为单位。

跨模式碰撞#

碰撞操作仅在车辆-车辆碰撞时触发,而不在车辆-行人碰撞时触发。相反,跨模式碰撞默认会发出警告。

可以通过设置选项 --intermodal-collision.action--intermodal-collision.stoptime 来更改此行为,这些选项的工作方式与上述车辆-车辆碰撞选项类似。

Note

行人模型 striping 会检测行人之间的碰撞。这仅用于检测模型的问题。

故意引发碰撞#

引发碰撞的一个简单方法是使用 TraCI 覆盖安全速度(使用 traci.vehicle.setSpeed)或强制进行不安全的换道。要以这种方式创建碰撞,还必须使用 命令 speedMode 和 laneChangeMode 禁用安全检查。

或者,可以将 SUMO 中的各种模型配置为使驾驶更不安全。这可用于以一定的概率创建碰撞(或者如果使用车辆停止来强制在关键情况下意外刹车,则可以确定性地创建碰撞)。

跟驰过程中的碰撞#

正常驾驶过程中的追尾碰撞可能由以下任何一项引起:

  • 使用默认 Krauss 模型时,tau 值低于模拟步长(默认 1 秒)的车辆。
  • tau 值低于其 actionStepLength 的车辆。
  • apparentDecel 参数低于其 decel 参数的车辆(导致其他驾驶员误判其减速能力)。
  • 使用 driverstate-设备建模的驾驶员失误
  • 跟驰模型 EIDM 本身包含 驾驶错误参数,可用于引发危险情况和碰撞。
  • 使用 属性 insertionChecks 禁用部分或全部插入检查,然后配置高速和小间距的插入。
  • carFollowModel.ignoreIDs: 忽略所有具有给定 ID 的对手(通过 通用参数 设置)。
  • carFollowModel.ignoreTypes: 忽略所有具有给定类型的对手(通过 通用参数 设置)。

与换道相关的碰撞#

换道引起的碰撞可能是由不安全的横向运动(侧面碰撞)以及以造成不安全跟驰情况的方式换道(追尾碰撞)引起的。

侧面碰撞可能由以下原因引起:

  • 使用 vType 参数 lcSigma 配置横向不完美性。
  • 使用 vType 参数 lcPushy 允许横向侵占(但此参数本身不会导致碰撞,仅在某些情况下减小横向间距,需要子车道模型)。
  • lcImpatience(增长的不耐烦允许在使用子车道模型时接受更低的横向间距)。

不安全的换道可能由配置更低的间隙接受度引起,参数包括: - lcAssertive(可接受的间隙通过将安全间隙除以 lcAssertive 计算得出)。

交叉口的碰撞#

交叉口的碰撞可能由以下任何一项引起:

  • 不安全的 交叉口模型参数
    • jmDriveAfterRedTime > 0(闯红灯)
    • jmIgnoreFoeProbjmIgnoreFoeSpeed(以给定的概率忽略以低于给定速度接近交叉口的对手)
    • jmTimegapMinor < 1(在通过无优先权的交叉口时的安全时间间隙)
    • jmIgnoreJunctionFoeProb > 0:允许忽略已经在交叉口的对手(以给定概率)
      • 车辆对手,只要它们不在路径上
      • 任何行人对手
    • junctionModel.ignoreIDs: 忽略所有具有给定 ID 的对手(通过 通用参数 设置)。
    • junctionModel.ignoreTypes: 忽略所有具有给定类型的对手(通过 通用参数 设置)。
  • 相对于车辆速度而言过短的黄灯相位(导致没有足够的时间停车)。默认情况下,这会导致强力刹车(警告:紧急刹车),并可能随后发生追尾碰撞。
  • 允许冲突车流同时通行的绿灯相位。由此导致的交叉口之外的碰撞总是会被检测到,但交叉口上的碰撞只有在设置选项 --collision.check-junctions 时才会被记录。
  • 如果边缘上的所有 双连接 都配置为 pass="true"
  • 如果优先级交叉口的次要道路的连接配置为 pass="true"
  • 不完美的驾驶员行为

要模拟事故的影响,请参见 FAQ#如何模拟事故

反应时间#

在现实中,驾驶员在应对不断变化的交通状况时会有一些延迟。这种反应时间在模拟中以各种方式建模。反应时间不应与 tau 参数混淆,因为后者模拟的是期望的时间间距。保持足够的间距对于反应延迟下的安全驾驶是必要的。然而,这个间距可以独立于实际反应时间设置。

模拟步长#

所有模拟车辆同时根据前一个模拟步长的交通状态选择其速度。这意味着至少存在一个模拟步长的反应时间。

相比之下,边缘内的换道在每个步长内(沿上游方向)是顺序发生的。因此,在 3 车道道路上几乎平行行驶的两辆车可能在单个模拟步长内同时换道,因为后面的车辆已经考虑了前方车辆的横向运动。

动作步长#

默认情况下,车辆在每个模拟步长重新计算其速度和换道决策。当以亚秒级时间分辨率运行时(即 --step-length 0.1),这也给出了非常低的有效反应时间。

为了将决策间隔与模拟步长解耦,可以将车辆的 action-step-length 定义为后续车辆决策之间的持续时间。决策在插入后立即开始,这意味着在不同时间插入的车辆可能在不同的模拟步长中进行决策。在没有决策的模拟步长期间,车辆位置根据先前计算的加速度进行更新。横向动力学(当使用子车道模型时)使用动态加速度曲线来完成当前的横向驾驶操作。

动作步长可以通过以下任何一种方式定义:

  • 设置选项 default.action-step-length <FLOAT>,这将设置所有车辆的默认动作步长
  • 设置 <vType> 属性 actionStepLength
  • 调用 traci.vehicle.setActionStepLength

    Note

    动作步长必须是模拟步长的倍数。

安全相关参数#

不安全行为的模拟是一个不断发展的课题。预计会有模型的添加和扩展。以下 车辆类型参数 与安全相关:

跟驰模型#

  • speedFactor: 较高的值导致超速(高于限速行驶)
  • accel, decel: 较高的值导致速度变化剧烈
  • tau: 较低的值导致与前车的间距减小。当设置 tau 低于模拟 --step-length 参数(默认 1 秒)或车辆的动作步长(--default.action-step-length 或车辆参数 actionStepLength)时,可能会发生碰撞
  • emergencyDecel: 这是车辆为避免事故所能采取的最大减速度。默认情况下,此值与 decel 相同
  • apparentDecel: 这是配置车辆的其他车辆将假定的减速度值。默认情况下,此值与 decel 相同
  • 使用 driverstate-设备建模的驾驶员失误
  • 选项 --emergency-insert 允许以危险速度插入车辆,只要它们仍然可以通过紧急刹车恢复

换道模型#

  • lcCooperative: 较低的值导致换道期间的合作度较低
  • lcSpeedGain: 较高的值导致为速度而进行的超车更多
  • lcKeepRight: 较低的值导致较少靠右行驶
  • lcPushy: 将此值设置在 0 到 1 之间会导致激进的横向侵占(仅在使用 子车道模型 时)
  • lcImpatience: 反复换道失败会导致在使用子车道模型时接受更低的横向间距
  • lcAssertive: 将此值设置为大于 1 会导致接受更小的纵向间隙,与驾驶员的不耐烦程度成正比(仅在使用 子车道模型 时)
  • lcSigma: 模拟随机的横向变化(车道保持不完美)

交叉口模型#

还有其他参数会影响与安全相关的交叉口行为。描述请参见 定义车辆、车辆类型和路线#交叉口模型参数

  • impatience: 较高的值导致在交叉口接受更小的时间间隙。这些在防碰撞意义上仍然是安全的。
  • jmCrossingGap: 较低的值导致在行人交叉口驾驶更激进(安全)
  • jmDriveAfterRedTime: 在切换后一段时间违反红灯(安全性随值增大而降低)
  • jmDriveRedSpeed: 违反红灯时的速度(较高的值降低安全性)
  • jmIgnoreFoeProb: 忽略具有通行权的对手的概率(较高的值降低安全性)
  • jmIgnoreFoeSpeed: 防止忽略快速车辆的对手速度阈值(较高的值降低安全性)
  • jmSigmaMinor: 当计划通过次要链接时,假定为最佳加速度。(较高的值导致加速度降低,从而减小时间间隙和安全性)
  • jmTimegapMinor: 在通过前方或后方的次要链接时的最小时间间隙(较低的值降低安全性)
  • jmAdvance: 控制当自我车辆的轨迹与已经进入交叉口的对手车辆交叉时,自我车辆是否可以向冲突点前进
  • jmExtraGap: 定义与已经进入交叉口的对手车辆保持的额外距离

安全相关输出#

  • 替代安全指标 (SSM)(前向时距、制动率、碰撞时间等)
  • 瞬时感应线圈 输出记录 gap 属性,该属性以亚秒精度给出连续车辆之间的时间间隙。
  • 换道输出 生成模拟中发生的所有换道的记录。它包括目标车道上前后车辆的纵向间隙(实际间隙以及为确保在所有情况下满足严格减速界限所需的间隙)。当使用 子车道模型 时,属性 latGap 记录与换道方向相邻车辆的横向间隙(如果存在这样的车辆)。
  • 碰撞输出 保存每次车辆/车辆和车辆/人碰撞的 xml 记录。