본문 바로가기
임베디드/Intern

ASAM OpenSCENARIO: User Guide | 3. General Concepts

by 코곰_ 2024. 3. 8.
인턴하면서 새로 다루게 된 OpenSCENARIO에 대해 정리해보겠습니다!
해당 튜토리얼 참고하여 작성했습니다.
https://www.asam.net/index.php?eID=dumpFile&t=f&f=4092&token=d3b6a55e911b22179e3c0895fe2caae8f5492467
 

ASAM OpenSCENARIO: User Guide

OpenSCENARIO comprises the specification and file schema for the description of dynamic content in driving simulation applications. The primary use of OpenSCENARIO is the description of complex maneuvers that involve multiple vehicles. OpenSCENARIO is used

www.asam.net

 

 

 

 

 

3. General Concepts

3.1 Architecture

모든 시나리오에는 세 가지 개념이 필수적

  1. RoadNetwork: 신호와 같은 정적 인프라
  2. Storyboard: 최소 하나 이상의 Story로 구성
  3. Actions: Condition에 의해 트리거되고 Actor들이 수행
  4. (그 외) Catalog → Multiple Scenario에서 재사용할 수 있도록 OpenScenario내의 요소들을 모아서 정의.
    1. 시나리오의 특정 요소에 대한 설명을 별도의 파일로 아웃소싱하여 시나리오에서 참조할 수 있도록 함
    2. 요소의 재사용성 & 가독성을 높임
    3. Vehicle, Pedestrian, MiscObject,  Controller, Trajectory ,Route ,Environment , Maneuver
  5. ParameterDeclaration은 시나리오 또는 Catalog 내의 파라미터들을 정의하기 위한 수단을 제공

 

3.1.1 Basic architecture components

  • OpenSCENARIO Model Instance: 데이터 모델에 의해 정의된 솔루션 공간의 시나리오 설명
  • OpenSCENARIO Director: OSC 모델 인스턴스를 해석 하고 시뮬레이션에서 시나리오 진행을 관리하는 구성 요소
  • Simulator Core: 시뮬레이션을 실행하는 데 필요한 OSC Director 또는 OSC 모델 인스턴스 이외의 모든 구성 요소

 

3.1.2 Elements

  • Storyboard (1 per scenario)
  • Story instances (0..* per Storyboard)
  • Act instances (1..* per Story)
  • ManeuverGroup instances (1..* per Act)
  • Maneuver instances (0..* per ManeuverGroup)
  • Event instances (1..* per Maneuver)
  • Action instances (1..* per Event)

 

 

 

 

 

3.2 Road networks and environment models

road network의 다음 기능은 Open SCENARIO를 통해 처리될 수 있다.

  • Individual road
  • Lane within a road (도로 내의 차선)
  • Traffic signal
  • Traffic signal controller
  • Road object

OpenSCENARIO에서 지원하는 도로망 설명은 OpenDRIVE 형식입니다. 이 형식은 도로 ID, 차선 ID, 도로 형상 등 도로 구조와 관련된 논리적 정보를 설명합니다.

Entity이 정보는 도로에서 행동하는 사례를 찾아 배치하고 교통 참가자를 배치하는 데 사용될 수 있습니다 . OpenDRIVE를 사용하여 도로 네트워크를 나타내는 경우 OpenSCENARIO 파일은 차선 번호 매기기에 대한 OpenDRIVE 규칙을 따라야 합니다.

 

 

 

 

 

3.3 Coordinate systems

  1. ISO 8855:2011 호환 좌표계: x, y, z
  2. 도로 기반 s/t좌표계: 도로 시작점이 원점, **해당 도로의 기준선(s축), 직교하는 방향(t축)**을 기준

 

 

 

 

3.4 Distances

사용 사례에 따라 다음 사이의 거리를 지정할 수 있습니다. (point = position)

  1. 두 Points
  2. 하나의 Point와 하나의 Entity  (bounding box 고려 사항 유무에 관계없이)
  3. 두 Entities (bounding box 고려 사항 포함 또는 제외)

OpenSCENARIO의 거리는 두 가지 방법으로 측정할 수 있습니다.

  • local coordinate system → lateral(세로 - X) & longitudinal(측면 - Y) distance in an Entity, road lane, or trajectory cordinate system
  • absolute context → Euclidean distance
  • Euclidean Distance
  • Longitudinal/ Lateral Entity distance
  • Longitudinal/ Lateral Road distance

 

3.4.7 Involving an entity in a distance calculation

