SUMO全称Simulation of Urban Mobility,是一个开源、微观、多模态交通仿真模拟软件,可用于解决大的交通管理问题。本文简介该软件的安装方法及简单示例。

一、安装方法

安装方法非常简单,只要确保网络畅通,使用如下命令即可:

sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc

本文写作之日(2018年8月10日)安装的版本是0.32.0,可以使用命令sumo -V查看。
程序安装完毕后,直接在命令行终端中输入sumo(纯命令行)或sumo-gui(带图形化界面),即可打开该程序。
为避免运行程序时出现如下警告:

Warning: Environment variable SUMO_HOME is not set, schema resolution will use slow website lookups.

需要使用如下命令编辑配置文件,导出环境变量SUMO_HOME

vi ~/.bashrc
 source ~/.bashrc

在文件最后一行增加:

export SUMO_HOME=/usr/share/sumo

二、简单示例

示例教程默认位于/usr/share/doc/sumo-doc/tutorial目录,如果通过其他方法安装,位置不一定与此相同,可以借助如下命令查找:

sudo find / -name sumo-doc

下面介绍一个简单示例:Hello,若采用默认安装方式,则数据位于/usr/share/doc/sumo-doc/tutorial/hello目录。
在SUMO中,街道网络由节点(交汇点)和边(连接交汇点的街道)组成。 因此,如果需要创建一个具有两条街道的网络,彼此相继,我们需要三个节点和两条边,因为若只包含一条边,则路线是唯一的,也就不成为一个网络了。

2.1 节点(Node)

所有节点包含一个ID及位置(即笛卡尔坐标系下的x和y坐标,用于描述与原点的距离,以米为单位)属性。一个简单的节点文件如下所示:

<nodes>
    <node id="1" x="-250.0" y="0.0" />
    <node id="2" x="+250.0" y="0.0" />
    <node id="3" x="+251.0" y="0.0" />
</nodes>

可以使用任何一种文本编辑器进行编辑(我一般使用vi编写配置文件,使用VSCode编写代码文件),只要将其保存成后缀为.nod.xml的文件即可。这里我们将其保存为hello.nod.xml

2.2 边(Edge)

节点需要用边来连接。 对于一个有向节点,很自然地能想到,需要一个ID源节点ID以及目标节点ID,具体格式如下 所示:

<edges>
    <edge from="1" id="1to2" to="2" />
    <edge from="2" id="out" to="3" />
</edges>

将此数据保存到名为hello.edg.xml的文件中。
现在我们已经创建了两个节点和一条边,于是可以调用SUMO包中的一个工具netconvert来创建网络。
进入节点和边文件所在的目录,使用如下命令创建名为hello.net.xml的网络。

netconvert --node-files=hello.nod.xml --edge-files=hello.edg.xml --output-file=hello.net.xml

2.3 路线(Route)

现在我已经建好最简单的一张交通网络,接下来还需要一辆车。在SUMO中,车辆的基本属性包括:长度、加速度、减速度以及最大速度。此外还需要一个所谓的sigma参数,用于引入一些随机行为(类似于信号中的噪声),将该值设置为0能得到一辆完美控制的汽车(现实中不存在这样的车辆)。
现在为我们的汽车定义一条路线,目前这条线路非常简单,它只包含我们定义的两条边1to2以及out
最后还需定义车辆的驾驶情况,例如:车辆从哪个节点出发,行驶路线怎样,如文件hello.rou.xml所示:

<routes>
    <vType accel="1.0" decel="5.0" id="Car" length="2.0" maxSpeed="100.0" sigma="0.0" />
    <route id="route0" edges="1to2 out"/>
    <vehicle depart="1" id="veh0" route="route0" type="Car" />
</routes>

2.4 配置

现在我们将上述信息全部写到一个名为hello.sumocfg的配置文件中:

<configuration>
    <input>
        <net-file value="hello.net.xml"/>
        <route-files value="hello.rou.xml"/>
    </input>
    <time>
        <begin value="0"/>
        <end value="10000"/>
    </time>
</configuration>

2.5 在模拟器中运行配置

使用如下命令在SUMO模拟器中运行(不带图形化显示):

sumo -c hello.sumocfg

带图形化显示的命令如下:

sumo-gui -c hello.sumocfg

使用GUI进行模拟时,在配置文件hello.sumocfg中添加一个额外的配置项gui-settings非常有用,这样就无需在启动程序后更改设置:

<configuration>
    <input>
        <net-file value="hello.net.xml"/>
        <route-files value="hello.rou.xml"/>
        <gui-settings-file value="hello.settings.xml"/>
    </input>
    <time>
        <begin value="0"/>
        <end value="10000"/>
    </time>
</configuration>

配置项gui-settings中包含的文件hello.settings.xml内容如下所示:

<viewsettings>
    <viewport y="0" x="250" zoom="100"/>
    <delay value="100"/>
</viewsettings>

这里我们使用视口(viewport)来设置摄像头位置,使用延迟(delay)来设置每个步骤之间的模拟延迟(以ms为单位)。

在GUI中的界面如下,因为示例太简单,实在没有什么好看的效果:

sudo 安装命令 如何安装sudo命令_sudo 安装命令