Try   HackMD

Openscenario Document

How to install scenario runner

Scenario runner install tutorial

How to run scenario runner

  1. 開啟 carla
    $ cd ~/carla -> $ make launch -> click play
  2. 利用 scenario_runner 執行 openScenario file
python3 scenario_runner.py --openscenario "path/to/openScenario_file"

openScenario file 的副檔名必須為 .xosc

OpenScenario file 要素 & 如何改動 openScenario file

OpenScenario file 要素

File Overview

<?xml version="1.0" encoding="UTF-8"?>
<OpenSCENARIO>
  ...
  <RoadNetwork>
    ...
  </RoadNetwork>
  <Entities>
       ...
  </Entities>
  <Storyboard>
    <Init>
      ...
    </Init>
    <Story name="MyStory">
      <Act name="Behavior">
        ...
        <StartTrigger>
          ...
        </StartTrigger>
        <StopTrigger>
         ...
        </StopTrigger>
      </Act>
    </Story>
    <StopTrigger/>
  </Storyboard>
</OpenSCENARIO>

1. RoadNetwork

地圖檔

2. Entity

車輛, 行人

3. Storyboard

描述場景中發生的一連串事件

  1. init 初使化場景
    • 設定天氣, 車輛產生位置等
  2. story 事件發生場景
    • Actor 事件的參與者
    • Event 事件
      • Action: 事件參與者做什麼動作
      • Condition: 觸發 Action 的條件
        • startTrigger: action 開始條件
        • stopTrigger: action 結束條件

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

如何改動 openScenario file

修改地圖

第 2 行的 artc_scene_0727 代表已經匯入 carla(透過 make import) 的地圖名稱,若要切換地圖,修改地圖名稱即可。

<RoadNetwork> <LogicFile filepath="artc_scene_0727"/> </RoadNetwork>

新增車輛

以下一整個 xml 結構體為一台車輛,若要新增車輛就是再新增一個如下的 xml 結構體於 <Entities></Entities> 中,其中包含許多車輛設定參數,參數部份可參考連結,其中第 1 行中的 hero2 為這台車輛的名稱,若新增多台車輛請避免名稱重複,而第 2 行中的 vehicle.nissan.micra 為車輛模型名稱。

<ScenarioObject name="hero2"> <Vehicle name="vehicle.nissan.micra" vehicleCategory="car"> <ParameterDeclarations/> <Performance maxSpeed="20" maxAcceleration="20" maxDeceleration="10.0"/> <BoundingBox> <Center x="1.5" y="0.0" z="0.9"/> <Dimensions width="2.1" length="4.5" height="1.8"/> </BoundingBox> <Axles> <FrontAxle maxSteering="0.5" wheelDiameter="0.6" trackWidth="1.8" positionX="3.1" positionZ="0.3"/> <RearAxle maxSteering="0.0" wheelDiameter="0.6" trackWidth="1.8" positionX="0.0" positionZ="0.3"/> </Axles> <Properties> <Property name="type" value="simulation"/> <Property name="color" value="0,255,0"/> </Properties> </Vehicle> </ScenarioObject>

設定天氣

此 xml 結構為設定天氣,其中包含許多天氣設定參數,參數部份可參考連結,主要調整部份為第 5 行至第 9 行的 <Weather> </Weather> 中的標籤,標籤 <Sun> 代表陽光, 標籤 <Fog> 代表霧氣,而標籤 <Precipitation> 代表降雨。

<GlobalAction> <EnvironmentAction> <Environment name="Environment1"> <TimeOfDay animation="false" dateTime="2020-03-20T12:00:00"/> <Weather cloudState="free"> <Sun intensity="0.85" azimuth="0" elevation="1.31"/> <Fog visualRange="100000.0"/> <Precipitation precipitationType="dry" intensity="0.0"/> </Weather> <RoadCondition frictionScaleFactor="1.0"/> </Environment> </EnvironmentAction> </GlobalAction>

設定車輛初始位置

第 1 行的 hero2 表示設定的車輛名稱,用來識別設定的車輛是哪一台,這個名稱與在新增車輛部份所設定的名稱一致。第 5 行是設定車子初始位置於哪一個 laneIdroadIdoffsets 參數則代表偏移量。

<Private entityRef="hero2"> <PrivateAction> <TeleportAction> <Position> <LanePosition roadId="5" laneId="-3" offset="0" s="0"/> </Position> </TeleportAction> </PrivateAction> </Private>

設定車輛速度

第 3 行的 hero2 代表車輛名稱,用來識別設定的車輛是哪一台,第 11 行表示加速函數,可參考連結,第 13 行中的 5 表示車輛速度,範例中設定為 5 km/s。第 21 行為設定事件觸發條件,下方有相關介紹。

這邊主要介紹的是車輛加速事件,其他事件可參考連結

<ManeuverGroup maximumExecutionCount="1" name="ManeuverSequence"> <Actors selectTriggeringEntities="false"> <EntityRef entityRef="hero2"/> </Actors> <Maneuver name="LaneChangeSimpleManeuver"> <Event name="AdversaryAccelerates" priority="overwrite"> <Action name="AdversaryAccelerates"> <PrivateAction> <LongitudinalAction> <SpeedAction> <SpeedActionDynamics dynamicsShape="step" value="1000" dynamicsDimension="distance"/> <SpeedActionTarget> <AbsoluteTargetSpeed value="5"/> </SpeedActionTarget> </SpeedAction> </LongitudinalAction> </PrivateAction> </Action> <StartTrigger> <ConditionGroup> <Condition name="StartCondition" delay="0" conditionEdge="rising"> <ByValueCondition> <SimulationTimeCondition value="0" rule="greaterThan"/> </ByValueCondition> </Condition> </ConditionGroup> </StartTrigger> </Event> </Maneuver> </ManeuverGroup>

設定事件開始條件

第 5 行的 SimulationTimeCondition 表示根據模擬器時間去觸發,還有其他條件觸發方式可選擇,請參考連結

<StartTrigger> <ConditionGroup> <Condition name="StartCondition" delay="0" conditionEdge="rising"> <ByValueCondition> <SimulationTimeCondition value="0" rule="greaterThan"/> </ByValueCondition> </Condition> </ConditionGroup> </StartTrigger>

設定事件結束條件

同上

<StopTrigger> <ConditionGroup> <Condition name="EndCondition" delay="0" conditionEdge="rising"> <ByValueCondition> <SimulationTimeCondition value="25" rule="greaterThan"/> </ByValueCondition> </Condition> </ConditionGroup> </StopTrigger>

Reference