简介#
![]()
LiSuM 是一个中间件,用于连接 LISA+ 和 SUMO,帮助在交叉口执行比 SUMO 原本允许的更复杂的交通控制。SUMO 通过 LiSuM 与 LISA+ 虚拟控制器通信。默认情况下,LiSuM 需要 LISA+ 7.2 版本,但也可以通过 --lisa-version 选项进行配置以支持旧版本。
LISA+ 是由 Schlothauer & Wauer 开发并商业化的专有软件工具,用于规划和评估复杂的交叉口。使用它创建的控制逻辑可以直接上传到真实控制器,或者使用 SUMO(通过 LiSuM)和 VISSIM(一种专有的微观 3D 交通模拟器)进行测试。
LiSuM 基于 Java 技术构建,因此可以在任何支持 Java 的操作系统上运行。LiSuM 的许可(与 SUMO 一样)遵循 EPLv2。
SUMO 通过 LiSuM 与 LISA+ 虚拟控制器通信
LiSuM 提供了两个版本:一个图形化版本称为 #LiSuM-GUI,以及一个适用于批处理的命令行版本称为 #LiSuM-Core。图形界面至少需要 Java 11 才能运行,LiSuM-Core(命令行版本)也可以使用 Java 8 运行。
LiSuM-GUI#
安装#
LiSuM 主窗口
运行 LiSuM 需要在计算机上安装以下软件:
- Java SE Runtime Environment(lisum-gui 需要 17 及以上版本,lisum-core 需要 7 及以上版本)
- SUMO(1.0.1 或更高版本)
- openjfx(仅限 Linux 下的 lisum-gui)
如果您下载了 Windows 安装程序或 Windows zip 包,LiSuM 应该已经包含在内,您只需运行:
java -jar "%SUMO_HOME%\bin\lisum-gui.jar"
您也可以尝试在 Linux 上下载并运行,但由于 Java 版本不匹配,最好按照以下描述自行编译。
编译 LiSuM#
这需要 Apache Maven 以及 SUMO 的源代码分发版或 git 仓库克隆。在命令行或终端窗口中,按顺序在 tools/contributed/traas 和 tools/contributed/lisum 文件夹中执行 mvn install。
要启动 lisum-core 或 lisum-gui,请找到 jar 文件,打开终端并使用 java -jar 命令执行它,例如:
java -jar $SUMO_HOME/tools/contributed/lisum/lisum-core/target/lisum-core-1.0.2-jar-with-dependencies.jar
java -jar $SUMO_HOME/tools/contributed/lisum/lisum-gui/target/lisum-gui-1.1.jar
入门指南#
当首次启动 LiSuM 时,系统会提示用户选择一个目录作为工作空间目录。工作空间是 LiSuM 查找现有模拟项目、存储新项目以及保存系统首选项的目录。如果需要,可以使用系统首选项窗口更改工作空间路径。
打开 LiSuM,在系统首选项对话框窗口中设置 SUMO 路径,并从工作空间中打开一个现有的模拟项目。在“工具”菜单中,选择“Start Lisa+ Virtual Controller”以启动 LISA+ 虚拟控制器的实例。按下 Ctrl + p 或点击工具栏上的“Play”按钮将打开 sumo-gui 的实例,该实例将接管系统控制。此时,LiSuM 的几乎所有菜单、工具栏和对话框窗口都会被锁定,从此时起,可以从 SUMO 开始、暂停、恢复和停止模拟。只有“控制单元管理”对话框窗口保持启用状态,因此可以在模拟执行期间更改控制单元设置。
为了更好地理解 LiSuM 的工作原理,您可以试用工作空间中的两个示例项目(sampleSimulation 和 simpleSampleSimulation)。
创建新的模拟项目#
模拟项目是一个包含以下内容的目录:
- LiSuM 配置文件 (lisum.xml)
- SUMO 文件 (*.add.xml, *.net.xml, *.rou.xml, *.sumocfg 等)
- 包含 LISA+ 控制单元文件的目录(从 LISA+ 导出到 Vissim)
配置文件#
LiSuM 配置文件是一个 XML 文件(始终命名为 lisum.xml),其中包含控制 LISA+ 在模拟执行期间与 SUMO 通信方式的必要信息,它告诉 LiSuM 如何将控制单元、信号组和检测器相互匹配。配置文件基本上由强制性元素 input 和 controlUnits 组成,controlUnits 由两个非强制性标签 controlUnits 和 detectors 组成。由于 LISA+ 和 SUMO 对其元素使用不同的命名约定,字段 controlUnits 和 detectors 告诉 LiSuM 它们在每个系统中是如何命名的。
示例:
<simulation>
<input>
<lisa>lisaDirectory</lisa>
</input>
<controlUnits>
<controlUnit lisa="z1_fg1" sumo="gneJ1" >
<signalGroups>
<signalGroup lisa="K1" sumo="0" />
<signalGroup lisa="K2" sumo="1" />
<signalGroup lisa="K3" sumo="2" />
<signalGroup lisa="K4" sumo="3" />
</signalGroups>
<detectors>
<detector lisa="D1" sumo="myLoop1" />
</detectors>
</controlUnit>
<controlUnit lisa="z1_fg2" sumo="gneJ2" >
<signalGroups>
<signalGroup lisa="K1" sumo="0,1,2" />
<signalGroup lisa="K2" sumo="3,4" />
<signalGroup lisa="K3" sumo="5,6,7"/>
<signalGroup lisa="K4" sumo="8" main="K3" />
</signalGroups>
</controlUnit>
</controlUnits>
</simulation>
日志记录级别
上面显示的配置文件声明了以下内容:
- LISA+ 控制单元文件位于目录
<SIMULATION_DIRECTORY>/lisaDirectory中。 - 有两个控制单元,其中...
- 第一个控制单元...
- 将 LISA+ 的控制单元 z1_fg1 与 SUMO 中的 gneJ1 匹配。
- 由 LISA+ 的四个信号组和 SUMO 的四个信号组组成。
- 包含一个在 LISA+ 中称为 D1、在 SUMO 中称为 myLoop1 的检测器。
- 第二个控制单元...
- 在 LISA+ 中称为 z1_fg2,在 SUMO 中称为 gneJ2。
- 同样包含 LISA+ 的四个信号组和 SUMO 的 9 个信号组,例如,LISA+ 信号组 K2 控制 SUMO 信号组编号 3 和 4 的行为。
- 第四个信号组包含属性 main 设置为 K3。这意味着如果 LISA+ 信号组 K4 在周期的任何时间被禁用(OFF),SUMO 信号组编号 8 将采用 LISA+ 信号组 K3 的状态。
- 第一个控制单元...
工具#
控制单元管理#
控制单元管理窗口
通过按下 Ctrl + M 或点击模拟工具栏上的“Grid”按钮可以打开控制单元管理对话框窗口。在此对话框中,可以通过打开和关闭、选择程序或启用或禁用程序设置(如 VA ("Verkehrsabhängig" = 感应式) 和 ÖV ("Öffentliche Verkehrsmittel" = 公共交通))来更改模拟中所有可用控制单元的行为。
也可以通过取消选中控制单元组合框右侧的复选框(下图)来停用与 LISA+ 的通信。默认情况下,未分配给任何 Sumo 交叉口的 LISA+ 控制单元显示为禁用。
用于停用与 LISA+ 通信的复选框
LISA+ 虚拟控制器#
LISA+ 提供一个独立的可执行 Java JAR 文件,其中包含一个名为 LISA+ Virtual Controller 的应用程序,用于模拟控制单元设备并在其上运行控制逻辑。因此,运行 LiSuM 不需要安装 LISA+。此应用程序最初旨在与 Vissim 一起使用。与 LISA+ Virtual Controller 的通信通过 RESTful Web 服务进行,通信协议是 REST/HTTP,数据格式使用 WSDL/XSD 文件描述,这些文件用于描述 SOAP 服务。
在启动 SUMO 之前,必须打开并运行 LISA+ Virtual Controller 的实例(点击 菜单:工具 -> Start Lisa+ Virtual Controller 或按 Ctrl + r)。
默认情况下,LISA+ Virtual Controller 及其配置文件 (OmlFgServer.ini) 位于 LiSuM 安装目录下的 OmlFgServer 目录中。此路径可以在系统首选项窗口中更改(菜单:工具 -> 首选项)。
LISA+ Virtual Controller (Windows 7)
模拟目录#
LiSuM 在包含已加载的 lisum.xml 文件的目录中搜索模拟输入文件。
LiSuM-Core#
示例#
示例输入可以在 [1] 找到。
其他#
相位状态匹配问题#
在现实世界和 LISA+ 中,特定流向的通行权规则可能由信号组合控制(黄色闪光灯、方向箭头等)。Lisum 将信号状态的组合转换为单个 sumo 信号状态。为此,lisum.xml 文件中的信号组必须按其优先级顺序给出。
示例:如果右转由一个可以显示(红、黄、绿)的头顶信号灯和一个可以显示(红、绿)的右转箭头标志控制,并且箭头具有优先权,那么右转箭头的信号组必须在头顶信号灯的信号组之前声明。
编译 LiSuM#
如果您想为源代码做出贡献或出于其他原因进行构建,请确保您的系统上安装了 maven 和兼容的 JDK(11 或更高版本)。cmake 配置步骤将创建一个 "lisum" 目标来构建 LiSuM-Core 和 LiSuM-GUI。只需使用 make(在 Linux 或 macOS 类环境中)或从您的 IDE(例如 Windows 上的 Visual Studio)运行该目标即可。
