# Scenario

## Overview

The scenario configuration file describes all dynamic configuration of a simulation run, i.e. the position of an agent as well as conditional events that alter the behavior of the simulation during the run. It adheres to the ASAM OpenSCENARIO 1.0 standard, although we support only a subset of the features of the standard.

The different parts of the scenario configuration are described in the following chapters.

## ParameterDeclarations

The tag `ParameterDeclarations` allow to define generic parameters, which can be referenced later the file by its name, prefixed with `$`.

Example declaration

    <ParameterDeclarations>
      <ParameterDeclaration name="OP_OSC_SchemaVersion" parameterType="string" value="0.4.0"/>
    </ParameterDeclarations>

Example usage

        <SimulationTimeCondition value="0.0" rule="greaterOrEqual"/>

Supported parameterTypes

- string

- integer

- double

Note

Only `string` allows empty values.

Warning

The parameter `OP_OSC_SchemaVersion` is used to check for schema compatibility and is mandatory within openPASS.

## Catalogs

The `Catalogs` tag defines references to various other files containing sub features of OpenSCENARIO (and written in the same format).

The following catalogs interpreted:

- Mandatory: VehicleCatalog

- Mandatory: PedestrianCatalog

- Optional: TrajectoryCatalog for the case that a FollowTrajectory action is defined

Example

    <CatalogLocations>
      <VehicleCatalog>
        <Directory path="Vehicles"/>
      </VehicleCatalog>
      <PedestrianCatalog>
        <Directory path="Vehicles"/>
      </PedestrianCatalog>
      <ControllerCatalog>
        <Directory path=""/>
      </ControllerCatalog>
      <ManeuverCatalog>
        <Directory path=""/>
      </ManeuverCatalog>
      <MiscObjectCatalog>
        <Directory path=""/>
      </MiscObjectCatalog>
      <EnvironmentCatalog>
        <Directory path=""/>
      </EnvironmentCatalog>
      <TrajectoryCatalog>
        <Directory path=""/>
      </TrajectoryCatalog>
      <RouteCatalog>
        <Directory path=""/>
      </RouteCatalog>
    </CatalogLocations>

### VehicleCatalog

This path is mandatory. It contains the available vehicle model catalogs for the simulation. For each vehicle the physical parameters are stored here.

Supported models:

- car_bmw_i3

- car_bmw_3

- car_bmw_7_1

- car_bmw_7_2

- car_mini_cooper

- bus

- truck

- bicycle

Example Catalog: `/../../../repo/sim/contrib/examples/Common/Vehicles/VehicleModelsCatalog.xosc`

### PedestrianCatalog

Warning

This part of the documentation needs a major update! Pedestrians are handled as vehicles and are included in the vehicle catalogs.

This path is mandatory. It contains the available pedestrian model catalogs for the simulation. For each pedestrian the physical parameters are stored here.

Note

Currently, pedestrian models are internally handled the same way as vehicle models, i.e. they behave like simplified vehicles. For convenience, openPASS internally sets meaningless parameters, such as number of gears, to operational defaults.

Supported models:

- pedestrian_child

- pedestrian_adult

Full Example: `/../../../repo/sim/contrib/examples/Common/Vehicles/PedestrianModelsCatalog.xosc`

## RoadNetwork

The `RoadNetwork` tag contains the mandatory reference to the OpenDRIVE Scenery.

Example

    <RoadNetwork>
      <LogicFile filepath="SceneryConfiguration.xodr"/>
      <SceneGraphFile filepath=""/>
    </RoadNetwork>

Furthermore the controllers of the traffic lights are defined in this section. Each controller defines the phases of a set of linked traffic lights (e.g. one junction). The state must be one of the following: “red”, “yellow”, “green”, “red yellow”.

Example

    <TrafficSignals>
      <TrafficSignalController name="">
        <Phase duration="3" name="Phase1">
          <TrafficSignalState state="green" trafficSignalId="1"/>
        </Phase>
        <Phase duration="3" name="Phase2">
          <TrafficSignalState state="yellow" trafficSignalId="1"/>
        </Phase>
        <Phase duration="3" name="Phase3">
          <TrafficSignalState state="red" trafficSignalId="1"/>
        </Phase>
        <Phase duration="3" name="Phase4">
          <TrafficSignalState state="red yellow" trafficSignalId="1"/>
        </Phase>
      </TrafficSignalController>
    </TrafficSignals>

