Device

本页面描述如何实现一个新的设备(device)。

设备有什么用?#

设备是一个用于存放数据和功能的容器,它驻留在单个车辆中。设备会收到所有车辆移动的通知,并可以与车辆或其他设备进行交互。设备的一个重要特点是,可以只为模拟车辆中的一部分配备设备。通常,设备支持某种形式的输出。以下是可用设备及其功能的列表。

MSDevice_Tripinfo#

记录车辆的出发和到达,以及关于已完成行程的聚合度量,如平均速度和等待时间。此设备也用于表达来自其他设备(如排放 MSDevice_HBEFA)的聚合结果。此设备通过选项 --tripinfo-output <FILE> 激活,然后对所有车辆生效。

MSDevice_Vehroutes#

记录车辆行驶过的边(edge),并可选择记录离开每条边的时间。它还可以记录动态的路线更改。此设备也用于表达来自其他设备(如排放 MSDevice_HBEFA)的聚合结果。此设备通过选项 --vehroute-output <FILE> 激活,然后对所有车辆生效。

MSDevice_Routing#

触发配备该设备的车辆进行周期性重路由。此设备通过选项 --vehroute-output.* 激活,然后对选定的车辆生效。可以为特定车辆或一部分车队配备。

MSDevice_Person#

如果一个人乘坐车辆,会自动创建此设备。它在管理上下车时使用。

MSDevice_HBEFA#

计算车辆的排放,如 定义车辆、车辆类型和路线#车辆排放类别 中所述。此设备通过选项 --device.hbefa.* 激活,然后对选定的车辆生效。可以为特定车辆或一部分车队配备。

MSDevice_Battery#

此设备用于对电动汽车的能耗和电池容量进行建模。

MSDevice_SSM#

此设备记录配备该设备的车辆的替代安全措施(surrogate safety measures),参见 Simulation/Output/SSM_Device

MSDevice_Example#

此设备作为自定义设备的实现示例。

实现新设备的步骤#

复制示例设备#

创建新设备的建议方法是,通过复制文件 src/microsim/devices/MSDevice_Example.{h,cpp} 来创建一个新类。

为了编译新类,必须将其添加到 src/microsim/devices/Makefile.am(在 Linux 上)或添加到项目 z_libmicrosim_devices(在 Windows 上)。

为了使其可用,还必须在 src/microsim/devices/MSDevice.cpp 中的函数 insertOptionsbuildVehicleDevices 中添加该设备。

将设备分配给车辆#

设备通过全局选项分配,以为所有或一部分车队配备。或者,可以通过设置 <vehicle><vType>-通用参数 来定义。新的分配选项通过调用函数 MSDevice::insertDefaultAssignmentsOptions 自动生成。是否应为特定车辆配备设备的测试通过调用 MSDevice::equippedByDefaultAssignmentOptions 完成。这些方法的使用在 MSDevice_Example 中有演示。

添加您自己的功能#

设备通过周期性地更新其状态(例如 MSDevice_Routing)或在每次车辆移动时(例如 MSDevice_Battery)来工作。许多设备执行某种形式的输出,可以是周期性的(MSDevice_Routing),响应计算出的事件(MSDevice_BTreceiver),或在车辆离开模拟时(MSDevice_Vehroutes)。在车辆被移除之前,会为每个设备调用方法 generateOutput

测试您的代码#

Note

测试新代码非常重要,有关如何测试的建议可以在 tests/sumo/extended/device_example/ 中找到。

展示您的作品#

如果您实现了一个新设备,并且认为它可能对其他 SUMO 用户有用,请为我们的社区做出贡献,并告诉我们您的工作。我们很乐意帮助您将您的设备纳入主开发分支。