Entity에 대한 관심 지점을 식별하는 것은 Entity 부울 속성 값에 따라 달라집니다.

  1. freeSpace = false
    • The distance between {Point P and Entity E} = the distance between {point P and Entity E’s origin(E0)
    • The distance between {Entity E and Entity F} = the distance between {their origins (E0, F0)
  2. entity bounding box를 고려하지 않는다. 거리 계산에 있어, 사용되는 entity의 point가 곧 origin이 된다.
  3. freeSpace = true
    • Distance between {Entities and reference Points}
      • Euclidean distance → 관심 지점은 Entity참조 지점까지의 거리 값이 가장 낮은 경계 상자의 지점
      • longitudinal distance → 관심 지점은 Entity기준점까지의 세로 거리가 가장 짧은 경계 상자의 지점
      • lateral distance → 관심 지점은 기준점까지의 Entity측면 거리가 가장 낮은 경계 상자의 지점
    • Distance between {Entities}
      • Euclidean distance → 관심 지점은 가장 낮은 거리를 생성하는 엔터티 경계 상자의 두 지점
      • longiitudinal distance → 관심 지점은 가장 낮은 세로 거리를 생성하는 엔터티의 경계 상자에 있는 두 지점
      • lateral distance → 관심 지점은 가장 낮은 측면 거리를 생성하는 엔터티의 경계 상자에 있는 두 지점
      • 두 경계상자가 교차하면 거리는 0

 

 

 

 

3.5 Controllers

Controller 는 ScenarioObject의 동작을 제어하는 Simulation Core의 요소입니다.

Controller는 Vehicle, Pedestrian의 객체에 할당된다. 시뮬레이터의 일부로 내부에 있을 수도 있고 파일에 정의된 외부에 있을 수도 있다. 기본적으로 비활성화된 상태로 할당된다.

Controller의 사용 사례는 다음과 같다.

  • Vehicle이 테스트 중인 시스템에 의해 제어됨을 지정합니다.
  • 컨트롤러가 도로 네트워크나 다른 행위자에 대응하여 지능적인 결정을 내리는 smart actor behavior을 정의합니다 . 따라서 컨트롤러는 예를 들어 시나리오의 에이전트가 인간과 유사한 방식으로 동작하도록 만드는 데 사용될 수 있습니다.
  • 사람이 직접 제어할 차량을 할당합니다.

 

3.5.1 Controller Types

OpenSCENARIO는 두 가지 유형의 컨트롤러를 정의합니다.

  1. The default controller: 작업에 설명된 대로 정확하게 제어 전략을 적용
  2. An user-defined controller: 제어 전략에 대한 사용자 정의 해석이 가능

OpenSCENARIO는 user-defined controller의 동작을 규정할 수 없습니다 . 이는 user-defined controller를 사용한 시뮬레이션이 동일한 OSC 모델 인스턴스를 사용하더라도 기본 컨트롤러 만 사용하여 생성된 시뮬레이션과 다를 수 있음을 의미합니다. 반복가능한 시뮬레이션 결과는 default controller 사용시에만 예상된다.

 

 

3.5.2 Controlling a scenario object

동일한 ScenarioObject dimension에 대해 최대 2개의 컨트롤러를 정의할 수 있다. 만약 두번째 컨트롤러가 차원에서 활성화되면, 해당 차원에서 현재 활성화된 컨트롤러가 비활성화 된다.

새로운 controller가 활성화되어도 기존의 control strategy, 이에 해당하는 action이 방해받지 않는다. (control strategy는 할당된 entity에 속함) 새로운 controller를 사용해도 이 내용은 변경되지 않고, 이전 컨트롤러와 마찬가지로 기존 control strategy를 계속 시행한다.

  1. User-defined controller
    1. assign: AssignControllerAction
    2. activate: ActivateControllerAction, AssignControllerAction
  2. The default controller
    1. assign: 런타임 시 모든 ScenarioObjects유형의 Pedestrian또는 Vehicle에는 제어 전략을 시행할 수 있는 기본 컨트롤러가 할당됩니다. 이 컨트롤러는 OpenSCENARIO 모델 인스턴스 에 의해 할당되거나 할당 해제되지 않습니다.
    2. activate**: OpenSCENARIO 모델 인스턴스 에서는 기본 컨트롤러를 명시적으로 활성화하거나 비활성화할 수 없습니다.** 해당 도메인에 대해 활성화된 사용자 정의 컨트롤러가 없으면 런타임 시 해당 모션 도메인에 대해 기본 컨트롤러가 활성화됩니다. 도메인에 대해 사용자 정의 컨트롤러가 활성화되면 해당 도메인에 대한 기본 컨트롤러가 자동으로 비활성화됩니다.

 

 

 

 

 

3.6 Routes

Route는 연결된 도로의 Waypoint 목록을 기반으로 Entity 인스턴스들을 navigate하여 방향 경로를 생성하는 데 사용된다. Waypoint(중간에 머무르는 곳)는Position과 RouteStrategy로 구성된다. RouteStrategy는 position에 도달하는 방법을 나타낸다. waypoints사이 entity의 움직임은 제약으로서 RouteStrategy가 적용된 시뮬레이터에 의해 만들어진다. 한 쌍의 waypoint 사이를 이동하는 방법은 두 가지 이상일 수 있다. 이 경우 RouteStrategy 마지막에 명시된 것을 사용한다.

명확한 route를 생성하려면 충분히 많은 waypoint를 지정해야 한다.

Route는 AcquirePositionAction, AssigmRouteAction을 이용해 Actor들에 할당될 수 있다. 할당된 후엔 다른 action이 덮어쓰기 전까진 그대로 남아있다.

Entity가 route에 있다면, 교차로에 도달하기 전까진 같은 route를 지속한다.

  • 경로에 루프가 포함된 경우 - 동일한 도로 구간을 여러 번 통과
    • entity가 경유지 사이의 두 개 이상의 링크에 속하는 도로에 있는 경우, 해당 entity는 아직 따라가지 않은 가장 빠른 링크에 있는 것으로 간주된다.
    • entity의 인스턴스는 현재 있는 링크보다 이후의 링크만 따른다.
    • entity가 떠난 후 경로에 다시 합류하거나 최종 waypoint에 도달하면 이전에 방문한 waypoint는 무시된다.
  • 경로에 루프가 포함되어 있지 않으면 - 경로의 첫번째 waypoint부터 actor가 경로에 진입하는 위치까지의 경로 부분을 무시한다. actor는 actor의 현재 위치에서 시작하여 경로의 나머지 부분을 따른다.

 

 

 

 

 

 

3.7 Trajectory (궤적)

Trajectory 인스턴스는 Entity motion을 위해 의도된 경로를 정의하는데 사용된다.

  • Polyline: 정점들의 set에 걸쳐 단순한 선분을 연결
  • Clothoid: 오일러 나선(곡률이 선형적으로 증가하는 곡선)
  • Non-Uniform Rational B-Splines (Nurbs) of arbitrary order.
    • Nurbs를 사용하면 대부분의 관련 경로가 직접/ 임의의 근사값으로 표현될 수 있다.

 

 

 

 

 

3.8 Traffic Simulation

OpenSCENARIO는  Entity 인스턴스의 결정론적 동작 외에도 확률론적이거나 정확하게 정의되지 않은 동작을 정의하는 방법도 제공합니다.

확률적 행동을 정의하기 위해  TrafficAction의 인스턴스를 사용하여 주변 지능형 교통 에이전트를 정의할 수 있습니다. 이 작업을 통해 traffic source, traffic sink, traffic swarm의 매개변수화가 지정될 수 있습니다.

 

 

 

 

 

 

3.9 Properties

Property의 인스턴스는 OpenSCENARIO 하위 요소의 테스트 인스턴스별 또는 사용 사례별 속성을 정의하는 데 사용될 수 있습니다.

  • Vehicle
  • Pedestrian
  • MiscObject
  • Controller
  • RoadCondition

 

 

 

 

 

3.10 Traffic signals

  1. 시뮬레이션에서 교통 신호의 위치와 렌더링 및 가능한 상태. 위치는 도로망에서 정의됩니다. 렌더링은 시뮬레이터에만 적용됩니다.
  2. 시뮬레이션 중에 교통 신호가 언제 어떻게 변경되는지 설명하는 동적 동작입니다. 이는 도로 네트워크의 객체를 참조하여 OpenSCENARIO에서 정의됩니다.

3.10.1 Traffic signal controllers

교통 신호 컨트롤러는 하나 이상의 동적 교통 신호에 대해 동일한 상태를 제공합니다. 교통 신호 컨트롤러는 고속도로의 동적 속도 제어와 신호등 전환 단계를 제어하는 데 사용됩니다. OpenSCENARIO는 도로 네트워크에 정의된 교통 컨트롤러에 단계 및 기간과 같은 동적 측면을 추가합니다.

 

 

3.10.2 Traffic signal definition & 3.10.3 Connecting traffic signal controllers

<RoadNetwork>
  <LogicFile/>
  <SceneGraphFile/>
  <TrafficSignalController name="RoadNetwork_ID1">
    ...
  </TrafficSignalController>
  <TrafficSignalController name="RoadNetwork_ID2"
                           delay="10"
                           reference="RoadNetwork_ID1">
    ...
  </TrafficSignalController>
  ...
</RoadNetwork>

OpenSCENARIO는 여러 교통 신호 컨트롤러의 동적 동작을 연결하는 선택적 메커니즘을 제공합니다.

 

 

3.10.4 Phases

<TrafficSignalController name="6">
  <Phase name="stop" duration="25">
    <TrafficSignalState trafficSignalId="8594" state="true;false;false"/>
    <TrafficSignalState trafficSignalId="8595" state="true;false;false"/>
  </Phase>
  ...
</TrafficSignalController>

TrafficSignalController 는 순서가 정해진 phase의 list를 제공한다. phase는 traffic signal controller의 동적 요소를 나타내며 duration와 name 을 정의한다. traffic signal은 boolean value로 encode된다.