Skip to main content
Skip table of contents

시나리오 생성

이 페이지에서는 Scenario Runner 를 이용하여 새 시나리오를 생성하는 방법을 소개한다.


시나리오 생성

  • 다양한 Scene 의 구성 Component & Parameter 에 따라 시나리오를 자동으로 생성한다.

    • 이를 기반으로 해서 여러 다른 Scene 에 해당되는 다양한 시나리오를 생성 할 수 있다.

EuroNCAP Scenario Generation_(Protocol 링크)

  • EuroNCAP은 The European New Car Assessment Programme의 약자로, 간소화 된 방법으로 자동차 사고로 사망하거나 사망 할 수 있는 실제 사고 시나리오를 나타낸다.

    • 안전 등급은 EuroNCAP이 디자인하고 수행한 차량 테스트 시리즈를 기반으로 결정되며, 이 테스트는 실제 사고 시나리오를 간소화하여 차량 안전성을 평가한다.

    • Scenario Runner에서 EuroNCAP Scenario 를 Generation 을 할 때, AEB(Autonomous Emergency Braking) Car-to-Car test procedure 을 따른다.

    • 이 AEB Car-toCar Testing 같은 경우 CCRs, CCRm, CCRb 의 시나리오를 가지고 테스트 하고, 테스트의 중점은 차량이 충돌 가능성을 감지해서, 차량의 충돌을 피하기 위해서 속도를 감소시키는 시나리오 기반으로, 시나리오를 생성 할 수 있다.

종류

설명

CCRs (Car-to-Car Rear Stationary)

차량이 전진하여 다른 정지된 차량에 전면 구조물이 다른 차량의 후면 구조물에 충돌하는 사고

CCRm (Car-to-Car Rear Moving)

차량이 전진하여 일정한 속도로 이동 중인 다른 차량에 전면 구조물이 다른 차량의 후면 구조물에 충돌하는 사고

CCRb (Car-to-Car Rear Braking)

차량이 전진하여 일정한 속도로 이동 중인 다른 차량에 전면 구조물이 다른 차량의 후면 구조물에 충돌하는데, 그 후 감속하는 사고

https://drive.google.com/file/d/1GO92g5MTHPYXhqJeADoZTrldOz83kz7B/view?usp=sharing

VRU (Vulnerable road user)

  • VRU는 자동차, 버스 또는 트럭에 타지 않은 도로 사용자

    • 일반적으로 보행자, 오토바이 탑승자, 자전거 탑승자, 7세 이하 어린이, 노인 및 이동 수단 사용자를 포함한다.

  • Morai runner에서는 CBNAO, CPNC, Pedestrian, Animal 등의 상황을 제공한다.

종류

설명

CBNAO (Car-to-Bicyclist Nearside Adult Obstructed)

EGO 차량이 접근할 때 자전거가 가려진 상태에 있다가 갑자기 도로에 진입
https://drive.google.com/file/d/1iiTugZVLhwD7lIvTufTctstVX3NdilmO/view?usp=sharing

CPNC (Car-to-Pedestrian Nearside Child)

EGO 차량이 접근할 때 보행자가 가려진 상태에 있다가 갑자기 도로에 진입

Pedestrian

지정된 위치에 보행자를 배치

Animal

지정된 위치에 동물을 배치
https://drive.google.com/file/d/1bvoccbCiborB1nrSdr7BMe8NHcXV2kUl/view?usp=sharing

새 시나리오 생성 (Manual)

1. File > New Scenario 클릭

텍스트, 스크린샷, 소프트웨어, 디스플레이이(가) 표시된 사진  자동 생성된 설명

2. 데이터 입력

RoadNetwork Path 에 MGeo 폴더를 선택한 후, Map Name 에 지도 이름을 입력한다.

MORAI SIM: Drive과 연계하여 시뮬레이션하기 위해서는 해당 Map Name 이 MORAI SIM: Drive 내의 지도 명칭과 동일해야 한다.

3. 생성 완료

주어진 경로의 MGeo 지도를 로드하고, OpenSCENARIO 구조에서 반드시 필요한 요소들을 자동 생성한다. 생성된 시나리오에서 차량 및 차량의 동작을 정의하기 위해서는 시나리오 편집 의 내용을 활용한다.

텍스트, 스크린샷, 번호, 도표이(가) 표시된 사진  자동 생성된 설명

OpenSCENARIO의 Parameter Distribution을 이용한 시나리오 생성

OpenSCENARIO에는 특정 시나리오를 기준으로 전역 매개변수를 변경하여 다수의 시나리오를 파생시킬 수 있는 Parameter Distribution 기능이 정의되어 있다. 매개변수는 결정 분포(deterministic distribution) 또는 확률 분포(stochastic distribution)에 따라 정의된다.