Currently these states are supported

off
red
yellow
green
red yellow
yellow flashing

## Entities

The `Entities` tag defines all agents that are present at the start of the simulation at predefined positions. There may be any number of these so called Scenario Agents (also zero). Each entity is described by a name and a reference to a vehicle profile within the ProfilesCatalog.

Note

This deviates from the OpenSCENARIO standard where the vehicle model is directly given, or a reference to a model VehicleCatalog is given, because there are no Profiles in OpenSCENARIO.

To specify an entity as the Ego Agent, it must be named “Ego”.

Entities can also be grouped into selections.

Note

EntitySelections currently have no effect in openPASS

Example

    <Entities>
      <ScenarioObject name="Ego">
        <CatalogReference catalogName="VehicleCatalog" entryName="car_mini_cooper"/>
        <ObjectController>
          <Controller name="Ego">
            <Properties>
              <Property name="AgentProfile" value="MiddleClassCarAgent"/>
            </Properties>
          </Controller>
        </ObjectController>
      </ScenarioObject>
    </Entities>

Overriding Parameters

Parameters defined in the VehicleCatalog can be assigned inside the CatalogReference element. In this case the assigned parameter will overwrite the definition in the VehicleCatalog. Otherwise the value defined in the VehicleCatalog is used. The type of the parameter must match that in the VehicleCatalog.

Example

    <CatalogReference catalogName="ProfilesCatalog.xml" entryName="MiddleClassCarAgent">
        <ParameterAssignments>
            <ParameterAssignment parameterRef="Length" value="4.0" />
        </ParameterAssignments>
    </CatalogReference>

AgentProfile vs. VehicleModel

openPASS references AgentProfiles instead of a VehicleModels. Such an AgentProfile may have a stochastic distribution of different VehicleModels, each with potentially different parameters. After the random selection of the vehicle model, some parameters may not be available and are therefore not assigned (ignored).

## Storyboard

The `Storyboard` tag contains the initial setup of the scenario and manipulator actions. These actions control the behavior of the simulation at runtime based on predefined conditions.

### Init

The content of the `Init` tag is forwarded to the SpawnPoint and define if and where it should place the ego and scenario agents. The position can either be defined as global coordinates (x and y) with the `World` tag or as lane coordinates (s and t) with the `Lane` tag.

The schema is defined as follows:

Tag | Parent | Attributes | Occurrences
--- | --- | --- | ---
Actions | Init | none | 1
Private | Actions | entityRef | 1 per entity
PrivateAction | Private | none | 1+
TeleportAction | PrivateAction | none | 1
Position | TeleportAction | none | 1
LanePosition | Position | roadId, laneId, s, offset | 0 or 1
WorldPosition | Position | x, y, h | 0 or 1
Orientation | LanePosition | type, h | 0 or 1
LongitudinalAction | PrivateAction | none | 1
SpeedAction | LongitudinalAction | none | 1
SpeedActionDynamics | SpeedAction | rate, dynamicsShape | 1
SpeedActionTarget | SpeedAction | none | 1
AbsoluteTargetSpeed | SpeedActionTarget | value | 1
RoutingAction | PrivateAction | none | 0 or 1
AssignRouteAction | RoutingAction | none | 1
Route | AssignRouteAction | none | 1
Waypoint | Route | none | 1+
Position | Waypoint | none | 1
RoadPosition | Position | roadId, t | 1
VisibilityAction | PrivateAction | traffic | 1

All listed attributes are required. The attributes have the following meaning:

