跳轉到內容

Disim 高速公路模擬器/簡介

來自 Wikibooks,開放世界的開放書籍

啟動 Disim

[編輯 | 編輯原始碼]

要啟動 Disim,請開啟終端並鍵入

disim

根據您的安裝情況,您可能需要導航到 Disim 資料夾並使用以下命令啟動它

./disim
Disim 模擬器的螢幕截圖

如果您使用圖形支援編譯了 Disim,則應該會出現一個類似於右側的視窗。如果您不需要圖形支援,您可以跳過此部分並轉到 命令列選項

圖形介面

[編輯 | 編輯原始碼]

圖形介面允許您使用滑鼠在地圖中導航

  • 左鍵:更改攝像頭的方向,
  • 右鍵:水平平移攝像頭,
  • 中鍵(或同時按住左右鍵):放大和縮小地圖,
  • 滾輪:放大和縮小地圖,
  • SHIFT + 任何按鈕:執行相同的操作但速度更快。

它允許您使用 CTRL 點選地圖上的任何元素以獲取有關該元素的資訊

  • CTRL + 左鍵:選擇並顯示有關所點選元素的資訊(目前尚不支援此功能)。

視窗頂部有幾個選單

  • 檔案
    • 開啟:開啟一個檔案選擇視窗,您可以在其中選擇要載入到模擬器中的地圖。模擬將在新地圖上的時間零點重新開始。其他選項保持不變。
    • 重新載入:重新開啟當前地圖並重新開始模擬。
    • 退出:退出模擬器。
  • 操作
    • 暫停:停止時間。時間步長持續時間減少到零,但汽車繼續執行。此選項在除錯汽車行為時非常有用,正如我們將在本文件的教程部分中看到的那樣。
    • 快速:透過將時間步長持續時間設定為固定值(預設情況下為 64 毫秒)來儘可能快地執行模擬。
    • 無顯示:與快速相同,但停止 3D 顯示。
    • 更慢:您可能希望以更低的速度執行,而不是即時執行。此選項減慢時間。
    • 更快:與更慢相同,但加速時間。
    • 獲取資訊:此選單目前不支援。
  • 檢視
    • 跟隨汽車:固定攝像頭以跟隨在道路網路上行駛的車輛。
    • 上一輛車:跟隨上一輛車。
    • 下一輛車:跟隨下一輛車。
    • 顯示網格:在地圖上顯示十米網格。該網格的每個單元格都是一個 10 米乘 10 米的正方形。
    • 顯示真實世界:顯示一個漂亮的地形。
    • 顯示天空盒:顯示背景影像。
    • 繪製陰影:顯示車輛的陰影。
  • 天氣
    Disim 中的雨和霧效果
    • 下雨:將天氣更改為下雨。它實際上會降低每輛車的加速度和視野能力。
    • 霧:將天氣更改為有霧。它實際上會降低每輛車的視野能力。
  • 控制器
    • 載入指令碼:允許您選擇一個 LUA 指令碼來控制每輛車的行為。
    • 重新載入:重新載入 LUA 指令碼。這在您需要在執行時更改指令碼時很有用,正如我們將在本文件的教程部分中看到的那樣。
    • 解除安裝:解除安裝指令碼並返回到一個虛擬的 C/C++ 控制器。

命令列選項

[編輯 | 編輯原始碼]

Disim 提供了許多命令列選項。可以透過圖形介面啟用的所有選項都有一個命令列對應項。在終端中鍵入disim --help將顯示所有可用選項

./disim --help
Disim 1.0a

Simulates a complete highway traffic.

Usage: Disim [OPTIONS]...

  -h, --help               Print help and exit
  -V, --version            Print version and exit
      --log[=STRING]       Log file  (default=`logs/log.txt')
      --record             Whether to record data
  -v, --verbose-level=INT  Verbose level  (default=`4')
  -m, --map=STRING         Map file  (default=`./maps/default.map')
  -d, --duration=INT       Duration of the experiment in seconds  (default=`0')
      --fast               Whether to start the simulation in fast mode  
      --pause              Whether to start the simulation in pause mode  
      --nogui              Whether to display the GUI  (default=`1')
      --density=INT        Initial density of cars at startup in veh/km (default=`0')
      --truck=DOUBLE       Proportion of trucks at all times  (default=`0.1')
      --weather=STRING     The weather conditions. Either nice, rain, fog or rain+fog
      --time-step=DOUBLE   The largest time-step in seconds  (default=`0.064')
      --lua=STRING         The LUA script to be executed as the car controller
      --luacontrol=STRING  The LUA script to be executed as the infrastructure controller
      --ncpu=INT           The number of cores on your computer  (default=`0')
  • log:指定一個日誌檔案,模擬器可以在其中記錄正在發生的事情。記錄在該日誌檔案中的內容取決於所選的詳細級別。
  • record:開啟錄製功能。所有道路感測器都將開始記錄資料並將這些資料儲存在logs資料夾中,其名稱與其對應。我們將在教程部分更詳細地介紹這一點。
  • verbose-level:指定模擬器的詳細程度,數值越高,詳細程度越高。
  • map:指定要載入到模擬器中的地圖。
  • duration:以秒為單位指定模擬的持續時間。當持續時間達到指定的時間時,Disim 會自動退出。0 秒的持續時間表示模擬不應停止。
  • fast:在啟動時開啟無顯示選項。
  • pause:在啟動時將模擬置於暫停狀態。
  • nogui:這可能是最重要的選項。它允許在沒有圖形介面情況下執行模擬,因此 Disim 不需要顯示伺服器來執行,並且可以在專用伺服器上執行。
  • density:以每公里車輛數為單位指定高速公路上初始存在的車輛密度。
  • truck:指定高速公路上行駛的卡車比例。
  • weather:指定天氣狀況。它可以是“晴朗”、“下雨”、“有霧”或“雨加霧”。
  • time-step:以秒為單位指定最小時間步長。該值越高,模擬速度越快(在快速nogui模式下),但該值越低,模擬的真實性越高。預設情況下為 64 毫秒,但請注意 500 毫秒可以產生相當不錯的結果。
  • lua:指定要執行的 LUA 指令碼以控制車輛。有關詳細資訊,請參閱指令碼編寫部分或教程。
  • luacontrol:指定要執行的 LUA 指令碼以控制基礎設施。
  • ncpu:指定模擬車輛時要生成的額外執行緒數量。此數量應大致等於執行 Disim 的計算機上的 CPU 核心數量。此選項有效地將工作負載並行化到計算機上可用的不同處理器上,從而有可能使模擬速度更快。

以下是一個示例命令,該命令在 my_highway.map 檔案中描述的道路網路上執行一小時的模擬器,並且沒有圖形介面,並且記錄放置在高速公路上感測器的資料

./disim --nogui --record --map="./maps/my_highway.map" --duration=3600

下一個命令將啟動 Disim,並使用 my_script.lua 中的指令碼控制汽車行為,並將卡車比例設定為 50%

./disim --truck=0.5 --lua="./scripts/my_script.lua"

以下命令將使用ncputime-step選項在一小時模擬中顯示 Disim 的實際執行時間。

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.064 --ncpu=0
real	9m49.858s

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.064 --ncpu=6
real	4m55.867s (Gain: 2x)

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.5 --ncpu=0
real	1m16.503s (Gain: 7.75x)

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.5 --ncpu=6
real	0m37.891s (Gain: 15.9x)

下一步是什麼?

[編輯 | 編輯原始碼]

下一部分中,我們將解釋如何建立自己的高速公路網路。

華夏公益教科書