1. Tools > Generate Scenarios (ParameterDistribution) 클릭

텍스트, 스크린샷, 소프트웨어, 컴퓨터 아이콘이(가) 표시된 사진  자동 생성된 설명

2. 데이터 입력

OpenSCENARIO 양식으로 정의된 Parameter Distribution 파일을 선택하고, 생성될 시나리오가 저장될 폴더와 파일 이름을 입력한다.

입력된 파일 이름 뒤에 숫자가 붙은 OpenSCENARIO 형식의 파일로 생성된다. ({File Name}_00X.xosc)

3. 생성 완료

정상적으로 생성될 경우 로그로 총 몇 개의 시나리오 파일이 생성되었는지 확인할 수 있다.

텍스트, 소프트웨어, 스크린샷이(가) 표시된 사진  자동 생성된 설명

생성된 파일 경로로 따라가면 아래와 같이 파일이 생성된 것을 확인할 수 있다. (12개의 파일 중 example_01)

CODE
<?xml version="1.0" ?>
<OpenSCENARIO xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Schema/OpenSCENARIO.xsd">
  <FileHeader author="MORAI:scenario-module-team" date="2022-07-21T10:00:00" description="Scenario: Double Lane Change (parameterized)" revMajor="1" revMinor="2"/>
  <ParameterDeclarations>
    <ParameterDeclaration name="npc1_vehicle" parameterType="string" value="2016_Hyundai_Ioniq"/>
    <ParameterDeclaration name="npc2_vehicle" parameterType="string" value="2021_Hyundai_G80"/>
    <ParameterDeclaration name="weather_type" parameterType="string" value="dry"/>
    <ParameterDeclaration name="ego_init_speed" parameterType="double" value="9.8"/>
    <ParameterDeclaration name="ego_init_link_index" parameterType="int" value="40.0"/>
    <ParameterDeclaration name="npc1_init_speed" parameterType="double" value="16.5"/>
    <ParameterDeclaration name="npc1_init_link_index" parameterType="int" value="78"/>
    <ParameterDeclaration name="npc2_init_speed" parameterType="double" value="16"/>
    <ParameterDeclaration name="npc2_init_link_index" parameterType="int" value="3"/>
  </ParameterDeclarations>
  <VariableDeclarations/>
  <CatalogLocations/>
  <RoadNetwork>
    <LogicFile filepath="."/>
  </RoadNetwork>
  <SimulatorInfo>
    <Map name="R_KR_PG_KATRI"/>
  </SimulatorInfo>
  <Entities>
    <ScenarioObject name="Ego">
      <Vehicle name="2016_Hyundai_Ioniq" vehicleCategory="car">
        <ParameterDeclarations/>
        <Properties/>
      </Vehicle>
    </ScenarioObject>
    <ScenarioObject name="NPC_1">
      <Vehicle name="$npc1_vehicle" vehicleCategory="car">
        <ParameterDeclarations/>
        <Properties/>
      </Vehicle>
    </ScenarioObject>
    <ScenarioObject name="NPC_2">
      <Vehicle name="$npc2_vehicle" vehicleCategory="car">
        <ParameterDeclarations/>
        <Properties/>
      </Vehicle>
    </ScenarioObject>
  </Entities>
  <Storyboard>
    <Init>
      <Actions>
        <GlobalAction>
          <EnvironmentAction>
            <Environment name="Environment1">
              <TimeOfDay animation="false" dateTime="2022-07-21T10:00:00"/>
              <Weather atmosphericPressure="80000" fractionalCloudCover="zeroOktas" temperature="170">
                <Sun azimuth="0.0" elevation="1.571" illuminance="1.0"/>
                <Fog visualRange="100000.0"/>
                <Precipitation precipitationIntensity="0.0" precipitationType="$weather_type"/>
                <Wind direction="0" speed="0"/>
              </Weather>
              <RoadCondition frictionScaleFactor="1.0" wetness="dry"/>
            </Environment>
          </EnvironmentAction>
        </GlobalAction>
        <Private entityRef="Ego">
          <PrivateAction>
            <LongitudinalAction>
              <SpeedAction>
                <SpeedActionTarget>
                  <AbsoluteTargetSpeed value="$ego_init_speed"/>
                </SpeedActionTarget>
                <SpeedActionDynamics dynamicsDimension="time" dynamicsShape="step" value="0"/>
              </SpeedAction>
            </LongitudinalAction>
          </PrivateAction>
          <PrivateAction>
            <TeleportAction>
              <Position>
                <LinkPosition id="A219BS010310" index="$ego_init_link_index"/>
              </Position>
            </TeleportAction>
          </PrivateAction>
        </Private>
        <Private entityRef="NPC_1">
          <PrivateAction>
            <LongitudinalAction>
              <SpeedAction>
                <SpeedActionTarget>
                  <AbsoluteTargetSpeed value="$npc1_init_speed"/>
                </SpeedActionTarget>
                <SpeedActionDynamics dynamicsDimension="time" dynamicsShape="step" value="0"/>
              </SpeedAction>
            </LongitudinalAction>
          </PrivateAction>
          <PrivateAction>
            <TeleportAction>
              <Position>
                <LinkPosition id="A219BS010310" index="$npc1_init_link_index"/>
              </Position>
            </TeleportAction>
          </PrivateAction>
        </Private>
        <Private entityRef="NPC_2">
          <PrivateAction>
            <LongitudinalAction>
              <SpeedAction>
                <SpeedActionTarget>
                  <AbsoluteTargetSpeed value="$npc2_init_speed"/>
                </SpeedActionTarget>
                <SpeedActionDynamics dynamicsDimension="time" dynamicsShape="step" value="0"/>
              </SpeedAction>
            </LongitudinalAction>
          </PrivateAction>
          <PrivateAction>
            <TeleportAction>
              <Position>
                <LinkPosition id="A219BS010311" index="$npc2_init_link_index"/>
              </Position>
            </TeleportAction>
          </PrivateAction>
        </Private>
      </Actions>
    </Init>
    <Story name="Story1">
      <Act name="Act1">
        <ManeuverGroup maximumExecutionCount="1" name="Sequence1">
          <Actors selectTriggeringEntities="false">
            <EntityRef entityRef="NPC_2"/>
          </Actors>
          <Maneuver name="Maneuver1">
            <Event maximumExecutionCount="1" name="Event1" priority="overwrite">
              <Action name="Action1">
                <PrivateAction>
                  <LateralAction>
                    <LaneChangeAction targetLaneOffset="0">
                      <LaneChangeActionDynamics dynamicsDimension="distance" dynamicsShape="cubic" value="54.8254917969"/>
                      <LaneChangeTarget>
                        <RelativeTargetLane entityRef="Ego" value="0"/>
                      </LaneChangeTarget>
                    </LaneChangeAction>
                  </LateralAction>
                </PrivateAction>
              </Action>
              <StartTrigger>
                <ConditionGroup>
                  <Condition conditionEdge="rising" delay="0" name="StartCondition1">
                    <ByEntityCondition>
                      <TriggeringEntities triggeringEntitiesRule="any">
                        <EntityRef entityRef="NPC_2"/>
                      </TriggeringEntities>
                      <EntityCondition>
                        <DistanceCondition freespace="false" rule="greaterThan" value="5.0">
                          <Position>
                            <RelativeObjectPosition dx="0" dy="0" entityRef="Ego"/>
                          </Position>
                        </DistanceCondition>
                      </EntityCondition>
                    </ByEntityCondition>
                  </Condition>
                </ConditionGroup>
              </StartTrigger>
            </Event>
            <Event maximumExecutionCount="1" name="Event2" priority="overwrite">
              <Action name="Action2">
                <PrivateAction>
                  <LateralAction>
                    <LaneChangeAction targetLaneOffset="0">
                      <LaneChangeActionDynamics dynamicsDimension="distance" dynamicsShape="cubic" value="54.8254917969"/>
                      <LaneChangeTarget>
                        <RelativeTargetLane entityRef="Ego" value="1"/>
                      </LaneChangeTarget>
                    </LaneChangeAction>
                  </LateralAction>
                </PrivateAction>
              </Action>
              <StartTrigger>
                <ConditionGroup>
                  <Condition conditionEdge="rising" delay="0" name="MyStartCondition2">
                    <ByValueCondition>
                      <StoryboardElementStateCondition state="completeState" storyboardElementRef="Event1" storyboardElementType="event"/>
                    </ByValueCondition>
                  </Condition>
                </ConditionGroup>
              </StartTrigger>
            </Event>
          </Maneuver>
        </ManeuverGroup>
        <StartTrigger>
          <ConditionGroup>
            <Condition conditionEdge="none" delay="0" name="Act1_StartTrigger_SimulationTime">
              <ByValueCondition>
                <SimulationTimeCondition rule="greaterThan" value="0"/>
              </ByValueCondition>
            </Condition>
          </ConditionGroup>
        </StartTrigger>
        <StopTrigger/>
      </Act>
    </Story>
    <StopTrigger>
      <ConditionGroup>
        <Condition conditionEdge="none" delay="0" name="Time_out">
          <ByValueCondition>
            <SimulationTimeCondition rule="greaterThan" value="30"/>
          </ByValueCondition>
        </Condition>
      </ConditionGroup>
    </StopTrigger>
  </Storyboard>
  <Evaluation/>
</OpenSCENARIO>


© 2022 MORAI Inc.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.