Tag | Attribute | Description
--- | --- | ---
Private | entityRef | name of the entity for which the initial values are described in the sub-tags
LanePosition | roadId | Id of the road in the Scenery
LanePosition | laneId | Id of the lane in the Scenery
LanePosition | s | start position on the lane (i.e. distance from the start of the road) of the reference point
LanePosition | offset | lateral distance of the reference point to the middle of the road (i.e. t coordinate)
WorldPosition | x | x coordinate of the reference point
WorldPosition | y | y coordinate of the reference point
WorldPosition | h | heading
Orientation | type | has to be “relative”
Orientation | h | heading angle in radiant relative to the lane. For positive lane Ids, use a setting around PI (180°) to match the natural driving direction.
SpeedActionDynamics | rate | acceleration
SpeedActionDynamics | dynamicsShape | “linear” for constant acceleration, “step” for immediate transition
SpeedActionDynamics | dynamicsDimension | has to be “rate”
AbsoluteTargetSpeed | value | velocity
RoadPosition | roadId | Id of the road in the Scenery
RoadPosition | t | negative for driving in roadDirection (i.e on lanes with negative Id) else positive
RoadPosition | s | ignored
VisibilityAction | traffic | Flag deciding if the scenario agent will be spawned (true = spawned, false = not spawned)

Defining a Position

openPASS only supports `LanePosition` and `WorldPosition` from the OpenSCENARIO standard.

Controlling Visibility

VisibilityAction is an optional attribute, which allows easy parameterization of certain entities, e.g. via ParameterDeclarations.

Note

If VisibilityAction is not defined the according entity agent will be spawned.

Follow Route Action

This action is defined here in the init part of the Storyboard. See FollowRouteAction

Stochastic Values

Unlike OpenSCENARIO, openPASS allows some of the aforementioned values to be stochastic. This is achieved by using the sub-tag `Stochastics` within the tags `LanePosition` or `SpeedAction`:

    <Stochastics value="..." stdDeviation="..." lowerBound="..." upperBound="..."/>

The stochastics tag normally defines a normal distribution, but it is up to each component to interpret its values. Here, value is a selector, which can be either `s`, `offset` (if inside LanePosition), `velocity` or `rate` (if inside SpeedAction). Depending on the selected type, the actual mean value is then taken from the attribute of the corresponding tag `LanePosition`, `SpeedActionDynamics`, or `AbsoluteTargetSpeed`.

Full Example

    <Init>
      <Actions>
        <Private entityRef="Ego">
          <PrivateAction>
            <TeleportAction>
              <Position>
                <LanePosition roadId="1" s="20.0" laneId="-2" offset="0.0">
                  <Orientation type="relative" h="0.2"/>
                  <Stochastics value="s" stdDeviation="5.0" lowerBound="10.0"
                                                            upperBound="30.0"/>
                </LanePosition>
              </Position>
            </TeleportAction>
          </PrivateAction>
          <PrivateAction>
            <LongitudinalAction>
              <SpeedAction>
                <SpeedActionDynamics rate="0.0" dynamicsShape="linear"
                                                dynamicsDimension="rate"/>
                <SpeedActionTarget>
                  <AbsoluteTargetSpeed value="10.0" />
                </SpeedActionTarget>
                <Stochastics value="velocity" stdDeviation="2.0" lowerBound="5.0"
                                                                 upperBound="15.0"/>
              </SpeedAction>
            </LongitudinalAction>
          </PrivateAction>
          <PrivateAction>
            <RoutingAction>
              <AssignRouteAction>
                <Route>
                  <Waypoint>
                    <Position>
                      <RoadPosition roadId="1" t="-1.0" s="0"/>
                    </Position>
                  </Waypoint>
                  <Waypoint>
                    <Position>
                      <RoadPosition roadId="2" t="-1.0" s="0"/>
                    </Position>
                  </Waypoint>
                </Route>
              </AssignRouteAction>
            </RoutingAction>
          </PrivateAction>
        </Private>
        <Private entityRef="ScenarioAgent">
          <PrivateAction>
            <TeleportAction>
              <Position>
                <LanePosition roadId="1" s="50.0" laneId="-3" offset="0.0"/>
              </Position>
            </TeleportAction>
          </PrivateAction>
          <PrivateAction>
            <LongitudinalAction>
              <SpeedAction>
                <SpeedActionDynamics rate="0.0" dynamicsShape="linear"
                                                dynamicsDimension="rate"/>
                <SpeedActionTarget>
                  <AbsoluteTargetSpeed value="10.0" />
                </SpeedActionTarget>
              </SpeedAction>
            </LongitudinalAction>
          </PrivateAction>
        </Private>
      </Actions>
    </Init>

