sumo的簡單應用_sumo快速運行簡單仿真實例詳細教程

本文旨在讓大家快速的了解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之間,觀察效果比較好

點后點擊開始按鈕,就可以觀察仿真效果了,放大可以看到隨機運動的車輛

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541547.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541547.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541547.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

stl vector 函數_vector :: crbegin()函數,以及C ++ STL中的示例

stl vector 函數C vector :: crbegin()函數 (C vector::crbegin() function) vector::crbegin() is a library function of "vector" header, it is used to get the last element of a vector using const_reverse_iterator, it returns a const reverse iterator …

ReactNative學習筆記(二)Flex布局

flexDirection 決定主軸方向 column:垂直方向為主軸row:水平方向為主軸justifyContent 決定主軸元素排列方式 flex-startflex-endcenterspace-betweenspace-aroundalignItems 決定側軸元素排列方向 flex-startflex-endcenterbaselinestretch

cad導出 dxf后中文不顯示_CAD快速看圖 for Mac

CAD快速看圖 for Mac是一款非常小巧、快速、方便的DWG看圖工具,CAD快速看圖 Mac版可脫離AutoCAD最快速、最方便瀏覽DWG和DXF圖紙,支持二維或三維圖紙,支持高清、多文件和云字體,非常實用的一款CAD看圖軟件,CAD快速看圖…

scala運算符_Scala的所有符號運算符是什么意思?

scala運算符Scala的符號運算符 (Scalas symbolic operators) The symbolic operators in Scala are symbols that have a specific task that they perform when called in a Scala program. Scala library defines a lot of symbols that can be used while programming in Sc…

關于java.util.ConcurrentModificationException和remove倒數第二個元素

2019獨角獸企業重金招聘Python工程師標準>>> 首先是兩段代碼的執行結果&#xff1a; 代碼一&#xff1a; public class TestListRemove {public static void main(String[] args) {List<Integer> list new ArrayList<Integer>();list.add(1);list.add(…

linux 操作mysql 數據庫命令_Linux 操作數據庫命令

一、連接數據庫格式&#xff1a; mysql -h主機地址 -u用戶名 &#xff0d;p用戶密碼mysql -hlocalhost -uroot -p123注&#xff1a;-h,-u,-p 后面不加空格&#xff0c;進入數據庫操作后每個命令結尾都需加“&#xff1b;(分號)”二、退出MYSQL命令exit (回車)三、顯示所有數據庫…

fragment和Activity同時操作UI引起的延遲、卡頓

最近項目中遇到一個問題&#xff0c;app首頁的Activity中由若干個Fragment頁面組成&#xff0c;其中一個fragment頁面是由一個GridView和ListView組成的列表&#xff0c;如果列表中數據量過大的時候&#xff0c;在請求數據的時候點擊頁面上的其他按鈕會無響應&#xff0c;直到該…

怎么刪除mysql的壓縮包_壓縮包版mysql怎么卸載

MySQL是一個小巧玲瓏但功能強大的數據庫&#xff0c;目前十分流行。但是官網給出的安裝包有兩種格式&#xff0c;一個是msi格式&#xff0c;一個是zip格式的。那么壓縮版mysql要怎么卸載&#xff1f;下面本篇文章就來大家介紹一下&#xff0c;希望對你們有所幫助。卸載壓縮包版…

obj.val 非數組_在Ruby中使用Array.new(size,obj)創建數組

obj.val 非數組In the previous article, we have learnt how we can declare an Array class instance with the help of Array.[](*args) method? You can also notice that in the program codes written to demonstrate all those methods are having Array instances dec…

julia在mac環境變量_在Julia中找到值/變量的類型

julia在mac環境變量To find the type of a variable/value, we use the typeof() function – it accepts a parameter whose type to be found and returns its data type. 為了找到變量/值的類型&#xff0c;我們使用typeof()函數-它接受要查找其類型的參數并返回其數據類型。…

lambda表達式之進化

前言在C#我們可以自定義委托&#xff0c;但是C#為什么還要內置泛型委托呢&#xff1f;因為我們常常要使用委托&#xff0c;如果系統內置了一些你可能會用到的委托&#xff0c;那么就省去了定義委托&#xff0c;然后實例化委托的步驟&#xff0c;這樣一來既使代碼看起來簡潔而干…

mysql返回行數_如何計算MySQL查詢返回的行數?

How can I count the number of rows that a MySQL query returned?解決方案Getting total rows in a query result...You could just iterate the result and count them. You dont say what language or client library you are using, but the API does provide a mysql_nu…

md5不是對稱密碼算法_密碼學中的消息摘要算法5(MD5)

md5不是對稱密碼算法In cryptography, MD5 (Message-Digest algorithm 5) is a mainly used cryptographic hash function with a 128-bit hash value. As we use in an Internet standard (RFC 1321), MD5 has been employed or developed in a more variety of security appl…

Windows 7 SID 修改

在安裝Windows系統時會產生一個獨一無二的SID (Security ID)&#xff0c;它用來識別每一部主機&#xff0c;若在同一個區域網路內有兩部相同SID的主機&#xff0c;會出現警告訊息。一般而言&#xff0c;每次安裝時的SID不可能會發生重複&#xff0c;但若是使用TrueImage或Ghost…

discuz mysql 類_discuz7 phpMysql操作類

MySql數據庫連接類&#xff0c;大家可以看下網上老手們用的什么方法&#xff0c;大家可以直接拿來用&#xff0c;但前提是大家能熟練的掌握的基礎上&#xff0c;這樣才能有所進步。/** MySql數據庫連接類* mysql.class.php 2009.04.15 by Hackbaby*/class dbstuff {var $versio…

1 并發模型

并發系統可以采用多種并發編程模型來實現。并發模型指定了系統中的線程如何通過協作來完成分配給它們的作業。不同的并發模型采用不同的方式拆分作業&#xff0c;同時線程間的協作和交互方式也不相同。這篇并發模型教程將會較深入地介紹目前&#xff08;2015年&#xff0c;本文…

Java String compareTo()方法與示例

字符串compareTo()方法 (String compareTo() Method) compareTo() is a String method in Java and it is used to compare two strings (case-sensitive). compareTo()是Java中的String方法&#xff0c;用于比較兩個字符串(區分大小寫)。 If both strings are equal – it r…

nginx mysql 查詢系統_nginx/mysql查看內存占用

查看每個php-fpm平均占用系統內存,也適用看nginx/mysqld等,把php-fpm換成mysqldps --no-headers -o "rss,cmd" -C php-fpm | awk { sum$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }查看占用內存[rootcentos69 ~]# ps -ylC php-fpm --sort:r…

linux用戶及權限詳解(20170425)

計算機資源權限用戶用戶&#xff0c;容器&#xff0c;關聯權限&#xff1a;用戶組&#xff0c;方便的指派權限用戶&#xff1a;標示符用戶組&#xff1a;標示符r 、w、x&#xff1a;1、2、4對于文件r:可讀&#xff0c;可以使用類似cat等命令查看文件內容w&#xff1a;可寫&…

kotlin 判斷數字_Kotlin程序檢查數字是否為質數

kotlin 判斷數字A prime number is a natural number that is greater than 1 and cannot be formed by multiplying two smaller natural numbers. 質數是大于1的自然數&#xff0c;不能通過將兩個較小的自然數相乘而形成。 Given a number num, we have to check whether nu…