Caution
请注意,这是一份工作文档... 并非用户文档!
实现新的跟驰模型#
在 SUMO 中,跟驰模型是抽象类 MSCFModel(microsim/cfmodels/MSCFModel.h)的一个实现。
要添加一个新模型,必须执行以下步骤:
- 在 utils/common/SUMOXMLDefinitions.h 和 .cpp 中定义一个新的模型名称
- 在 utild/xml/SUMOVehicleParserHelper::getAllowedCFModelAttrs() 中定义模型参数(如有必要,在 SUMOXMLDefinitions 中定义新属性)
- 在 microsim/cfmodels 中添加一个新类(例如,复制该目录下的现有类之一)
- 将此类添加到构建文件中(例如,在 Linux 上构建时添加到 microsim/cfmodels/Makefile.am 中)
- 在 microsim/MSVehicleType::build() 中添加代码,根据新名称选择新类
如果您的模型需要持久化状态,则需要从 MSCFModel::VehicleVariables 派生一个类来保存它。请参阅 microsim/cfmodels/MSCFModel_IDM 作为示例。
定义车辆类型#
在开始修改代码之前,我们应该决定如何表示车辆类型。以下是一些事实和需求(未排序):
- ok 仿真和路由模块都必须能够解析车辆类型定义
- 最好允许针对 XML 模式进行验证
- 必须能够定义至少两个子类型:跟驰模型和换道模型(也许换道模型甚至可以分为导航部分和战术部分)
- ok 参数应具有默认值
- ok 必须存在默认车辆类型
- 模型因参数集而异
可能的描述方式#
索引 |
示例 |
优点/缺点 |
|---|---|---|
A |
<vtype cfModel="xxx" xxxParam1="..." xxxParam2="..." ... |
|
B |
<vtype-XXX xxxParam1="..." xxxParam2="..." ... |
|
C |
<cfmodel id="#id" model="xxx" param1="..." param2="..." .../> |
|
D |
<vtype cfModel="xxx" param1="..." param2="..." ...> |
|
E |
<vtype ...> |
|
F |
<vtype ...> |
|
(当前)选择的描述方式#
经过一些讨论,选择了以下车辆类型描述方式:
<vtype id="..." ...>
<carFollowing-Krauss ... >
<laneChanging-DK2002 ... >
</vtype>
vtype 将包含既不能归为换道模型也不能归为跟驰模型的参数,例如车辆类型的颜色、车辆的宽度等,这些(目前)仅用于可视化。此外,车辆的长度以及其他不仅由一个模型使用的参数也存储在此处。
此示例中嵌入的 carFollowing-Krauss 元素描述了跟驰模型(本例中为 Krauss),laneChanging-DK2002 描述了换道模型(Daniel Krajzewicz 2002 年的模型 :-)),每个都有自己的参数。
希望保留已知的 vtype 定义。在这种情况下,Krauss 模型默认保持选定。
Note
可能无法针对模式(schema)对此进行验证。
跟驰模型接口#
目前,假设应为每个模型重新实现以下方法;“通用”列应标识那些可能在不同模型间相同的方法:
| 方法 | 通用? | 描述 |
|---|---|---|
| ffeV | 否 | |
| ffeS | 否 | |
| maxNextSpeed | 否 | 内部 SUMO 调整 |
| brakeGap | 可能 | 应取决于最大减速度(一个相当通用的值)和物理特性,仅此而已 |
| approachingBrakeGap | 可能 | 与 brakeGap 几乎相同,只是不包含驾驶员的反应时间 |
| interactionGap | 否 | |
| hasSafeGap | 否 | |
| safeEmitGap | 否 | |
| dawdle | 否 | |
| decelAbility | 相当不 |
加载和解析车辆类型#
正如已经为车辆实现的那样,添加了一个新的中间结构 <SUMO_HOME>/src/utils/common/SUMOVTypeParameter,其中包含车辆类型描述。在读取 XML 定义时,路由器和仿真都使用额外实现的辅助方法(位于 <SUMO_HOME>/src/utils/xml/SUMOVehicleParserHelper)来填充此结构。
SUMOVTypeParameter 具有成员变量,用于存储那些既不属于跟驰模型也不属于换道模型的车辆类型参数:id、length、maxSpeed、defaultProbability、speedFactor、speedDev、emissionClass、color、vehicleClass、width、offset、shape。这些值初始化为默认值。读取值时,SUMOVehicleParserHelper 将有关哪些值是从 XML 描述中设置的信息存储在 SUMOVTypeParameter::setParameter 中。这允许在将定义写回文件时仅保存(传递)已设置的值 - 路由器需要此功能。
跟驰模型的参数保存到映射 SUMOVTypeParameter::cfParameter 中,模型名称保存到 SUMOVTypeParameter::cfModel 中。请注意,换道模型参数处理尚未实现。该映射仅包含读取的 XML 文件中给出的模型参数;此时不插入默认值。为了允许处理旧的 vtype 定义,直接存储在 vtype 元素内的 Krauss 跟驰模型参数也存储在此映射中。
路由器直接使用 SUMOVTypeParameter 类 - 使得 ROVehicleType 变得不必要。仿真使用新方法 MSVehicleType::build 来构建描述的 MSVehicleType/MSCFModel 组合。在此方法中设置缺失的默认值以获得完整的车辆类型/模型描述。
