VISSIM/vissim与Unity3D的联合仿真实例

在本节中,Hi-VRilS的开发和评价过程如图1所示。

第一步
Vissim中的微观仿真,根据Wiedemann 74汽车跟随模型进行交通仿真。
第二步
Unity3D游戏引擎展示虚拟环境并连接VR设备。由于由Unity3D负责输出,所以使用的输入源包括用于交通状况的Vissim,用于更好的现实环境的VR设备以及用于更好的驾驶体验的游戏方向盘和踏板。要将所有的输入数据导入到Unity3D中,需要一个脚本,通过生成一个预定义的Vissim网络使Unity3D和Vissim进行交互。为了系统评估,进行了驾驶试验和调查。然后,使用代理安全评价模型(SSAM)对实验结果进行分析(TTC),并通过统计t检验进行相似性比较。
VISSIM/vissim与Unity3D的联合仿真实例
图1 Hi-VRilS的开发和评价过程

基于Vissim的交通网络建模

Vissim是一种微观仿真,它可以重现真实的交通情况。因为Vissim (43)中嵌入了经过验证的驾驶行为理论,如Wiedemann 74和Wiedemann 91。其中,选择Vissim中的Wiedemann 74跟车模型是因为它适合城市交通和合流区域。因此,可以像在现实世界中驾驶汽车一样驾驶模拟汽车,比如改变车道和增加或减少速度。当驾驶人在VR环境中驾驶时会有实际的数据输出,因此可以对特定司机的驾驶技能进行分析。故利用Vissim建立路网时,应将交通背景情况纳入其中,以确保人的驾驶体验显得真实。为了作为背景交通模拟,必须使用构成Vissim的基本交通数据,包括交通量、交通信号和公共交通时刻表数据。此外,需要将真实交通方案中存在的基本交通规则纳入微观仿真中。

Unity3D虚拟环境建模

Unity3D在本研究中的作用是向驾驶员展示一个虚拟场景,因为Unity3D是创建具有高分辨率模型和各种效果的逼真虚拟场景的强大工具。三维模型分为两类:静态模型和动态模型。静态模型在模拟过程中不会发生变化,而动态模型在每个模拟步骤中都会根据开发人员定义的条件发生变化

静态模型

静态模型包括城市组件,如道路网络、建筑、停放的车辆和交通标志。

需要在Unity3D中对路网进行单独建模,因为从Vissim中提取出来的道路模型与真实的道路不太相似,例如,道路上没有车道标记,弯曲的道路上有一些无法接受的裂缝。使用RoadRunner:一个道路设计软件,可以创建一个更真实的道路网络,钩转弯框,车道标记和其他详细的标记和物体在道路上(图2-A)。
根据谷歌的卫星地图和街景地图设定建筑和交通标志模型。由于几乎不可能找到完全相同的建筑模型,所以使用了类似的建筑模型,让人感觉是真实的环境(图2-B)。此外,一辆停放的汽车被随机地放置在一些道路的停车位上,但这可以根据观察到的场景而改变。

动态模型

动态模型的创建是为了让人们觉得场景是尽可能真实的:详细的汽车,正常的固定交通信号,在这种情况下,包括Hook turn。
VISSIM/vissim与Unity3D的联合仿真实例

应用大众公司生产的Polo车辆作为Hi- VRilS的模拟驾驶车辆。这辆车具有基本的物理特性,因为它是由参与者驾驶的,并且在Vissim中,模拟车辆与其他车辆交互时被视为障碍物。就汽车内部而言,方向盘和速度仪表盘的运动类似于实际的驾驶状况。侧镜和平视显示器(HUD)也被嵌入,分别用于辅助谨慎的变道和检查当前驾驶速度(图2-D)。

交通信号模型也是定制的。未经修改的交通信号模型只是一个简单的与Vissim中的位置对齐的块。典型的hook-turn转弯的交通信号灯使用不同的3D模型。根据算法1(典型信号)和算法2(hook-turn 信号)创建了两种交通信号模型(图2-C)。在每个仿真步骤中使用脚本控制这些3D模型。为了检索交通信号信息,在每个算法,预先将Vissim中的信号头、连接和车道号分配到交通信号三维模型。
Algorithm 1

  1. Postpone executing the code until Vissim runs.
  2. Retrieve Vissim signal head data
    a. Find the ID number which is assigned to the traffic signal model
    b. Put the traffic signal model information into the traffic signal 3D model in Unity3D
  3. Check the Vissim signal status every single frame
    a. Check the status of Vissim signal
    b. Change the color of the signal head in Unity3D accordingly

算法1

  1. 推迟代码的执行直到Vissim运行。
  2. 提取Vissim的信号头数据
    a.找到分配给交通信号模型的ID号
    b.将交通信号模型信息放入Unity3D的交通信号三维模型中
    3.逐帧检查Vissim信号状态
    a.检查Vissim信号状态
    b.在Unity3D依次改变中信号头的颜色

Algorithm 2

  1. Same as algorithm 1 – steps 1 and 2
  2. Check the Vissim signal status every single frame
    a. If the status of Vissim traffic signal is red or yellow, blink the signal every second
    b. If the status of Vissim traffic signal is green, turn it off

算法2

  1. 与算法1 的步骤1和2相同
  2. 逐帧检查Vissim信号状态
    a.如果Vissim交通信号为红色或黄色,每秒钟闪烁一次
    b.如果Vissim交通信号为绿色,将其关闭

VISSIM/vissim与Unity3D的联合仿真实例图2 Hi-VRilS的可视化

