r_nsdのブログ

r_nsdのブログ

勉強したこと・調べたこと・思ったことを残しておくためのブログ

MENU

SUMOチュートリアル「SUMOlympics」- ③信号と歩行者の設定

SUMOの複数の交通手段をシミュレーション上で動かすためのチュートリアル"SUMOlympics"のうち,信号と歩行者の設定部分を記録したものです. (SUMOのインストール,パスの設定は完了しているものとします.使用しているSUMOのバージョンは0.32.0です.)

  1. 各交通手段の専用車線の設定
  2. 各交通手段の車両や経路の設定
  3. 信号と歩行者の設定

1でネットワークファイルの作成,2でルートファイルの作成を行いました.今回は信号や歩行者などの追加の設定を行います.

信号の設定

エッジを分割している(エッジ"beg"と"end"の間にある)ノードに信号機を設定します.NETEDITを起動します.Terminalでnetedit ネットファイル名 で指定したネットファイルの編集ができます. " t "を押して信号の編集モードにします.

ノードをクリックし画面左側の編集画面で"Create TLS"で信号機を設置します.(TLS: Traffic Light Signal)Phasesのところで信号の設定を行います."rrrr"が赤信号,"GGGG"が緑信号,"yyyy"が黄信号で,左側の数字が秒数を表しています.今回は赤信号100秒,緑1000秒に設定します.(順番を間違えないように注意してください)

f:id:ryonsd:20190808091933p:plain ここで一度シミュレーションを実行して,挙動を確認してみてください.

歩行者の設定

前回ルートファイルでflowを用いて数人の移動をまとめて設定しました.しかし歩行者の場合はflowが使えないので,Pythonで以下のようなコードを書き,一人ずつ設定します.

#ファイル名  makeSumolympicWalkers.py
#parameters
outfile = "sumolympicWalks.rou.xml"
startEdge = "beg"
endEdge = "end"
departTime = 0. #time of departure
departPos = -30. #position of departure
arrivalPos = 100. #position of arrival
numberTrips = 100 #number of persons walking
#generate XML
xml_string = "<routes>\n"  
for i in range(numberTrips):
    xml_string += '    <person depart="%f" id="p%d" departPos="%f" >\n' % (departTime, i, departPos)
    xml_string += '        <walk edges="%s %s" arrivalPos="%f"/>\n' % (startEdge, endEdge, arrivalPos)
    xml_string += '    </person>\n'
xml_string += "</routes>\n"
with open(outfile, "w") as f:
    f.write(xml_string)

Terminalで以下のコマンドを打ち,xmlファイルを出力します.

python makeSumolympicWalkers.py

出力した新しいxmlファイルをconfigファイル (sumolympics.sumocfg) に追記します.

...
<route-files value="sumolympics.rou.xml,sumolympicWalks.rou.xml[f:id:ryonsd:20190808094838p:plain]"/>
...

ではシミュレーションを実行してみます.

f:id:ryonsd:20190808094838p:plain

これで歩行者も含め複数の交通手段の移動をシミュレーションできました.