本文旨在讓大家快速的了解sumo,並給出運行一個簡單的sumo的例子的教程,進而了解基本sumo工程的架構,使大家對該軟件產生興趣並持續學習下去,剛開始學習仿真的確枯燥,項目“跑起來”才是大家學習下去的動力,國內參考文獻太少了,sumo官網又是純英文,出於此產生了本篇教程,在寫作過程中引用了幾位CDDN博主的文章,還有兩篇介紹車聯網仿真模型的論文,就不一一列出了,知識共享,替大家感謝各位了,不會聲明原創,我們都是搬運工!開始正題:
一.簡單介紹sumo交通仿真器
SUMO是一個微觀的,空間上連續,時間上離散的交通仿真軟件,采用c++語言開發,其宏觀特征包括帶變道的多車道道路,基於道路交叉口的靠右側行駛規則,支持動態路由,可以管理超過10000條街道的網絡。其微觀特征包括允許碰撞自由的車輛移動模式,支持單車路由。該軟件特點是具有快速的OpenGL圖形界面,支持多種網絡格式輸入,缺點是sumo本身不能提供網絡仿真器所需要的軌跡文件。
SUMO可去官網下載,解壓后就可以使用,圖形界面軟是在解壓后bin文件夾下的sumo-gui.exe。使用前最好設置環境變量SUMO_HOME。其實不設置似乎也可以使用,但是會有警告。SUMO_HOME的內容就是安裝文件的位置,也就是bin文件夾的上一級目錄。
SUMO解壓之后,作重要的是bin文件夾下的程序和tools文件夾下的程序。bin文件夾下大部分是可執行文件,但是並不像普通的可執行文件一樣打開,而是需要用命令行打開,換句話說,整個功能程序並沒有被包裝起來,這是出於可裁剪和可維護性角度考慮的。tools下的工具則更多的是用phyton寫的。
注:可能大家對於車載自主網仿真的一些概念生疏,可以先看兩篇介紹的論文作為開胃菜,上知網搜索車載自主網的仿真研究綜述和車輛自組織網仿真研究,寫的都很好,是不錯的車輛自組織網仿真入門的論文。
二.sumo工程結構
SUMO的仿真至少需要兩個文件:
1.道路文件,或者叫路網文件(net.xml),就是對行車道路的描述文件;
2.車流文件(rou.xml),或者叫做車量行駛文件,用來描述車流量的行為。當然,更加高級的仿真可以加入別的文件,比如車輛描述文件,地形文件。
這個很容易理解,想要做仿真,最起碼要有地圖吧,這就是路網文件net,xml;有了地圖后是不是還要產生幾輛車呢,不管你怎么產生,總之得有車,產生車的規則隨意定,這就是rou.xml文件的功能。
道路文件的產生有好多種方法,我們先簡單的來了解兩個,第一個是從開源的地圖上下載osm地圖文件,常用的是openstreetmap(osm是一種地圖信息文件,可以去openstreetmap官網下載。網址:http://www.openstreetmap.org/),然后利用sumo自帶的netconvert工具將osm文件轉換為net.xml文件;第二個是自己"編寫"net.xml文件,我目前學習到的並不是直接開始編寫net.xml文件,因為在sumo規定中,道路是由節點和邊組成的,也符合我們一貫的數學思維,所以我們會先編寫nod.xml節點文件和edg.xml邊文件,然后通過netconvert工具去將這兩個文件結合成net.xml文件;除了這兩種方法外還有通過OD矩陣啊,等等產生路網文件,不過我還沒了解,所以先不做深入介紹,可以到官網查看,官網介紹的很詳細,本文主要是做個快速教程。
車流行駛文件即規定車輛數量,車輛行駛規則等,實驗目的不同,規則自然千變萬化,所以rou.xml的產生自然也有很多的方法,本教程中使用的是sumo自帶的一個radomTrips.py,它是一個工具,通過調用這個工具可以在已有的net.xml上產生車輛行駛規則,利用它和上面的net,xml就可以產生rou.xml文件,當然,本實驗純粹為了演示,所以利用的已有的隨機路徑
三 sumo工程的例子 詳細教學
下面就開始進入實驗環節,請大家一步一步按照要求來,絕對是可以出結果的
1.軟件版本需求
windows系統(sumo在linux下運行效果更好)
|
不做要求,xp,7,8,10都可以
|
sumo版本
|
0.30及以上最好
|
Notepad++(為了查看和編輯xml文件)
|
可替換,只要能查看編輯xml即可
|
python環境
|
2.7及以上都可以,我用的3.6
|
2.從openstreetmap上下載相關osm地圖文件,並做相應處理
上面的軟件都安裝以后,就可以開始正式進行sumo第一個項目了
(1)打開openstreetmap官網(
https://www.openstreetmap.org),在左側輸入框搜索fiarfax VA,然后開始搜索,在出現的選項選擇city開頭的選項,然后右側界面會顯示你選擇的城市的地圖

確認之后在右側可以看到選擇的地圖的詳細情況,不規則紅圈標示了范圍,外面矩形紅圈是我標的,左側是關於地圖的簡單介紹

如果該地圖不能導出,可以選擇別的地方,比如北京,上海等城市,不影響實驗結果!
最好將地圖保存在和sumo同一層次的文件夾中,例如我在C盤下新建了mytest文件夾,把sumo解壓到mytest文件夾下,並且在mytest下新建了map文件,來保存地圖文件及隨后產生的各個xml等文件,方便查看和管理,推薦這樣做!
(2)對導出的地圖做處理
官網原文,即下載的osm除了路網信息還包含別的東西,需要做簡單處理
OSM-data not only contains the road network but also a wide range of additional polygons such as buildings and rivers. These polygons can be imported using POLYCONVERT and then added to a sumo-gui-configuration.
導出的osm地圖不僅包含路網信息也包含大量的別的模塊例如建築和河流,這些模塊可以用polyconvert工具添加到sumo-gui配置文件中。
我們手動打開sumo\doc\userdoc\Networks\Import\OpenStreetMap.html文件,然后在打開的網頁中間部分 Importing additional Polygons (Buildings, Water, etc.)的下面有一大段xml的代碼,復制這些代碼,然后在notepad++中級新建文件並把復制的代碼粘貼到里面,在本實驗中因為不需要,所以刪除了下面的id=“power”的那一行代碼,然后保存為typemap.xml,把這個文件保存到上一步驟建的map文件中去,和osm地圖文件放一起。

(3)打開sumo/bin/start-command-line.bat,然后就可以用命令行模式對osm文件做處理,會使用linux命令是前提條件,當然在這里你可以照着敲,先cd到map文件夾下進行操作,如果在別的路徑下可能會出錯

然后輸入以下指令
netconvert --osm-files map.osm -o map.net.xml

polyconvert --net-files map.net.xml --osm-files map.osm --type-file typemap.xml -o map.poly.xml

這一步完成后就產生了map.net.xml和map.poly.xml文件
3.產生map.rou.xml文件
輸入命令 python C:/mytest/sumo/tools/randomTrips.py -n map.net.xml -e 100 -l
-n map.net.xml表示輸入,-n表述輸入的類型是net類型,其實-n等價於--net,-n是一種簡寫的方式。后面的-l -e 600是隨機工具的配置,就像隨機數生成函數需要一個種子一樣。

但是,這樣的一個過程生成的是一個旅程隨機過程文件,而我們需要的是一個rou.xml文件。
所以,最后,我們把隨機的旅程和道路信息結合起來就獲得了車流文件(rou.xml)了。我們要用到的工具是bin文件夾下的duarouter.exe。
輸入命令 python C:/mytest/sumo/tools/randomTrips.py -n map.net.xml -r map.rou.xml -e 100 -l

執行成功后可以在map文件夾下查看到map.rou.xml
4.編輯配置文件
編輯配置文件如下圖,主要是更改input文件,可以在sumo文件夾中搜索test.sumo.cfg然后更改input文件,便可以得到如下圖所示文件,然后把文件命名為map.sumo.cfg並保存到map文件夾中,到這一步,所有運行需要的文件就夠了

5.運行map仿真例子
輸入指令sumo-gui map.sumo.cfg
設置延時,可以設置在100到200之間,觀察效果比較好
點后點擊開始按鈕,就可以觀察仿真效果了,放大可以看到隨機運動的車輛


好了,教程就到這里,如果想要了解更多的話,請參考sumo官方文檔
http://www.sumo.dlr.de/userdoc/SUMO-GUI.html