1 概述
1.1 目的
说明SUMO的安装方法以及VTD和SUMO联合仿真时的配置过程。
1.2 参考文档
1) https://redmine.vires.com/projects/vtd/wiki/ModuleManager#Linking-to-SUMO
2) https://blog.csdn.net/zhixiting5325/article/details/79302244
3) https://www.cnblogs.com/saworld/p/7698563.html
4) https://blog.csdn.net/qq_26130991/article/details/82595572
2 软件环境配置
2.1 软件环境
本文选用的软件环境为:
Ubuntu 16.04
VTD 2.1
SUMO 0.32.0
2.2 SUMO的安装
2.2.1 编译环境和依赖库的安装
安装SUMO前需要安装:g++、cmake、autoconf、Proj、GDAL、Xerces-C、Fox Toolkit,在终端窗口输入如下命令:
sudo apt-get install cmake g++ autoconf
sudo apt-get install libgdal1h libgdal-dev libxerces-c3.1 libxerces-c-dev libicu-dev libproj-dev libfox-1.6-dev libgl1-mesa-dev libglu1-mesa-dev
2.2.2 SUMO的安装
- 如果之前运用apt-get 安装了sumo的话, 用以下语句卸载:
apt-get --purge remove sumo
apt-get --purge remove sumo-tools
apt-get --purge remove sumo-docs
- 在如下链接下载安装包,默认下载至/home/Downloads/:
https://sourceforge.net/projects/sumo/postdown - 解压并进入SUMO文件夹(可以提前将压缩文件移动到自己定义的位置):
cd Downloads
tar xzf sumo-src-0.32.0.tar.gz
cd sumo-0.32.0
- Subversion checkout:
svn co https://svn.code.sf.net/p/sumo/code/trunk/sumo
cd sumo
make -f Makefile.cvs
- SUMO_HOME 环境变量的配置:
gedit ~/.bashrc
在打开的文件的最后加上sumo-0.32.0的位置,如下所示:
(图片来自https://blog.csdn.net/zhixiting5325/article/details/79302244)
修改完毕保存退出后,要通过source来使环境变量生效:
source ~/.bashrc
可以通过 echo $SUMO_HOME 来初步检测有没有修改成功:
echo $SUMO_HOME
若如下图所示,返回设定的SUMO_HOME的路径,则说明修改成功:
(图片来自https://blog.csdn.net/zhixiting5325/article/details/79302244)
- Building the SUMO binaries:
./configure --prefix=$HOME
make
- SUMO binaries 最终安装:
make install
- 测试安装结果:
在终端中输入sumo-gui,若弹出sumo窗口则说明安装成功。
3 VTD和SUMO联合仿真
3.1 配置VTD
1)在SUMO工程的moduleManager.xml文件(一般位于:/VTD/VTD.2.1/Data/Projects/SUMO/Config)中添加下面<Sensor…Sensor>之间的语句:
<Debug enable="false"
lightSource="false"
driver="false" />
<Sensor name="sumo" type="video">
<Load lib="libModuleSUMOGateway.so" path="" persistent="true" />
<Port name="SUMOout" number="8813" type="TCP" sendEgo="true" client="true" server="127.0.0.1" />
<Port name="RDBout" number="49175" type="TCP" sendEgo="false" />
<SUMO radiusIn="1500.0" radiusOut="1550.0"
radiusFar="100000.0" verbose="false" showTrace="false" sendVehicleFrontEdge="true"
pathEndAction="stop"
startArgs="SmartDB.2011/SmartDB.2011.sumo.cfg" globalHdgOffsetDeg="-90" globalHdgScale="-1"/>
<Player default="true" />
<Config useSyncMask="true" synchronizeInit="true" />
<Debug enable="false"/>
</Sensor>
<DynamicsPlugin name="viTrafficDyn">
其中startArgs=" "的内容可以暂不设置。
2)点击VTD主界面的配置按钮,并设置RDB:
3)为了实时性,注意在GUI中将Sensor中的perfect sensor去掉。
4)Ego车的起始位置和路径,在ScenarioEditor中设置。
3.2 由opendrive道路生成SUMO所需文件
1) 将opendrive格式的道路生成SUMO的.net文件:
将路径切换到道路文件所在文件夹,并使用netconvert工具转换格式:
cd townGer
netconvert --opendrive-files townGer.xodr -o townGer.net.xml --offset.x 0.0 --offset.y 0.0
在同文件夹下生成townGer.net.xml文件
2) 使用randomTrips.py生成随机交通流:
/home/SJN/SUMO/sumo-0.32.0/sumo/tools/randomTrips.py -n townGer.net.xml -b 0 -e 30 -p 1 -o townGer.trips.xml
下划线处为randomTrips.py文件的绝对位置。
其中:
-b 0,表示生成车辆的开始时刻为t0=0时刻;
-e 30,表示生成车辆的结束时刻为t1=30s时;
-p 1,表示生成车辆间隔为p=1s。
以上参数可以根据需要设置,生成车辆的总数n=(t1-t0)/p.
3) 生成路径文件rou.xml:
duarouter -n townGer.net.xml --route-files townGer.trips.xml -o townGer.rou.xml --ignore-errors
生成的.rou文件中没有vehicle type的内容,如下图所示:
使用“vehicle type=“alltypes” id”全部替换“vehicle id”,并保存。如下图所示:
4) 编写配置文件sumo.cfg:
新建townGer.sumo.cfg文件,并在其中输入:
<configuration>
<input>
<net-file value="townGer.net.xml"/>
<route-files value="townGer.rou.xml"/>
<additional-files value="vtd_vehicle_types.add.xml"/>
<remote-port value="8813"/>
<step-length value="1"/>
</input>
</configuration>
注意将vtd_vehicle_types.add.xml文件放置到同一文件夹下。
3.3 运行
首先在终端启动sumo:
cd townGer
sumo-gui townGer.sumo.cfg
sumo gui启动,并在状态栏显示如下信息:
在VTD中选中对应文件并确认,如下图所示:
VTD的ModuleManager和sumo状态栏显示如下信息,说明连接正常:
依次点击VTD的运行按钮和sumo的运行按钮,开始进行仿真。