SUMO Simulation

[SUMO Study] 시뮬레이션 내 여러가지 기능 및 옵션에 대한 공부(1)

2ns 2024. 4. 21. 13:27

2차로 고속도로 내 기본구간에서(램프 고려 X) 자율주행차량과 일반차량을 구현하여 용량을 측정하는 작업을 하고 있다. VISSIM은 꽤 오래 써봤지만, SUMO는 제대로 파본지 3일 밖에 되지 않았기 때문에 많은 기능들과 옵션들에 대해 모르는 상태였고, SUMO Document와 Tutorial을 보면서 하나씩 익히고 있다.

 

추후 내가 공부한 것들이 정리가 되면 분류하여 포스팅할 예정으로, 그 전까지는 분류가 되지 않더라도 내가 새롭게 알게된 것들에 대해 블로그에 메모해두려고 한다.

 

먼저, SUMO Documentation과 Tutorials의 링크는 아래와 같다.

- SUMO Domentation

https://sumo.dlr.de/docs/index.html

 

SUMO Documentation

SUMO User Documentation "Simulation of Urban MObility" (SUMO) is an open source, highly portable, microscopic and continuous traffic simulation package designed to handle large networks. It allows for intermodal simulation including pedestrians and comes w

sumo.dlr.de

 

- SUMO Tutorials

https://sumo.dlr.de/docs/Tutorials/

 

Tutorials - SUMO Documentation

1.1.0 --> Tutorials Beginner Tutorials SUMO User Conference Tutorials The SUMO User Conference is an anual event organized by the German Aerospace Center (DLR) in Berlin. Since 2015, each conference begins with a SUMO tutorial session. Below you can find t

sumo.dlr.de

 

1. 차로변경금지에 대한 옵션

 

Edge 내 Lane에 대해 각각 changeLeft="authority", changeRight="authority"(또는 "")를 net.xml 파일에 입력

(아래는 실제 내 코드의 예시, 뒤에 보면 changeLeft, changeRight가 있다)

    <edge id=":node2_0" function="internal">
        <lane id=":node2_0_0" index="0" speed="27.78" length="0.10" shape="100.00,-4.80 100.00,-4.80" changeLeft="authority" changeRight="authority"/>
        <lane id=":node2_0_1" index="1" speed="27.78" length="0.10" shape="100.00,-1.60 100.00,-1.60" changeLeft="authority" changeRight="authority"/>
    </edge>

 

2. 원하는 차량 타입 생성

 

SUMO netedit에 Default로 정의되어 있는 차량 말고,

내가 원하는 차량을 생성하고 싶었다. (자율주행차량)

 

이를 생성하는 방법은 먼저 netedit에서 gui 방식으로 쉽고 편하게 설정하고, 그 외에 추가로 rou.xml 파일에서 파라미터와 value를 입력하면 된다. 

 

netedit에 들어가서 - F3(Demand 탭) - Create type mode 선택 - Creat Type 선택 - Open attributes editor 선택

여기에서 이것저것 내가 원하는 파라미터와 value를 입력하면 된다.

 

특히, Car-following model에는 Krauss와 IDM, VISSIM에서 쓰이는 Wiedemann 99도 있으니 참고하자.

HDV라는 차량 타입을 직접 만드는 화면

 

위 그림에서 그레이 색은 default 값을 의미한다. 그 외에 검정색은 내가 설정했거나, Default 값이 아닌 것을 의미한다. 여기서 주의해야 할 점은 이렇게 설정을 하고 네트워크 파일을 저장하고, sumocfg 파일도 저장했는데 rou.xml 파일에 반영이 안된 것들이 있었다는 것이다. 그래서 rou.xml 파일을 꼭 열어서 내가 원하는 값들이 반영이 되어있는지 확인해보자. (시뮬레이션은 최종적으로 rou.xml, net.xml 파일에 기입되어 있는대로 진행된다는 걸 꼭 기억하기!)

