🐈‍⬛

SUMO 初心者向けチュートリアル(4)

2023/01/23に公開

Driving in Circles

reroutersを使用して車両が円を描くように走行させる。
注意してことがあって、チュートリアルでは道路のことをedgeといっているけど、ここでは赤丸をエッジ道路をレーンと定義する。そのため、プログラムでedge=lane1といった見にくくなってしまうのは許してほしい。

では、以下のような円形ネットワークを作成しよう。

ネットワークができたら、circles.net.xmlと保存しよう。

保存したディレクトリ内でcircles.rou.xmlcircles.sumocfgを作成しよう。

circles.rou.xmlに以下をコピペしよう。

<routes>
   <vType id="car" type="passenger" length="5" accel="3.5" decel="2.2" sigma="1.0"/>
   <flow id="carflow" type="car" beg="0" end="0" number="5"/>
</routes>

circles.sumocfgに以下をコピペしよう。

<configuration>
    <input>
       <net-file value="circles.net.xml"/>
       <route-files value="circles.rou.xml"/>
    </input>
</configuration>

ただこれだけではsumo-guiを起動しても以下のようなエラーが発生する。

これは車両がどこへ移動するかを設定していないために発生する。

まずは任意のレーン(道路)をクリックして、idをlane1にしよう。

同様に任意のレーンのidにlane2と設定しよう。

次にcircles.rou.xmlの4行目を以下のように変更しよう。

<flow id="carflow" type="car" beg="0" end="0" number="5" from="lane1" to="lane2"/>

では、次に車両がネットワークを循環するようにプログラムを追加しよう。
同じディレクトリ内にcircles.add.xmlを追加して、次のプログラムをコピペしよう。

<additionals>
    <rerouter id="rerouter_0" edges="edge1">
        <interval end="1e9">
           <destProbReroute id="edge2"/>
        </interval>
    </rerouter>
    <rerouter id="rerouter_1" edges="edge2">
        <interval end="1e9">
           <destProbReroute id="edge1"/>
        </interval>
    </rerouter>
</additionals>

この追加を反映させるために、circles.sumocfgに次のプログラムを追加する。

<additional-files value="circles.add.xml"/>

以上の作業で次のような感じで車両が周回することができるようになるはずだ。

以下検証中

neteditで作成する

先ほどはネットワーク以外をプログラムで記述したが、こちらはすべてneteditで作成する手順を紹介する。

はじめと同様に円形ネットワークを作成する。ここでは、circles-gui.net.xmlと保存する。

できたら、Modes>Demandをクリックし、メニューバーの真ん中あたりのCreate route modeを選択しよう。
左メニューでidをroute_0として、任意のレーンを2か所クリックして、左側のFinish route creationを押せばOK!

次にCreate vehicle modeを選択して左側のメニューで一番上のVehiclesを
flow(over route) に変更しよう。
そしたら、Flow attributesのterminateをend-numberに変更し、endを0、numberを5に設定しよう。

Discussion