生活随笔
收集整理的這篇文章主要介紹了
0基础SUMO简单入门小实例
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
sumo實(shí)例搭建
- 一、SUMO框架簡(jiǎn)介
- 二、靜態(tài)net——OpensStreetMap獲取
- 1.到OpenStrreMap官網(wǎng)選擇道路
- 2.net文件和poly文件獲取
- 3.rou文件獲取
- 4.cfg文件獲取
- 5.開始仿真
- 總結(jié)
一、SUMO框架簡(jiǎn)介
sumo的文字資料、安裝教程在官網(wǎng)和csdn一抓一大把,不再贅述,我根據(jù)自己理解做了個(gè)流程框圖如下。記得把sumo設(shè)置環(huán)境變量,and后面的實(shí)驗(yàn)是基于Win10做的。
注:圖中netconverter、Random trips、duarouter以及后面提到的poly處理工具都是sumo自帶的的。
一言以蔽之,先做靜態(tài)的路,再在路的基礎(chǔ)上添加各種動(dòng)態(tài)因素(車、人、交通燈),如果是從現(xiàn)實(shí)地圖導(dǎo)入路網(wǎng)的話還要進(jìn)一步處理。然后搞個(gè)xml把靜態(tài)的net和動(dòng)態(tài)rou、附加文件合成cfg完事,之后就可以用GUI打開cfg文件可視化。
二、靜態(tài)net——OpensStreetMap獲取
1.到OpenStrreMap官網(wǎng)選擇道路
官網(wǎng)在這里https://www.openstreetmap.org/#map=15/40.0414/116.2870
打開界面大概是這樣,顯示位置可能不一樣,我這個(gè)大概在中關(guān)村軟件園附近。然后按照?qǐng)D中紅框指示,點(diǎn)擊導(dǎo)出,再手動(dòng)選擇你需要的區(qū)域,導(dǎo)出就可以得到.osm文件,默認(rèn)名字是map.osm,我后面用的都是默認(rèn)名字。
2.net文件和poly文件獲取
為了方便后面的處理,可以在sumo文件夾里建立一個(gè)project子文件夾。把剛剛得到的.osm文件放入。
用windows命令行進(jìn)入project文件夾,執(zhí)行下列命令,得到net文件。
netconvert
--osm
-files map
.osm
-o map
.net
.xml
然后,因?yàn)橛玫膐sm,所以做一步poly多余處理,具體原理沒搞,希望了解的大佬講解一下。
還是在project文件夾下,新建txt命名為typemap.xml,里面輸入下列代碼:
<polygonTypes
><polygonType id
="waterway" name
="water" color
=".71,.82,.82" layer
="-4"/><polygonType id
="natural" name
="natural" color
=".55,.77,.42" layer
="-4"/><polygonType id
="natural.water" name
="water" color
=".71,.82,.82" layer
="-4"/><polygonType id
="natural.wetland" name
="water" color
=".71,.82,.82" layer
="-4"/><polygonType id
="natural.wood" name
="forest" color
=".55,.77,.42" layer
="-4"/><polygonType id
="natural.land" name
="land" color
=".98,.87,.46" layer
="-4"/><polygonType id
="landuse" name
="landuse" color
=".76,.76,.51" layer
="-3"/><polygonType id
="landuse.forest" name
="forest" color
=".55,.77,.42" layer
="-3"/><polygonType id
="landuse.park" name
="park" color
=".81,.96,.79" layer
="-3"/><polygonType id
="landuse.residential" name
="residential" color
=".92,.92,.89" layer
="-3"/><polygonType id
="landuse.commercial" name
="commercial" color
=".82,.82,.80" layer
="-3"/><polygonType id
="landuse.industrial" name
="industrial" color
=".82,.82,.80" layer
="-3"/><polygonType id
="landuse.military" name
="military" color
=".60,.60,.36" layer
="-3"/><polygonType id
="landuse.farm" name
="farm" color
=".95,.95,.80" layer
="-3"/><polygonType id
="landuse.greenfield" name
="farm" color
=".95,.95,.80" layer
="-3"/><polygonType id
="landuse.village_green" name
="farm" color
=".95,.95,.80" layer
="-3"/><polygonType id
="tourism" name
="tourism" color
=".81,.96,.79" layer
="-2"/><polygonType id
="military" name
="military" color
=".60,.60,.36" layer
="-2"/><polygonType id
="sport" name
="sport" color
=".31,.90,.49" layer
="-2"/><polygonType id
="leisure" name
="leisure" color
=".81,.96,.79" layer
="-2"/><polygonType id
="leisure.park" name
="tourism" color
=".81,.96,.79" layer
="-2"/><polygonType id
="aeroway" name
="aeroway" color
=".50,.50,.50" layer
="-2"/><polygonType id
="aerialway" name
="aerialway" color
=".20,.20,.20" layer
="-2"/><polygonType id
="shop" name
="shop" color
=".93,.78,1.0" layer
="-1"/><polygonType id
="historic" name
="historic" color
=".50,1.0,.50" layer
="-1"/><polygonType id
="man_made" name
="building" color
="1.0,.90,.90" layer
="-1"/><polygonType id
="building" name
="building" color
="1.0,.90,.90" layer
="-1"/><polygonType id
="amenity" name
="amenity" color
=".93,.78,.78" layer
="-1"/><polygonType id
="amenity.parking" name
="parking" color
=".72,.72,.70" layer
="-1"/><polygonType id
="power" name
="power" color
=".10,.10,.30" layer
="-1" discard
="true"/><polygonType id
="highway" name
="highway" color
=".10,.10,.10" layer
="-1" discard
="true"/><polygonType id
="railway" name
="railway" color
=".10,.10,.10" layer
="-1" discard
="true"/><polygonType id
="boundary" name
="boundary" color
="1.0,.33,.33" layer
="0" fill
="false" discard
="true"/><polygonType id
="admin_level" name
="admin_level" color
="1.0,.33,.33" layer
="0" fill
="false" discard
="true"/>
</polygonTypes
>
這里看的其他教程沒有這一步,導(dǎo)致會(huì)報(bào) **Error: Cannot read file ‘typemap.xml’!**這個(gè)錯(cuò),所以,自己建一個(gè)就可以了。
然后在命令行終端執(zhí)行下列命令:
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.rou文件獲取
繼續(xù)在命令行執(zhí)行以下命令,注意 py文件路徑替換一下。
python C
:/mytest
/sumo
/tools
/randomTrips
.py
-n map
.net
.xml
-e
100 -l
這樣就產(chǎn)生了隨機(jī)過程文件,還差一個(gè)車流文件,emm按理說應(yīng)該用到duarouter程序,但看到好多教程沒用,執(zhí)行(注意替換文件路徑):
C
:\sumo\bin\duarouter
-n map
.net
.xml
-t map
.trips
.xml
-o map
.rou
.xml
--ignore
-errors
至此就得到了rou文件。
4.cfg文件獲取
cfg文件就是把上述信息整合,一般有模板,我用的最簡(jiǎn)單的,如下。用的話直接建一個(gè).xml,復(fù)制進(jìn)去即可。
<?xml version
="1.0" encoding
="UTF-8"?><!-- generated on
2022-03-23 17:04:08 by Eclipse SUMO GUI Version
1.12.0
--><configuration xmlns
:xsi
="http://www.w3.org/2001/XMLSchema-instance" xsi
:noNamespaceSchemaLocation
="http://sumo.dlr.de/xsd/sumoConfiguration.xsd"><input
><net
-file value
="D:\sumo\project\crossroad\map.net.xml"/><route
-files value
="D:\sumo\project\crossroad\map.rou.xml"/><additional
-files value
="D:\sumo\project\crossroad\map.poly.xml"/></input
></configuration
>
核心就是中間的input層,定義了需要整合的文件路徑。
5.開始仿真
命令行輸入 sumo-gui,打開gui。然后open剛剛建立的.sumo.cfg文件,界面如下。
開始后可能立馬結(jié)束,因?yàn)樘炝?#xff0c;通過進(jìn)度條把速度搞慢即可,放大可以找到車,不過默認(rèn)好像車都是三角形,從上面任務(wù)欄 Edit-Edit Visualization 改成 車的形狀。
在車流生成時(shí)的參數(shù)估計(jì)有點(diǎn)小,車比較少,得仔細(xì)查找。
總結(jié)
主要從操作角度講了一下步驟,原理沒咋講,網(wǎng)上資料太多了。后面再試試Traci調(diào)試下。
萬里長(zhǎng)城第二塊磚,期待后面把sumo交通流導(dǎo)入VTD。
總結(jié)
以上是生活随笔為你收集整理的0基础SUMO简单入门小实例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。