### Story

The tag `Story` is optional and defines all conditional interventions during runtime. The story consists of multiple acts, which itself can consist of multiple `ManeuverGroup` tags. A maneuver groups must consist of exactly one `Actors` tag and one `Maneuver` tag. The `maximumExecutionCount` attribute states the maximum number of times that each maneuver will by triggered. To trigger an maneuver for an unlimited number of times, set the value to `-1,`.

Note

While multiple stories can be added, grouping of maneuver groups into acts currently has no effect in the simulator.

Example

    <Story name="MyStory">
      <Act name="Act1">
        <ManeuverGroup name="MySequence" maximumExecutionCount="-1">
          <Actors>
            ...
          </Actors>
          <Maneuver name="MyManeuver">
            ...
          </Maneuver>
        </ManeuverGroup>
      </Act>
    </Story>

#### Actors

The `Actors` tag defines the agents that are mainly affected by this sequence. These agents can either be defined directly by stating their name within a sub-tag `<EntityRef entityRef="entityName"/>` or as the agent that triggered the event itself via `<Actors selectTriggeringEntities="true"/>`.

#### Maneuver

The `Maneuver` tag defines the conditions, when an action shall take place. It contains one or more events, each consisting of one action and one or more start conditions.

Note

Only a single action is currently supported, although the standard allows several.

Warning

Due to internal handling, event names must be unique.

Example

    <Maneuver name="MyManeuver">
      <Event name="MyEvent" priority="overwrite">
        <Action name="MyManipulator">
          ...
        </Action>
        <StartTrigger>
          <ConditionGroup>
            <Condition name="Conditional">
              ...
            </Condition>
          </ConditionGroup>
        </StartTrigger>
      </Event>
    </Maneuver>

##### Conditions

openPASS support different kind of conditions, belonging either to `ByValueCondition` or `ByEntityCondition`. While a by value condition trigger based on a specified value and is unrelated to any specific agent, a by entity condition is bound to an triggering agent, defined by a mandatory section `TriggeringEntities`. Entities can be either ego or scenario agents, or all agents if the section is left blank.

Note

OpenSCENARIO specifies that a rule should be applied to the `TriggeringEntities` element. Currently, only the rule `any` is supported, so any of the listed entities may satisfy the condition independent of the others.

Condition | Triggered By
--- | ---
SimulationTime | Value
RelativeLanePosition | Entity
RoadPosition | Entity
RelativeLanePosition | Entity
RelativeSpeed | Entity
TimeToCollision | Entity
TimeHeadway | Entity

###### SimulationTime

