Hello SUMO

Note

本教程假设您具备最基本的计算机操作技能。如果您遇到任何问题,请阅读页面 Basics/Basic Computer Skills

简介#

本教程面向初次使用 SUMO 的用户。我们将构建一个尽可能简单的路网,并让一辆车在上面行驶。这里提到的所有文件也可以在 <SUMO_HOME>/docs/tutorial/hello 目录中找到。最新版本可以在代码库中找到:<SUMO_HOME>/tests/complex/tutorial/hello/data/

sumo 中,道路网络由节点(交叉口)和边(连接交叉口的道路)组成。因此,如果我们想创建一个由两条街道首尾相连的网络,我们需要三个节点和两条边。我们将在 路由 部分看到为什么最简单的网络不能只包含一条边。

节点#

所有节点都有一个位置(x 和 y 坐标,描述距离原点的距离,单位为米)和一个用于将来引用的 ID。因此,我们的简单节点文件如下所示:

<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>

您可以使用任意文本编辑器编辑文件,并将其保存为 hello.nod.xml,其中 .nod.xml 是 Sumo 节点文件的默认后缀。

#

现在我们将节点用边连接起来。这就像听起来一样简单。我们有一个源节点 ID、一个目标节点 ID,以及一个用于将来引用的边 ID。边是有方向的,因此行驶在该边上的每辆车都将从 from 给出的节点开始,到 to 给出的节点结束。

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

将此数据保存到名为 hello.edg.xml 的文件中。现在我们有了节点和边,可以调用第一个 SUMO 工具来创建网络。确保 netconvert 在您的 PATH 中,然后调用:

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

这将生成名为 hello.net.xml 的网络。

路由#

现在我们有了路网,但还需要一辆车。在 sumo 中,车辆具有定义其基本属性的类型,例如长度、加速度和减速度以及最大速度。此外,它还需要一个所谓的 sigma 参数,该参数由于使用的跟车模型而引入了一些随机行为。将其设置为 0 会产生确定性的车辆。

现在我们为我们的车定义一个路由,它仅由我们定义的两条边组成。

最后但同样重要的是,我们定义我们的单车,主要引用前面的条目,并给它一个出发时间,如下面的 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>

配置#

现在我们将所有内容粘合到一个配置文件中:

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

将其保存为 hello.sumocfg,我们可以通过以下方式启动模拟:

sumo -c hello.sumocfg

或者通过 GUI 启动:

sumo-gui -c hello.sumocfg

使用 GUI 进行模拟时,添加一个 gui-settings 文件很有用,这样您就不必在程序启动后更改设置。为此,将 hello.sumocfg 更改为如下所示:

<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>

之后,创建一个包含视图设置的文件:

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

将其保存为您在配置文件中包含的名称,在本例中为 hello.settings.xml

这里我们使用 viewport 设置相机位置,使用 delay 设置模拟每一步之间的延迟(以毫秒为单位)。

建议阅读#

有关使用 XML 定义网络的更多信息可以在这里找到:Networks/Building Networks from own XML-descriptionsnetconvert 还允许从其他应用程序导入网络,更多信息在这里:Networks/Import

有关定义车辆的更多信息可以在这里找到:Definition of Vehicles, Vehicle Types, and Routes

更多 教程