1. 程式人生 > 實用技巧 >VISSIM/vissim與Unity3D的聯合模擬例項

VISSIM/vissim與Unity3D的聯合模擬例項

在本節中,Hi-VRilS的開發和評價過程如圖1所示。

第一步
Vissim中的微觀模擬,根據Wiedemann 74汽車跟隨模型進行交通模擬。
第二步
Unity3D遊戲引擎展示虛擬環境並連線VR裝置。由於由Unity3D負責輸出,所以使用的輸入源包括用於交通狀況的Vissim,用於更好的現實環境的VR裝置以及用於更好的駕駛體驗的遊戲方向盤和踏板。要將所有的輸入資料匯入到Unity3D中,需要一個指令碼,通過生成一個預定義的Vissim網路使Unity3D和Vissim進行互動。為了系統評估,進行了駕駛試驗和調查。然後,使用代理安全評價模型(SSAM)對實驗結果進行分析(TTC),並通過統計t檢驗進行相似性比較。

在這裡插入圖片描述
圖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。
在這裡插入圖片描述

應用大眾公司生產的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交通訊號為綠色,將其關閉

在這裡插入圖片描述圖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