(아래는 실제 내 코드의 예시, speedFactor, speedDev, sigma가 적용이 안되어 있었다)

<vType id="CAV(Aggressive)" length="4.50" minGap="1.33" maxSpeed="27.78" desiredMaxSpeed="27.78" color="red" carFollowModel="W99" cc1="0.39" cc2="0" cc3="-6.00" cc4="-0.10" cc5="0.10" cc6="0.00" cc7="0.10" cc8="4.00" cc9="2.00" speedFactor="1.0" speedDev="0.0" sigma="1.0"/>
<vType id="HDV" length="4.50" minGap="1.33" maxSpeed="27.78" desiredMaxSpeed="27.78" color="yellow" carFollowModel="W99" cc1="1.29" cc2="0" cc3="-6.00" cc4="-0.10" cc5="0.10" cc6="0.00" cc7="0.10" cc8="4.00" cc9="2.00" speedFactor="1.0" speedDev="0.0" sigma="1.0"/>

 

3. 시뮬레이션 시간

 

시뮬레이션 시간을 따로 설정해주지 않는 한, 시뮬레이션은 내가 Load한 차량들이 모두 네트워크를 빠져나갈 때까지 계속되는 것 같다. 시뮬레이션 시간을 설정하는 방법은 파악하는 대로 추가할 예정이다.

 

4. 차량의 출발과 도착에 대한 파라미터

 

아래 자세한 설명이 있는 Documentation

https://sumo.dlr.de/docs/Definition_of_Vehicles%2C_Vehicle_Types%2C_and_Routes.html#departlane

 

Definition of Vehicles, Vehicle Types, and Routes - SUMO Documentation

1.1.0 --> Definition of Vehicles, Vehicle Types, and Routes Definition of Vehicles, Vehicle Types, and Routes Filename extension .rou.xml Type of content Vehicles, Vehicle Types, and Routes Open format? Yes SUMO specific? Yes XML Schema routes_file.xsd The

sumo.dlr.de

 

<departLane>: 차량들이 출발할 Lane과 관련된 설정

≥0: 투입 차로에 대한 index를 나타내며, 최우측차로부터 0, 1, 2, ... 등으로 진행된다.
random: Lane이 랜덤하게 선택된다. 차량이 들어갈 수 없는 경우, 다시 랜덤하게 결정되는 건 아니다.
free: 차로이용률이 낮은 차로를 선택한다. (차로 중 가장 적은 차량이 다니는)
allowed: 자신이 속한 차량 class의 진입이 허용된 차로 중 차로이용률이 낮은 차로를 선택
best: 차로변경이 가능한 한 오랫동안 필요없는 도로 중 차로이용률이 낮은 차로를 선택
first: 차량이 사용할 수 있는 가장 우측 차로

 

<departSpeed>: 차량들이 출발할 때 Speed와 관련된 설정. 여기서 maxSpeed는 speedLimit * speedFactor, vType_desiredMaxSpeed * speedFactor, vType_maxSpeed 중 최소값으로 결정된다.

≥0: 주어진 속도로 출발. 만약 주어진 속도가 안전하지 않은 경우, 출발이 지연된다.
random: 0과 maxSpeed 중 랜덤하게 결정된다. leader vehicle과 충분한 안전거리가 확보되어야 한다.
max: maxSpeed 사용하며, leader vehicle과 충분한 안전거리가 확보되어야 한다.
desired: maxSpeed 사용하며, speed가 안전하지 않은 경우, 출발은 지연된다.
speedLimit: speed limit이 설정되어 있다면, 이를 사용하고, speed가 안전하지 않은 경우 출발은 지연된다.
last: 출발할 차로의 마지막 차량의 현재 speed를 사용하며, 만약 내가 첫차라면, desired speed를 적용.
avg: 출발할 차로의 평균 speed를 사용, 만약 내가 첫차라면 speedLimit의 최소값 또는 desired speed를 적용한다. 이 speed가 안전하지 않다면 출발이 지연된다.