The SimulationTimeCondition only defines an arbitrary trigger, which can be used in ANY condition (see here: https://www.asam.net/static_downloads/ASAM_OpenSCENARIO_V1.1.1_Model_Documentation/modelDocumentation/content/SimulationTimeCondition.html) If used in conjunction with a StopTrigger of a Storyboard defines how long the simulation will be executed at max. The rule is required and only `greaterThan` is currently supported.

Warning

It is mandatory for openPASS to define a StopTrigger that will fire in any case. This does not necessarily have to be a SimulationTimeCondition, but it is recommended to use it, perhaps in conjunction with another trigger.

Example

    <Condition name="EndTime" delay="0" conditionEdge="rising">
      <ByValueCondition>
        <SimulationTimeCondition value="30.0" rule="greaterThan"/>
      </ByValueCondition>
    </Condition>

###### RelativeLanePosition

Triggers if an entity is within a relative lane position with respect to the specified object. Here, ds (s-delta) and dLane (lane-delta) are applied to a reference object, e.g. `referenceEntity.s + ds`. The tolerance is then added and subtracted from the resulting s-coordinate to form a triggering zone. The condition is satisfied, if a TriggeringEntity touches this zone.

Example

    <Condition name="RelativeLanePosition" delay="0" conditionEdge="rising">
      <ByEntityCondition>
        <TriggeringEntities triggeringEntitiesRule="any">
          <EntityRef entityRef="Ego"/>
        </TriggeringEntities>
        <EntityCondition>
          <DistanceCondition relativeDistanceType="longitudinal" coordinateSystem="entity" freespace="false" rule="lessOrEqual" value="15.0">
            <Position>
              <RelativeLanePosition entityRef="StandingAgent" dLane="-1" dsLane="20.0"/>
            </Position>
          </DistanceCondition>
        </EntityCondition>
      </ByEntityCondition>
    </Condition>

###### RoadPosition

This Condition evaluates if a TriggeringEntity touches a given s-coordinate, s, on a specified road, given by roadId. Note that the tolerance is added and subtracted from the s-coordinate to form a triggering zone. The condition is satisfied, if a TriggeringEntity touches this zone.

Example

    <Condition name="RoadPosition" delay="0" conditionEdge="rising">
      <ByEntityCondition>
        <TriggeringEntities triggeringEntitiesRule="any">
          <EntityRef entityRef="Ego"/>
        </TriggeringEntities>
        <EntityCondition>
          <DistanceCondition relativeDistanceType="longitudinal" coordinateSystem="entity" freespace="false" rule="lessOrEqual" value="3.0">
            <Position>
              <RoadPosition roadId="0" s="110.0" t="-8.0"/>
            </Position>
          </DistanceCondition>
        </EntityCondition>
      </ByEntityCondition>
    </Condition>

###### RelativeSpeed

This condition evaluates if the relative velocity () between a TriggeringEntity and a reference entity, is lessThan, equalTo, or greaterThan, a specified value, where .

Example

    <Condition name="RelativeSpeed" delay="0" conditionEdge="rising">
      <ByEntityCondition>
        <TriggeringEntities triggeringEntitiesRule="any">
          <EntityRef entityRef="Ego"/>
        </TriggeringEntities>
        <EntityCondition>
          <RelativeSpeedCondition entityRef="StandingAgent" value="10.0" rule="greaterThan"/>
        </EntityCondition>
      </ByEntityCondition>
    </Condition>

###### TimeToCollision

This condition evaluates if the Time To Collision (TTC) between a TriggeringEntity and a reference entity is lessThan, equalTo, or greaterThan a specified value. The TTC is determined by projecting the movement of the entities using steps of 0.1 seconds and returning the first time step, at which their bounding boxes intersect.

Example

    <Condition name="TimeToCollision" delay="0" conditionEdge="rising">
      <ByEntityCondition>
        <TriggeringEntities triggeringEntitiesRule="any">
          <EntityRef entityRef="Ego"/>
        </TriggeringEntities>
        <EntityCondition>
          <TimeToCollisionCondition value="3.0" rule="lessThan" freespace="false">
            <TimeToCollisionConditionTarget>
              <EntityRef entityRef="StandingAgent"/>
            </TimeToCollisionConditionTarget>
          </TimeToCollisionCondition>
        </EntityCondition>
      </ByEntityCondition>
    </Condition>

###### TimeHeadway

This condition evaluates if the Time Headway (THW) between a TriggeringEntity and a reference entity is lessThan, equalTo, or greaterThan a specified value. If `freespace="true"` the net distance of the bounding boxes is considered, otherwise the distance of the reference points. The `alongRoute` attribute must be `true`.

Example

    <Condition name="TimeHeadway" delay="0" conditionEdge="rising">
      <ByEntityCondition>
        <TriggeringEntities triggeringEntitiesRule="any">
          <EntityRef entityRef="Ego"/>
        </TriggeringEntities>
        <EntityCondition>
          <TimeHeadwayCondition value="3.0" rule="lessThan" entityRef="StandingAgent" freespace="true" alongRoute="true" relativeDistanceType="longitudinal"/>
        </EntityCondition>
      </ByEntityCondition>
    </Condition>

##### Actions

Actions define what happens if all conditions of the maneuver are fulfilled and are applied on the actors defined for this maneuver.

The following openSCENARIO actions are supported:

- FollowRouteAction

- LaneChange

- Follow Trajectory

- Acquire Position

- Remove Agent

- SpeedAction

In addition, the following user defined actions are interpreted:

- UserDefinedAction: Component State Change

- UsedDefinedAction: DefaultCustomCommandAction

###### FollowRouteAction

The FollowRouteAction is a private Action which is added to the Init part of the Storyboard. It defines Waypoints, which are located by road_id and further with s and t coordinates. The Agent will try to follow the specified points.

Example Right turn, by specifying three waypoints

              <RoutingAction>
                <AssignRouteAction>
                  <Route closed="false" name="">
                    <Waypoint routeStrategy="fastest">
                      <Position>
                        <RoadPosition roadId="1472558076" t="-1.0" s="230"/>
                      </Position>
                    </Waypoint>
                    <Waypoint routeStrategy="fastest">
                      <Position>
                        <RoadPosition roadId="3083973" t="-1.0" s="8.5"/>
                      </Position>
                    </Waypoint>
                    <Waypoint routeStrategy="fastest">
                      <Position>
                        <RoadPosition roadId="2015840166" t="-0.2" s="100"/>
                      </Position>
                    </Waypoint>
                  </Route>
                </AssignRouteAction>
              </RoutingAction>

###### LaneChange

If this action trigger, the actor is forced to perform a trajectory, calculated at the time of triggering. The target lane be given either absolute or with respect to another entity. The trajectory can either have a fixed length (in s) or a fixed time.

Currently, “sinusoidal” is the only supported type.

Example with absolute target and fixed length

    <Action name="LaneChange">
      <PrivateAction>
        <LateralAction>
          <LaneChangeAction>
            <LaneChangeActionDynamics value="2.0" dynamicsShape="sinusoidal" dynamicsDimension="time"/>
            <LaneChangeTarget>
              <AbsoluteTargetLane value="-4"/>
            </LaneChangeTarget>
          </LaneChangeAction>
        </LateralAction>
      </PrivateAction>
    </Action>

Example with relative target and fixed time

    <Action name="LaneChange">
      <PrivateAction>
        <LateralAction>
          <LaneChangeAction>
            <LaneChangeActionDynamics value="2.0" dynamicsShape="sinusoidal" dynamicsDimension="time"/>
            <LaneChangeTarget>
              <RelativeTargetLane entityRef="Ego" value="+1"/>
            </LaneChangeTarget>
          </LaneChangeAction>
        </LateralAction>
      </PrivateAction>
    </Action>

###### Follow Trajectory

If triggered, the defined trajectory is relayed as signal to listening components. The trajectory can be defined either directly in the story or as separate TrajectoryCatalog. For the points (vertices) of the trajectory only world coordinates, given as `openScenario::WorldPosition`, are supported. Right now, the mandatory attributes z, pitch and roll are ignored.

Example

    <Action name="Trajectory">
      <PrivateAction>
        <RoutingAction>
          <FollowTrajectoryAction>
            <TrajectoryRef>
              <Trajectory name="LaneChange" closed="false">
                <Shape>
                  <Polyline>
                    <Vertex time="0">
                      <Position>
                        <WorldPosition x="100" y="3" z="0" h="1.570796326" p="0" r="0"/>
                      </Position>
                    </Vertex>
                    <Vertex time="5">
                      <Position>
                        <WorldPosition x="100" y="8" z="0" h="1.570796326" p="0" r="0"/>
                      </Position>
                    </Vertex>
                  </Polyline>
                </Shape>
              </Trajectory>
            </TrajectoryRef>
            <TimeReference>
              <None/>
            </TimeReference>
            <TrajectoryFollowingMode followingMode="position"/>
          </FollowTrajectoryAction>
        </RoutingAction>
      </PrivateAction>
    </Action>

Example using a TrajectoryCatalog

    <Action name="FollowTrajectory">
      <Private>
        <Routing>
          <FollowTrajectoryAction>
            <CatalogReference catalogName="TrajectoryCatalog.xosc" entryName="TrajectoryA">
          </FollowTrajectoryAction>
        </Routing>
       </Private>
    </Action>

###### Acquire Position

If triggered, the defined position is relayed as signal to listening components. Currently only “WorldPosition” and “RelativeObjectPosition” are supported.

Warning

Currently, this is only supported by the component FMU_Wrapper and for OSMP messages.

Warning

An FMU might contain routing logic not visible to the openPASS simulation core. For that reason, an equivalent RoutingAction should be set when using AcquirePosition. Otherwise the simulation output might contain missing data for fields depending on the localization along the route (PositionRoute, TCoordinate, AgentInFront, …).

Example (WorldPosition)

    <Action name="AcquirePosition">
      <PrivateAction>
        <RoutingAction>
          <AcquirePositionAction>
            <Position>
              <WorldPosition x="1.0" y="2.0" z="0.0" h="3.1415" p="0.0" r="0.0" />
            </Position>
          </AcquirePositionAction>
        </RoutingAction>
      </PrivateAction>
    </Action>

Example (RelativeObjectPosition)

    <Action name="AcquirePosition">
      <PrivateAction>
        <RoutingAction>
          <AcquirePositionAction>
            <Position>
              <RelativeObjectPosition dx="1.0" dy="1.0" entityRef="S1"/>
            </Position>
          </AcquirePositionAction>
        </RoutingAction>
      </PrivateAction>
    </Action>

###### Remove Agent

The RemoveAgentsManipulator removes the specified entity at the time of triggering.

Example

    <Action name="RemoveAgents">
      <GlobalAction>
        <EntityAction entityRef="">
          <DeleteEntityAction/>
        </EntityAction>
      </GlobalAction>
    </Action>

###### SpeedAction

The SpeedAction adjusts the velocity of an entity based on parameters of the SpeedAction. Both variants, “RelativeTargetSpeed” and “AbsoluteTargetSpeed”, are supported, but with restrictions:

- The SpeedActionDynamics attribute “dynamicsShape” only supports “linear” and “step”.

- The SpeedActionDynamics attribute “dynamicsDimension” only supports “rate”.

- The RelativeTargetSpeed attribute “continuous” is ignored.

Note

Values defined in the SpeedAction might not reflect actual values used by the simulator due to physical boundaries of the simulator.

Example AbsoulteTargetSpeed

    <Action name="SpeedAction">
      <PrivateAction>
        <LongitudinalAction>
          <SpeedAction>
            <SpeedActionDynamics dynamicsShape="step" value="0.0" dynamicsDimension="rate"/>
            <SpeedActionTarget>
              <AbsoluteTargetSpeed value="20"/>
            </SpeedActionTarget>
          </SpeedAction>
        </LongitudinalAction>
      </PrivateAction>
    </Action>

Example RelativeTargetSpeed

    <Action name="SpeedAction">
      <PrivateAction>
        <LongitudinalAction>
          <SpeedAction>
            <SpeedActionDynamics dynamicsShape="step" value="0.0" dynamicsDimension="rate"/>
            <SpeedActionTarget>
              <RelativeTargetSpeed entityRef="ScenarioAgent" value="10"
                                   speedTargetValueType="delta" continuous="false"/>
            </SpeedActionTarget>
            </SpeedAction>
        </LongitudinalAction>
      </PrivateAction>
    </Action>

###### UsedDefinedAction: DefaultCustomCommandAction

This is the default custom command, and is always selected, if the first WORD (Keyword) in the command string is not registered as a special custom command.

The `DefaultCustomCommandAction` adds an event to the `EventNetwork`, which is relayed as a string (`StringSignal`) by the component``OSCActions``.

FMU_Wrapper component for OSMP messages only

The linked string signal is set as custom action of the TrafficCommand. For more information on OSMP FMUs see the FMU Wrapper documentation.

Example

    <Action name="CustomParameters">
        <UserDefinedAction>
            <CustomCommandAction>Arbitrary String, e.g. { "hello": "world"}</CustomCommandAction>
        </UserDefinedAction>
    </Action>

Note

Here, “Arbitrary” is first checked, if it matches any other available Keyword for used defined actions, such as UserDefinedAction: Component State Change.

###### UserDefinedAction: Component State Change

Command Keyword: SetComponentState

The ComponentStateChangeManipulator influences the maximum reachable state of an agent component that is handled by the ComponentController, i.e. it can either activate or deactivate a component. For more details see the description of the ComponentController.

Example

    <Action name="ComponentStateChange">
        <UserDefinedAction>
            <CustomCommandAction>SetComponentState Dynamics_TrajectoryFollower Acting</CustomCommandAction>
        </UserDefinedAction>
    </Action>

### StopTrigger

Here, end conditions for the simulation are defined.

Right now, only SimulationTime is supported, given in seconds, with the fixed `rule="greaterThan"`.

Example

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