自行车仿真#
本页描述了SUMO中的自行车仿真。与纯机动车仿真相比,构建包含自行车的综合交通仿真场景需要采取额外的步骤。
Caution
自行车仿真是一个正在发展的课题,目前仍存在一些困难。下文将对这些困难进行讨论。
自行车建模方法#
目前,SUMO尚未实现专门的自行车运动模型。需要利用现有模型进行重新配置。
将自行车视为慢速车辆#
在这种情况下,车辆被指定为具有相应类型的车辆:
<vType id="bike" vClass="bicycle"/>
<vehicle type="bike" .../>
请注意,当指定 vClass="bicycle" 时,系统会自动使用 guiShape="bicycle" 以及合理的默认参数。通过调整用于加速度、减速度、最大速度等的vType参数,可以模拟不同类型的骑行者。
有用的模型参数#
一旦选择了vClass "bicycle",以下参数将被设置为自行车的默认值,但仍可自定义:
- minGap = 0.5 m
- max. acceleration = 1.2 m/s^2
- max. deceleration = 3 m/s^2
- emergency deceleration = 7 m/s^2
- Length = 1.6 m
- maxSpeed = 50 km/h
- desiredMaxSpeed = 20 km/h
自行车的某些其他参数值与车辆明显不同。如果没有相应校准的真实数据,以下直观建议可供参考。
- latAlignment = "right" (骑行者在车道右侧骑行)
- carFollowModel = IDM (如果需要平滑的加速度)
- lcStrategic = 0.5 (与默认值1相比,此设置使自行车较晚执行战略性换道)
- lcCooperativeRoundabout = 0. (在多车道环岛中,骑行者保持在右侧车道)
- lcTurnAlignmentDistance = 20. (距离自行车开始保持车道右/左侧以准备转弯的位置的距离)
- jmCrossingGap = 4 (与走向自行车冲突点的行人的最小距离 - 低于汽车的默认值10)
- jmSigmaMinor = 0. (通过次要连接处时无瑕疵)
- jmStoplineGap = 0.5 (在优先级/信号灯控制的停止线前的停车距离)
速度限制#
自行车通常不受道路速度限制的约束,而是受个人偏好的限制。这不能简单地通过vType属性 maxSpeed 来建模,因为它不受随机选择的个人 speedFactor 的影响(除非设置了 carFollowModel="KraussPS")。相反,自行车速度受 desiredMaxSpeed(乘以个人speedFactor)的限制。因此,默认情况下 desiredMaxSpeed < maxSpeed。
为了模拟坡度对自行车速度的影响(仅适用于 carFollowModel="KraussPS"),需要 desiredMaxSpeed 高于“功率限制” (maxSpeed)。
依赖于坡度的速度根据 maxSpeed * speedFactor 进行缩放,从而产生以下行为:
- 上坡的车辆会被减速至低于
maxSpeed * speedFactor - 平地上的车辆最高可达速度
maxSpeed * speedFactor - 下坡的车辆可能超过
maxSpeed * speedFactor,达到最高desiredMaxSpeed * speedFactor的速度
问题与解决方法#
- 自行车道上没有双向行驶
- 默认情况下,没有自行车和行人共享的空间。这可以通过使用子车道模型并定义允许自行车和行人的车道来解决。
- 在单车道道路上,车辆无法超车。这可以通过使用子车道模型来解决。
- 交叉口模型没有针对自行车的特殊调整。当自行车从优先道路接近大型优先交叉口时,这会导致不切实际的(较大的)安全间隙。
克服大多数这些问题的一种方法是使用外部控制脚本在交叉口控制自行车的运动。这种方法在在SUMO中集成外部自行车模型, Heather Twaddle 2016中有描述。
将自行车视为快速行人#
在这种情况下,使用以高速行走的行人。
问题与解决方法#
- 不支持正确的可视化 - 运动模型未经验证
构建用于自行车仿真的路网#
自动导入#
自版本0.24.0起,支持从OpenStreetMap导入自行车道。自版本1.17.0起,您可以使用选项 --osm.bike-access 启用它们。早期的typemap方法仍然可用(也可以与修改自行车道宽度的选项一起使用)。
生成带自行车道的路网#
自行车道是仅允许vClass bicycle 通行的车道。有多种不同的选项可用于生成带自行车道的路网,下文将对此进行说明。所有这些选项都会识别现有自行车道的存在,并且在这种情况下不会添加另一条车道。
显式指定附加车道#
在描述边 edges (plain.edg.xml) 时,可以在纯XML输入中显式定义自行车道。这是通过定义一个仅允许vClass “bicycle” 的附加车道并设置适当的宽度来完成的。在这种情况下,在其他车道上禁止自行车通行可能是有用的。此外,必须修改任何预先存在的连接定义以考虑新的自行车道。
显式指定自行车道#
与上述方法不同,可以使用边属性 bikeLaneWidth。这将导致向该边添加指定宽度的自行车道,重新映射连接,并从所有其他车道移除自行车通行权限。
Note
下文描述的启发式方法也会执行自动连接移位和从非自行车道移除自行车权限。
基于类型的生成#
在导入具有定义类型的边时,也可以声明某些类型应接收人行道。这可用于在导入OSM数据时自动为住宅街道生成自行车道,而省略高速公路的自行车道。
<types>
<type id="highway.motorway" numLanes="3" speed="44.44" priority="13" oneway="true" disallow="pedestrian bicycle"/>
<type id="highway.unclassified" numLanes="1" speed="13.89" priority="5" bikeLaneWidth="1" disallow="bicycle"/>
<type id="highway.residential" numLanes="1" speed="13.89" priority="4" bikeLaneWidth="1" disallow="bicycle"/>
<type id="highway.living_street" numLanes="1" speed="2.78" priority="3"/>
...
</types>
一个特殊的类型文件,基于额外的OSM属性导入自行车道,可以在<SUMO_HOME>/data/typemap/osmNetconvertBicycle.typ.xml找到。建议优先使用此文件从OSM导入自行车道,因为它使用了更准确的数据。
启发式生成#
如果边类型不可用,第三种选择是使用基于边速度的启发式方法。它会为所有在给定速度范围内的边添加自行车道。这通过使用以下选项来控制:
| 选项 | 描述 |
|---|---|
| --bikelanes.guess <BOOL> | 基于边速度猜测自行车道 |
| --bikelanes.guess.max-speed <FLOAT> | 为速度等于或低于给定限值的边添加自行车道 默认:13.89 |
| --bikelanes.guess.min-speed <FLOAT> | 为速度高于给定限值的边添加自行车道 默认:5.8 |
| --bikelanes.guess.exclude {{ DT_ID }}[, |
指定不应接收自行车道的边列表 |
基于权限的生成#
选项 --bikelanes.guess.from-permissions <BOOL> 适用于指定边权限的网络(例如DlrNavteq)。它会为所有允许自行车在其任何车道上通行的边添加自行车道。选项 --bikelanes.guess.exclude <ID>[,<ID>]* 在此也适用。
使用 netedit 添加自行车道#
要在 netedit 中为一组边添加自行车道,请选择这些边并在其上右键单击。从上下文菜单中选择 车道操作->添加限制车道->自行车道。
关于通行权规则的说明#
在网络中使用自行车道时,右转车辆必须让行直行的自行车。交叉口模型支持这些通行权规则,并在适当的地方构建内部交叉口。
同样,在自行车道(道路右侧)上左转的自行车必须让行直行的车辆。
间接左转#
在现实中,左转的自行车可能分两个阶段移动: 1. 直行穿过,然后 2. 向左转90度,然后再次直行穿过
默认情况下,netconvert 生成宽曲线而不是像上面那样两次直行。要更改此行为,用户可以设置连接属性 indirect="true"。
如果需要对间接左转的几何形状进行细粒度控制,也可以为这些内部车道设置自定义形状。要调整自行车的等待位置(第一阶段结束的点),必须设置连接属性 'contPos'。
要定义受控的间接转弯,其中两个阶段都遵守对应于当前运动方向的交通灯,则需要另一个自定义设置。左转连接的第一部分将由交通灯根据连接的 'linkIndex' 属性自动控制。 第二部分可以通过设置可选属性 'linkIndex2'来控制。最简单的设置是复制控制从右向左直行车辆(或行人)运动的linkIndex。此外,通过激活子车道模型,可以实现自行车/摩托车在交叉口前的并排等待。
有时,自行车/摩托车不能正确地并排等待。以下参数可以帮助解决/改善此问题。
- latAlignment="nice"
- minGapLat="0.1"
简短概述#
| 输入 | 期望输出 | 使用的选项 |
|---|---|---|
| shapefile或其他无自行车信息的数据 | 无自行车基础设施 | 无 |
| 适用处的自行车道 | --bikelanes.guess | |
| OpenStreetMap | 无自行车基础设施 | 无 |
| 与输入一致的自行车道 | --osm.bike-access | |
| 猜测的自行车道(丢弃输入) | 为所有应接收自行车道的街道类型赋予自行车道宽度的typemap或 --bikelanes.guess |
上述选项仅适用于为现有街道或人行道添加更多车道。单独的自行车道始终会被导入(如果typemap或其他过滤选项未阻止)。
自行车路径规划#
在仿真中对自行车进行路径规划时,可以使用选项 --device.rerouting.bike-speeds 来启用单独的自行车速度跟踪。这确保了可以使用专用自行车道的自行车的路径规划不受拥堵汽车的影响。
