이번에는 Loop 네트워크를 구축하여 차량들이 원 안에서 계속해서 주행하는 상황을 구현할 것이다.
이를 구현하는데 두 가지 방식이 있다.
(1. xml 파일을 코딩 / 2. netedit를 이용하여 gui 방식으로 구현)
본 포스팅에서는 두 방식 중 xml 파일을 코딩하는 방식을 중점적으로 설명하고자 한다.
*SUMO Tutorial을 따라 진행하였으며, 관련 페이지는 아래와 같다.
https://sumo.dlr.de/docs/Tutorials/Driving_in_Circles.html
Driving in Circles - SUMO Documentation
1.1.0 --> Driving in Circles In this tutorial we will build a simple circular net with netedit and use rerouters to make vehicles drive in circles. All definition files can be found in the /docs/tutorial/circles directory. This tutorial can be done using o
sumo.dlr.de
1. Edge와 Node를 netedit로 구축
먼저 Edge와 Node는 netedit를 사용하여 구축한다.
(이 또한 xml을 직접 입력하여 구축할 수 있겠으나, netedit로 클릭하며 구현하는게 효율상 훨씬 유리하다)
구축한 네트워크는 Driving_in_Circle_0420.net.xml로 저장하였다.
지난 포스팅에서 언급했듯, 시뮬레이션을 돌리기 위해서는 net 파일과 rou 파일이 필요하다.
(참고: https://jeonginyun.tistory.com/124)
2. Route 파일 정의(rou.xml)
따라서, rou 파일을 정의해야하며, Visual Studio Code에서 xml 파일을 직접 작성하면 된다.
<routes>
<vType id="car" type="passenger" length="5" accel="3.5" decel="2.2" sigma="1.0"/>
<flow id="carflow" type="car" begin="0" end="0" number="5" from="edge1" to="edge4"/>
</routes>
<Flow>
id: 교통류의 이름
types: 교통류를 이루고 있는 차량 타입
begin: 교통류의 투입 시간
end: 교통류 투입 종료 시간(교통류 투입 시간보다 반드시 더 커야한다고는 나와있지만, 0으로 해도 실행은 된다)
sumocfg 파일은 netedit에서 저장하면 아래와 같이 생긴다.
생성된 sumocfg 파일에서 rou.xml 파일에 대한 경로를 지정해준다.
그러고 시뮬레이션을 돌리면 다음과 같이 돌아가게 된다.
시점 Edge에서 차량들이 5대가 나와서 종점 Edge에 도달하면 네트워크에서 사라진다.
(Route를 edge1(시점)부터 edge4(종점)까지만 설정했기 때문)
이렇게 차량들의 Route를 설정하여 이동하는데까지 구현했다.
만약 차량들이 계속해서 네트워크를 돌도록 구현하고 싶으면 어떻게 해야할까?
이 때 할 수 있는 방법이 Reroute이다.
3. Reroute 구현
Reroute를 하기 위해 xml 파일을 만들어야 하며, SUMO에서는 Reroute를 rou.xml 파일에서 하지 않고,
add.xml 파일에서 해야한다. 따라서 이 파일을 만들어주고, sumocfg에도 추가시켜주어야 한다.
Reroute에 대한 코드는 아래와 같이 작성할 수 있으며,
- edge1에 도달했을 때, edge4로 Reroute
- edge4에 도달했을 때, edge1로 Reroute함으로써 무한 Loop를 돌도록 구현했다.
<additionals>
<rerouter id="reroute_1" edges="edge1"> # Reroute를 시작할 Edge
<interval end="1e9"> # Reroute를 수행할 시간(1e9는 10억이며, 단위는 초)
<destProbReroute id="edge4"/> # Reroute의 목적지 Edge
</interval>
</rerouter>
<rerouter id="rerouter_2" edges="edge4">
<interval end="1e9">
<destProbReroute id="edge1"/>
</interval>
</rerouter>
</additionals>
그리고, sumocfg에는 다음과 같이 코드를 추가하였다.
<additional-files value="Driving_in_Circle_0420.add.xml"/>
그러고 sumocfg를 통해 시뮬레이션을 돌리면 끝
'SUMO Simulation' 카테고리의 다른 글
[SUMO Tutorial] 다차로 고속도로 시뮬레이션 및 속도에 따른 시각화 (0) | 2024.04.20 |
---|---|
[SUMO Tutorial] 차량, 버스, 보행자, 자전거, 트램까지 구현하기(with 전용차로 및 신호) (0) | 2024.04.20 |
[SUMO Tutorial] 빠르게 네트워크 구축해서 Demand 입력하고 시뮬레이션까지 (1) | 2024.04.19 |
[SUMO Tutorial] OSM을 불러와서 시뮬레이션 네트워크 쉽게 구축하기 (0) | 2024.04.19 |
[SUMO Tutorial] Node, Edge 만들기 & Vehicle 투입시키기 (2) | 2024.04.18 |