集成(整合)平台

使用c#编程软件集成Vissim和Unity3D。

Vissim接口脚本用于创建包含信号信息的Vissim网络,并实时交换交通流、信号状态等数据。通过访问Vissim XML文件,Vissim接口脚本可以执行该角色。由于参与者在Unity3D游戏引擎中驾驶汽车,所以打开预定义Vissim网络的脚本应该被嵌入到Unity3D的一个游戏对象中。本节解释如何利用脚本建立连接。

主程序(主脚本)
加载Vissim网络到Unity3D的主脚本包含了扮演不同角色的脚本。算法3描述了本平台的主脚本。

Algorithm 3

  1. Mapping 3DVehicle
  2. Create VissimNetwork
  3. Dispose Player Car
  4. Import Signal Controller
  5. Initialize Communicator
  6. Perform Communication

算法3

  1. 映射(创建)3D车辆
  2. 创建VISSIM路网
  3. 处理演员车辆
  4. 导入信号控制器
  5. 初始化沟通器
  6. 执行沟通器

1. 映射(创建)3D车辆

由于该脚本只能从Vissim XML格式文件获取数值数据,因此无法将3D模型自动映射到相应的车辆数据。将3D模型映射到每个车辆数据是必要的。因此,从Vissim提取到的数据被映射到同一目录下具有相同名称的SketchUp文件的车辆。

2. 创建VISSIM路网

当加载vissim时,脚本会加载vissim中的所有的网络组成,例如:路网,信号灯头信息。创建他们的算法过程将被解释。
为了在Unity3D中创建Vissim网络,需要枚举每个路段的所有点的x坐标和y坐标信息,其中一个点不仅是直路的起点和终点,也是弯路的中点。Vissim XML文件包含所有道路网络信息,如链接号、车道数、道路或车道宽度、点的x、y坐标。因此,算法4的作用就是从XML文件中读取这些信息,并将这些信息放入字典中,以便在Unity3D中创建路网。

Algorithm 4

  1. Create a Link_Dictionary
  2. Access the XML file and find out link position information
  3. Put data into the dictionary with enumerating data following the Vissim XML order of having the same link number.
  4. Create a road segment based on the position information.

算法4

  1. 创建一个连接字典
  2. 访问xml文件并找出连接位置的信息
  3. 按照具有相同连接号的vissim xml顺序,将数据枚举到字典中
  4. 基于位置信息创建一个道路段

同样,Vissim中每条车道上代表交通信号灯的所有信号头都记录在字典中。

与道路网络不同,交通信号每隔一秒钟就更新一次,因此信号头由外部信号控制器Vissig控制。每个被控制信号头有一个信号程序和一个信号组,其中信号控制器由信号程序组成。在这里,信号程序意味着它可以在同一个十字路口使用不同的时间计划,比如固定时间(TOD)计划。此外,信号程序由指向每个方向的信号组组成。因此,信号控制器号、信号程序号、信号组号应同时输入。

另外,为了区分信号头对象,需要提供连接号、车道号等道路信息。通过在字典中搜索连接、车道和信号头号,可以找到特定的信号头。

Algorithm 5

  1. Create a Signal_Dictionary
  2. Access the XML file and find out if signal heads have all the necessary signal information.
  3. Enumerate signal head data matching with the ID order from Vissim.

算法5

  1. 创建一个信号字典
  2. 访问xml文件并且找出信号头是否有所必要的信号信息
  3. 枚举与vissim 中ID顺序匹配的信号头数据

3. 处理演员车辆

该方法在Unity3D虚拟环境中生成一辆汽车。在每次实验中,汽车都能在同一点启动。另外,汽车的x、y坐标被追踪并存储到字典中,以便与Vissim同步。

6. 执行沟通

在Vissim中分配给信号头的包含信号组的信号控制器信息被存储在一个字典中,并被同步以操作交通信号头。通过vissim与unity3D的交互,实现导入车辆和交通信号模型的并行化。
通过运行Vissim和Unity3D仿真,不断并行化字典中的更新数据。在每一帧中,脚本从Vissim车辆和信号状态中提取数据,并相应地调整这些状态。

Algorithm 6

  1. Create a Vissim_Vehicle_Dictionary and a Unity3D_Vehicle_Dictionary
  2. Input the Vissim vehicle position information (x, y and z coordinates) and the player’s car information (x, y and z coordinates) into the dictionary
  3. Retrieve the Vissim vehicle to Unity3D and the player’s vehicle to Vissim
  4. Retrieve signal status by reading current signal status from the Signal_dictionary
  5. Adjust the status of a vehicle, signal status to Unity3D and the status of player’s vehicle toVissim

算法6

  1. 创建一个vissim的车辆字典和一个Unity3D的车辆字典
  2. 将vissim的车辆位置信息(x, y, z的坐标)和玩家车辆的信息(x, y, z的坐标)导入字典
  3. 将vissim的车辆提取出来并导入unity3D,以及把演员车辆导入vissim
  4. 从信号字典中读取当前信号状态来获得信号状态
  5. 调整车辆和信号的状态并导入unity3D,以及把演员车辆的状态导入vissim

论文网址:
https://www.semanticscholar.org/paper/The-Use-of-Emerging-Virtual-Reality-Technology-in-%3A-Oh/359fc4faa0c38666add2333db078f8734e2fbe4e
论文题目:
The Use of Emerging Virtual Reality Technology in Road Safety Analysis : The Hook-Turn Case