古詩詞大全網 - 成語故事 - 交通系統仿真軟件 —— SUMO

交通系統仿真軟件 —— SUMO

(本文內容總結自 SUMO 官網 和 Youtube 視頻教程 published by Rodrigue Tchamna.)

SUMO ( Simulation of Urban Mobility) 是免費、開源的交通系統仿真軟件,可以實現交通流的微觀控制,即具體到道路上每壹輛車的運行路線都可以單獨規劃。

SUMO 最早發布於 2001年,主要由 German Aerospace Center 下屬的 Institute of Transportation Systems 的研究人員開發。

如果使用 SUMO 仿真,官方希望引用的參考文獻為:

SUMO 已經在 Ubuntu 的官方 repo 中了,可以用如下命令直接安裝:

如果要安裝最新版本,也可以手動添加 SUMO 的 repo 再安裝

SUMO 並不是單個程序,而是包含了多個 package/ application,提供了豐富的交通系統建模仿真的功能。主要包括如下應用程序:

對於小型網絡,或者壹些需要特別構造的道路網絡,可以采用手動方式創建,主要包含 5 個文件:

上述文件本質上都是 xml 文件,不過為了方便區分其作用,額外增加了壹個後綴名。

假設我們要創建如下圖所示的小型道路網絡

圖中黑色節點對應交通路口,連邊對應道路。每個路口所在位置坐標已給出。

創建如下 node file,名為 my_nod.nod.xml:

創建對應上述路網的 edge file,名為 my_edge.edg.xml,內容如下:

其中 id 和 type 可以隨便命名,這裏為了方便記憶,用 3L45,表示有 3 條 lane,速度上限是 45 m/s,隨後會在 type file 中對相應的 type 進行定義。

對前述 edge 文件中的 type 進行定義,文件名為 my_type.type.xml:

基於以上三個文件,可以通過命令 netconvert 創建 net 文件,命令如下:

命令中各個參數的含義非常直觀。

上述命令生成 my_net.net.xml 文件。以後如果改動了 node, edge, type files,都要重新生成壹次 net file.

定義 route file,名為 my_route.rou.xml:

關於 Vehicle 和 route 的詳細介紹,可以 參考官網 。

運行程序時需要送入壹些參數,可以通過命令行形式送入,如果參數太多、太長,為了方便起見,可以將參數統壹放到 xml config 文件中,在運行時,可以調用這個 config 文件。

定義 my_config_file.sumocfg:

如果壹個參數既出現在了 config 文件中,又在 command line 中,則采用 command line 的設置。

壹切準備就緒,下邊運行程序

出現如下界面:

可以檢查壹下生成的路網是否與期望的相同,以及每條路上的 lane 數目。

然後將工具欄中的 Delay 設置為 100 ms,否則仿真開始之後瞬間結束。

點擊綠色三角符號,運行仿真。在時間走到 10 時,bus 和 car 出現在相應的到路上。時間到達 1999 時仿真結束。

在工具欄中還可以設置 standard, fast standard, real world。可以切換壹下,看看顯示效果。

至此,壹個簡單的 SUMO 仿真 demo 就完成了。

在手動構造路網 net.xml 文件時,我們也可以用 SUMO 自帶的 NETEDIT 程序,通過 NETEDIT GUI 編輯路網,可能效率更高壹些。感興趣的讀者可以參考 SUMO 官網的教程 。

上述手動設置路網的方式只適用於比較簡單的情況,如果要構造與現實世界比較接近的大型路網,我們可以用下邊的從外部導入 OSM 路網的方法。

進入 .xml 文件,這裏不是通過基於 node, edge, type 文件的整合,而是直接從 osm 地圖轉化過來。下邊就是如何得到 route 文件。

對於這種大型的路網,手動創建 route 文件也很麻煩,這裏我們用 SUMO 自帶的 randomTrips.py 程序創建隨機的 route 文件

其中 randomTrips.py 文件放在了 SUMO_HOME 目錄下,即 /usr/share/sumo 目錄下。

config 文件名為 sjtu.sumocfg,內容如下:

到目前為止,已經設置好了所有必須的文件,可以通過以下命令啟動仿真:

啟動仿真,截圖如下:

局部放大:

上邊導入 osm 地圖的方法還是比較麻煩,它主要包括 4 步:

實際上,SUMO 自帶了壹個 osmWebWizard.py 程序,整合了上述較為獨立的步驟,在同壹個操作界面,“壹站式” 完成上述步驟。

用 osmWebWizard.py 運行仿真也是 SUMO tutorial 中的第壹個項目。

註意:必須以 python 2 運行,python 3 會在 generate scenario 的時候報錯。

如果提示找不到該文件,就直接去 SUMO_HOME 的目錄下面 /usr/share/sumo/tools 運行該文件。

沒有問題的話,應該會在瀏覽器中打開如下頁面。這裏初始地圖位置是 Berlin。

右側有四個 tab,由上到下以此為:

首先是選定要仿真的地圖環境。可以縮放、移動視圖,通過右側的 Select Area 可以選定壹個區域。最好不要選擇太大範圍,否則仿真很占資源,甚至導致死機。

然後選擇交通流中的車輛類型和密集程度,through traffic factor 對應了車輛穿過率,count 的單位是 per hour-lane-kilometer。基於這裏的參數設置,randomTrip 程序會產生相應的 random route。

以上就設定好了地圖和 route,點擊右上方的 Generate Scenario, 就可以進入仿真界面了。