---
tags: asrlab
---
# Openscenario Document
## How to install scenario runner
[Scenario runner install tutorial](https://github.com/carla-simulator/scenario_runner/blob/master/Docs/getting_scenariorunner.md)
## How to run scenario runner
1. 開啟 carla
$ `cd ~/carla` -> $ `make launch` -> click play
2. 利用 scenario_runner 執行 openScenario file
```c
python3 scenario_runner.py --openscenario "path/to/openScenario_file"
```
:::warning
openScenario file 的副檔名必須為 .xosc
:::
## OpenScenario file 要素 & 如何改動 openScenario file
### OpenScenario file 要素
#### File Overview
```xml
<?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 結束條件

### 如何改動 openScenario file
#### 修改地圖
第 2 行的 `artc_scene_0727` 代表**已經匯入 carla**(透過 make import) 的地圖名稱,若要切換地圖,修改地圖名稱即可。
```xml=
<RoadNetwork>
<LogicFile filepath="artc_scene_0727"/>
</RoadNetwork>
```
#### 新增車輛
以下一整個 xml 結構體為一台車輛,若要新增車輛就是再新增一個如下的 xml 結構體於 `<Entities>`...`</Entities>` 中,其中包含許多車輛設定參數,參數部份可參考[連結](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/ScenarioObject.html),其中第 1 行中的 `hero2` 為這台車輛的名稱,若新增多台車輛請避免名稱重複,而第 2 行中的 `vehicle.nissan.micra` 為車輛模型名稱。
```xml=
<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 結構為設定天氣,其中包含許多天氣設定參數,參數部份可參考[連結](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/EnvironmentAction.html),主要調整部份為第 5 行至第 9 行的 `<Weather>` ... `</Weather>` 中的標籤,標籤 `<Sun>` 代表陽光, 標籤 `<Fog>` 代表霧氣,而標籤 `<Precipitation>` 代表降雨。
```xml=
<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 行是設定車子初始位置於哪一個 `laneId` 與 `roadId`,`offset` 和 `s` 參數則代表偏移量。
```xml=
<Private entityRef="hero2">
<PrivateAction>
<TeleportAction>
<Position>
<LanePosition roadId="5" laneId="-3" offset="0" s="0"/>
</Position>
</TeleportAction>
</PrivateAction>
</Private>
```
#### 設定車輛速度
第 3 行的 `hero2` 代表車輛名稱,用來識別設定的車輛是哪一台,第 11 行表示加速函數,可參考[連結](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/TransitionDynamics.html),第 13 行中的 `5` 表示車輛速度,範例中設定為 5 km/s。第 21 行為設定事件觸發條件,下方有相關介紹。
這邊主要介紹的是車輛加速事件,其他事件可參考[連結](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/PrivateAction.html)。
```xml=
<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` 表示根據模擬器時間去觸發,還有其他條件觸發方式可選擇,請參考[連結](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/content/Condition.html)。
```xml=
<StartTrigger>
<ConditionGroup>
<Condition name="StartCondition" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="0" rule="greaterThan"/>
</ByValueCondition>
</Condition>
</ConditionGroup>
</StartTrigger>
```
#### 設定事件結束條件
同上
```xml=
<StopTrigger>
<ConditionGroup>
<Condition name="EndCondition" delay="0" conditionEdge="rising">
<ByValueCondition>
<SimulationTimeCondition value="25" rule="greaterThan"/>
</ByValueCondition>
</Condition>
</ConditionGroup>
</StopTrigger>
```
## Reference
* [Carla 支援與不支援 Openscenario 細項](https://carla-scenariorunner.readthedocs.io/en/latest/openscenario_support/#migrating-openscenario-09x-to-10)
* [Openscenario XML 標籤](https://releases.asam.net/OpenSCENARIO/1.0.0/Model-Documentation/index.html)
* [OpenSCENARIO: User Guide](https://www.asam.net/index.php?eID=dumpFile&t=f&f=4092&token=d3b6a55e911b22179e3c0895fe2caae8f5492467)