시나리오 편집
(이 페이지에서는 Scenario Runner를 통해 생성하거나 로드한 시나리오를 편집하는 방법에 대하여 다룬다. 편집 방법에는 크게 UI를 통한 OpenSCENARIO 요소 생성과 위젯을 통한 속성 변경 및 요소 삭제가 있다.
목차
OpenScenario Element 생성
Scenario Element 생성
OpenSCENARIO 에서 정의된 Elements 들을 Data View 에서 생성하고, 정의할 수 있다. 대표적으로 Entities, Storyboard, Story, 그리고 Act 해당되는 하위 항목에 Elements 들을 추가하고 세팅할 수 있다.
Data View 를 통해서 Scenario Element 생성
좌측 Data View 에서 추가할 항목 상위의 element 를 마우스 우 클릭으로 통해서 생성할 수 있다.
Data View 에서 OpenScenario 에서 정의된 element 를 클릭했을때, add
와 set
을 확인할수 있는데, add 같은 경우에는 scenario element 의 Cardinality 가 0 이상일 경우에 그 add 할 element 를 추가를 시켜주며, set 같은 경우 Cardinality 가 xor 이나 값이 하나로 지정하고 싶을때 사용한다.
Scenario Object 생성
Scenario Object 에는 세 가지 종류(Vehicle, Pedestrian, Miscellaneous object)가 있으며, 두 가지 방법으로 생성할 수 있다.
1. 메인 메뉴를 통한 생성
Edit > Add Scenario Objects > Vehicle 을 선택하여 차량 생성 UI를 불러온다.
위치 정보는 World Position, Link Position, Relative World Position(orientation=absolute), Relative Object Position(orientation=absolute) 의 4 가지 포맷으로 입력할 수 있으며, Link Position으로 입력할 경우 차량의 heading 은 자동으로 설정된다.
또한 MORAI에서 정의된 Vehicle Property 에 Check TL(Traffic Light) 과 Apply ACC(Adaptive Cruise Control) 을 옵션으로 주어, 차량이 신호등을 볼수 있거나, 앞차의 간격을 유지시킬 수 있게 할수 있다.
같은 방법으로 Pedestrian 및 Miscellaneous object 도 생성할 수 있다.
2. 선택된 Link point 에 생성
좌측
Data View
에서LINK
를 클릭한 뒤, 생성하기 원하는 링크를 클릭하고, 키보드 위/아래 방향키를 이용하여 원하는 지점을 선택한다.
마우스 우클릭 >
Add Scenario Objects
를 활용하여 같은 방법으로 Scenario object를 생성할 수 있으며, 이 경우 위치 항목이 미리 채워져 있는 것을 확인할 수 있다.
3. Data View 에서 Entities
를 마우스 우 클릭을 통한 Scenario Objects 생성
이 방법을 통해서 생성했을 시, 차량의 속력과 위치를 따로 추가해야 한다. (아래의 예시를 참고)
Data View 에서 Entities 선택한 이후, 오른쪽 클릭을 했을 시, Add Entity Wizard
를 통해서, Scenario Object 들을 아래와 같이 생성할 수 있다.
위 Add_Scenario_Objects
UI 와 같아 보일수 있지만, 해당되는 차량의 속력 값과 위치 값을 설정할 수 없으며, Entity Type
에는 Scenario Object(Vehicle / Pedestrian / MiscObject)의 종류를 지정할 수 있다.
이후 Vehicle / Pedestrian / MiscObject 의 위치 값이나 속력(MiscObject 제외)의 정보를 넣으려면, Data View
에서, Storyboard > Init > InitActions 마우스 우 클릭을 해서, 해당 entity 의 private action 을 만들어주어야 한다.
아래와 같이, Entity Ref
를 눌렀을 때, 현재 Scenario Object 리스트들을 볼수 있고, 위의 예제에 만든 NPC_4 를 클릭해서, NPC_4의 속력과 위치를 정할 수 있다
SpeedActionTarget 아래의 Type 은 두가지로 Link 와 Custom 으로 나누어져 있으며. Link 같은 경우, 그 링크의 제한 속력을 기준으로 scaling 한 값을 range 로 입력하면 되고, Custom 일 경우에는 Link 속력과 관계없이 속력을 정해줄 수 있다.
Event 생성
1. Event UI 를 통한 생성
Edit > Add Event 를 클릭하여 이벤트 생성 UI를 불러온다.
Event 생성에 필요한 정보를 입력한 뒤, ‘OK’ 를 클릭한다.
Event 생성에 필요한 정보는 일반적으로 ASAM OpenSCENARIO의 정의에 따르며, 추가 정보는 OpenSCENARIO Support 페이지를 통해 확인할 수 있다.
2. Data View 에서 Maneuver
를 마우스 우 클릭을 통한 Event 생성
원하는 Event 를 생성하려면, 해당되는 Maneuver
에 마우스 오른쪽 우 클릭을 통해서, Add Event
를 클릭한다.
아래와 같이 Event
element 가 생성이 된 걸 확인할 수 있다. 이 방법으로 Event element 를 생성시, Event 안에 attributes 의 값들이 기본값(unspecified) 로 저장된 걸 오른쪽 Property View 에서 확인할 수 있으며, 보여지는 attributes 를 수정 가능하다.
만약 Event 안에 있는 elements(Action, Trigger) 를 추가하려면, Event 하위 항목에 있는 element 이기 때문에 추가하려는 Event 마우스 우 클릭을 통해서 Action 과 StartTrigger 를 추가할 수 있다. 또한 아래와 같이 MyManeuverGroup
안에 있는 Actor(NPC_2
)에 새롭게 생성된 Event Element 를 확인할 수 있다.
아래와 같이 Action Wizard
를 통해서 해당하는 Event 의 longitudinal action
> SpeedAction
element 를 생성할 수 있다.
위에서 Action 을 추가하는 것처럼, 아래 Set Trigger
를 통해서 ConditionGroup
element 를 생성해, Condition
element 를 만들 수 있다. 이후 ConditionGroup
을 만들려면, Trigger
element 에 마우스 우클릭으로 Add ConditionGroup
을 생성하면 된다.
이후 ConditionGroup
을 마우스 우 클릭을 하고, Submenu 에서 Add Condition Wizard
클릭하면 아래와 같이 Condition
element 세팅할 수 있는 화면을 볼 수 있다.
Element attribute 수정
좌측의
Data View
에서, 수정하고자 하는 속성(attribute)를 포함하는 요소(element) 또는 그 상위 요소를 클릭한다.오른쪽의
Properties View
에 클릭한 요소 및 하위 요소의 속성 값이 표시된다.
Properties View
에서, 수정하고자 하는 속성을 더블클릭한다.팝업된
Property Editor
에 수정된 값을 입력하고 'OK' 버튼을 클릭한다.
OpenScenario 에서 정의된 Enumerations Type 들은 ComboBox 의 UI 형태로 되어있다.
Element 삭제
좌측의 Data View 에서, 삭제하고자 하는 요소(element)를 우 클릭하고
Delete
버튼을 클릭한다.삭제 확인 팝업 창의
OK
를 눌러 요소를 삭제한다.
삭제가 불가능한 요소의 삭제를 시도할 경우, 명령이 무시되고 하단에 로그가 출력된다.
(상위 요소가 해당 하위 요소를 반드시 필요로 하는 경우 삭제할 수 없다)
차량 경로 편집
Trajectory 편집
Trajectory는 차량 또는 보행자의 이동 경로를 나타내며 다양한 수학적 모양을 가질 수 있다.
수학적 모양은 Polyline, Clothoid, Nurbs의 세가지 모양으로 나뉜다.
차량이나 보행자가 어떤 Trajectory를 따라갈지 정의할 때 이러한 모양들을 활용할 수 있다.
(현재 Polyline만 지원되며, Clothoid와 Nurbs는 지원 안됨)
Follow Trajectory 를 사용하기 위해서는, Trajectory 도 편집도 필요
Trajectory의 동작은 시간(TimeReference) 정보와 함께 정의된다.
TimeReference는 Timing으로 지정이 되어있을 때, 어떠한 지점(Vertex)를 어느 시점에 도착할건지를 Absolute와 Relative로 저장할 수 있다.
Absolute로 지정되어 있을 때 각 지점마다 도착 해야되는 시간을 의미하며, Relative일 경우, 각 지점 간의 상대시간을 표현한다.
Morai Defined & Custom Element로서 Spline이 있다.
Spline 같은 경우, 값을 각도와 위치값(Vertex)로 받는다.
https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/FollowTrajectoryAction.html
경로 생성
차량이 이미 출발위치에 배치되어 있을 경우, Set Start Location
과정을 생략할 수 있다.
경로를 설정하기 원하는 차량의
Private
element 를 클릭한다.원하는 링크를 클릭한 뒤, 키보드 위/아래 방향키를 사용하여 차량의 출발지점을 선택한다.
선택한 지점을 우 클릭하여
Set Start Location
을 클릭한다.
같은 방식으로 원하는 목적지를 선택한 후, 우 클릭하여
Add Waypoints
클릭한다.
같은 방법으로 Waypoint 를 추가하면, 이전에 추가한 Waypoint 는 경유지점이 되고, 마지막 Waypoint 가 목적지가 된다. 이 때, Waypoint 사이의 경로는 임의의 최단경로로 설정된다.
경로 삭제
경로를 삭제하고자 하는 차량의
Private
element 를 클릭한다.마우스 우 클릭하여
Delete Waypoint
를 클릭한다.
해당 차량의 마지막 Waypoint 부터 순차적으로 삭제되며, 남은 Waypoint 가 2개 미만일 경우 Routing Action 이 삭제된다.
부가 기능
WorldPosition의 Z축 투영
배치된 물체의 고도(Z축)값을 모를 경우, WorldPosition으로 X, Y 축 값을 입력한 뒤, Scenario Runner 의 Z축 투영 기능을 이용하여 고도값을 생성할 수 있다.
Project all WorldPosition onto roads
물체의 위치를 현재 위치와 가장 가까운 도로 위로 이동시킨다.
Project all WorldPosition onto roads (ignore z-coord)
물체의 위치를 현재 위치와 가장 가까운 도로 위로 이동시킨다. 가까운 도로를 찾기 위해 거리 계산 시 고도 차이는 고려하지 않는다.
© 2022 MORAI Inc.