..
  *******************************************************************************
  Copyright (c) 2021 in-tech GmbH

  This program and the accompanying materials are made available under the
  terms of the Eclipse Public License 2.0 which is available at
  http://www.eclipse.org/legal/epl-2.0.

  SPDX-License-Identifier: EPL-2.0
  *******************************************************************************

.. _scenario:

Scenario
========

.. _scenario_overview:

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.

.. _scenario_parameterdeclaration:

ParameterDeclarations
---------------------

The tag ``ParameterDeclarations`` allow to define generic parameters, which can be referenced later the file by its name, prefixed with ``$``.

**Example declaration**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 2
   :start-at: <ParameterDeclarations>
   :end-at: </ParameterDeclarations>

**Example usage**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 12
   :start-at: <SimulationTime
   :lines: 1

**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 |op|.

.. _scenario_catalogs:

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: :ref:`scenario_vehiclemodels`
- Mandatory: :ref:`scenario_pedestrianmodels`
- Optional: TrajectoryCatalog for the case that a *FollowTrajectory action* is defined

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 2
   :start-at: <CatalogLocations>
   :end-at: </CatalogLocations>

.. _scenario_vehiclemodels:

VehicleCatalog
~~~~~~~~~~~~~~

This file is mandatory.
It contains the available vehicle models 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

**Full Example:** :download:`/../../../repo/sim/contrib/examples/Common/VehicleModelsCatalog.xosc`

.. _scenario_pedestrianmodels:

PedestrianCatalog
~~~~~~~~~~~~~~~~~

This file is mandatory.
It contains the available pedestrian models 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, |op| internally sets *meaningless* parameters, such as *number of gears*, to operational defaults.

**Supported models:**

- pedestrian_child
- pedestrian_adult

**Full Example:** :download:`/../../../repo/sim/contrib/examples/Common/PedestrianModelsCatalog.xosc`

.. _scenario_roadnetwork:

RoadNetwork
-----------

The ``RoadNetwork`` tag contains the mandatory reference to the OpenDRIVE :ref:`scenery`.

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 2
   :start-at: <RoadNetwork>
   :end-at: </RoadNetwork>

.. _scenario_entities:

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 :ref:`profilescatalog`.

.. note:: This deviates from the OpenSCENARIO standard.

.. todo:: In what way do scenario agents deviate from the standard?

To specify an entity as the **Ego Agent**, the it must be named "Ego".

Entities can also be grouped into selections.

.. todo:: What is an EntitySelection?

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 2
   :start-at: <Entities>
   :end-at: </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**

.. code-block:: xml

   <CatalogReference catalogName="ProfilesCatalog.xml" entryName="MiddleClassCarAgent">
       <ParameterAssignments>
           <ParameterAssignment parameterRef="Length" value="4.0" />
       </ParameterAssignments>
   </CatalogReference>

.. admonition:: AgentProfile vs. VehicleModel

   |Op| 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).

.. _scenario_storyboard:

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.

.. _scenario_init:

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:

.. table::
   :class: tight-table

   ==================== =================== ========================= ==============
   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:

.. table::
   :class: tight-table

   ==================== ================== ============================================================================================
   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
   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**

|Op| 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 :ref:`scenario_parameterdeclaration`.

.. note:: If VisibilityAction **is not defined** the according entity agent **will be spawned**.

**Stochastic Values**

Unlike OpenSCENARIO, |op| allows some of the aforementioned values to be stochastic.
This is achieved by using the sub-tag ``Stochastics`` within the tags ``LanePosition`` or ``SpeedAction``:

.. code-block:: xml

   <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**

.. code-block:: xml

   <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>

.. _scenario_story:

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**

.. code-block:: xml

   <Story name="MyStory">
     <Act name="Act1">
       <ManeuverGroup name="MySequence" maximumExecutionCount="-1">
         <Actors>
           ...
         </Actors>
         <Maneuver name="MyManeuver">
           ...
         </Maneuver>
       </ManeuverGroup>
     </Act>
   </Story>

.. _scenario_actors:

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"/>``.

.. _scenario_maneuver:

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**

.. code-block:: xml

   <Maneuver name="MyManeuver">
     <Event name="MyEvent" priority="overwrite">
       <Action name="MyManipulator">
         ...
       </Action>
       <StartTrigger>
         <ConditionGroup>
           <Condition name="Conditional">
             ...
           </Condition>
         </ConditionGroup>
       </StartTrigger>
     </Event>
   </Maneuver>

.. _scenario_conditions:

Conditions
""""""""""

|Op| 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.

.. table::

   ==================================== ==============
   Condition                            Triggered By
   ==================================== ==============
   :ref:`scenario_simulationtime`       Value
   :ref:`scenario_relativelaneposition` Entity
   :ref:`scenario_roadposition`         Entity
   :ref:`scenario_relativelaneposition` Entity
   :ref:`scenario_relativespeed`        Entity
   :ref:`scenario_timetocollision`      Entity
   :ref:`scenario_timeheadway`          Entity
   ==================================== ==============

.. _scenario_simulationtime:

SimulationTime
++++++++++++++

Defines, when the simulation ends.
Triggers at a specified time value, given in seconds.
The rule is required and only ``greaterThan`` is currently supported.

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 8
   :start-at: <Condition name="EndTime"
   :end-at: </Condition>

.. _scenario_relativelaneposition:

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**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/ByEntityCondition_RelativeLane/Scenario.xosc
   :language: xml
   :dedent: 18
   :start-at: <Condition name="RelativeLanePosition">
   :end-at: </Condition>

.. _scenario_roadposition:

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**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/ByEntityCondition_RoadPosition/Scenario.xosc
   :language: xml
   :dedent: 18
   :start-at: <Condition name="RoadPosition">
   :end-at: </Condition>

.. _scenario_relativespeed:

RelativeSpeed
+++++++++++++

This condition evaluates if the relative velocity (:math:`v_{rel}`) between a TriggeringEntity and a reference entity, is *lessThan*, *equalTo*, or *greaterThan*, a specified value, where :math:`v_{rel} = v_{trig} - v_{ref}`.

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/ByEntityCondition_RelativeSpeed/Scenario.xosc
   :language: xml
   :dedent: 18
   :start-at: <Condition name="RelativeSpeed">
   :end-at: </Condition>

.. _scenario_timetocollision:

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**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/ByEntityCondition_TimeToCollision/Scenario.xosc
   :language: xml
   :dedent: 18
   :start-at: <Condition name="TimeToCollision">
   :end-at: </Condition>

.. _scenario_timeheadway:

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**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/ByEntityCondition_TimeHeadway/Scenario.xosc
   :language: xml
   :dedent: 18
   :start-at: <Condition name="TimeHeadway">
   :end-at: </Condition>

.. _scenario_actions:

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:

- :ref:`scenario_lanechange`
- :ref:`scenario_followtrajectory`
- :ref:`scenario_acquireposition`
- :ref:`scenario_removeagent`
- :ref:`scenario_speedaction`

In addition, the following user defined actions are interpreted:

- :ref:`scenario_componentstatechange`
- :ref:`scenario_defaultCustomCommandAction`


.. todo:: Write a paragraph about the concept "Trajectories, OSC Actions, and so" in the developer zone.

.. _scenario_lanechange:

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*

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Absolute/Scenario.xosc
   :language: xml
   :dedent: 14
   :start-at: <Action name="LaneChange">
   :end-at: </Action>

**Example** *with relative target and fixed time*

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/OSCAction_SinusoidalLaneChangeLeft_Relative/Scenario.xosc
   :language: xml
   :dedent: 14
   :start-at: <Action name="LaneChange">
   :end-at: </Action>

.. _scenario_followtrajectory:

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**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/Pedestrian_Trajectory/Scenario.xosc
   :language: xml
   :dedent: 14
   :start-at: <Action name="Trajectory">
   :end-at: </Action>

**Example** *using a TrajectoryCatalog*

.. code-block:: xml

   <Action name="FollowTrajectory">
     <Private>
       <Routing>
         <FollowTrajectoryAction>
           <CatalogReference catalogName="TrajectoryCatalog.xosc" entryName="TrajectoryA">
         </FollowTrajectoryAction>
       </Routing>
      </Private>
   </Action>


.. _scenario_acquireposition:

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 the supported by the component *FMU_Wrapper* and for OSMP messages.

**Example** *(WorldPosition)*

.. code-block:: xml

   <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)*

.. code-block:: xml

    <Action name="AcquirePosition">
      <PrivateAction>
        <RoutingAction>
          <AcquirePositionAction>
            <Position>
              <RelativeObjectPosition dx="1.0" dy="1.0" entityRef="S1"/>
            </Position>
          </AcquirePositionAction>
        </RoutingAction>
      </PrivateAction>
    </Action>

.. _scenario_removeagent:

Remove Agent
++++++++++++

The RemoveAgentsManipulator removes the specified entity at the time of triggering.

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Configurations/OSCAction_RemoveAgent/Scenario.xosc
   :language: xml
   :dedent: 14
   :start-at: <Action name="RemoveAgents">
   :end-at: </Action>

.. _scenario_speedaction:

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*

.. code-block:: xml

   <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*

.. code-block:: xml

   <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>

.. _scenario_defaultCustomCommandAction:

UsedDefinedAction: DefaultCustomCommandAction
+++++++++++++++++++++++++++++++++++++++++++++

.. todo:: Write a paragraph in the developer zone about the concept "wrapping FMUs" and the "OSMP FMU"

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``.

.. admonition:: FMU_Wrapper component for OSMP messages only

   The linked string signal is set as custom action of the TrafficCommand.

**Example**

.. code-block:: xml

  <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 :ref:`scenario_componentstatechange`.

.. _scenario_componentstatechange:

UserDefinedAction: Component State Change
+++++++++++++++++++++++++++++++++++++++++

Command Keyword: SetComponentState

.. todo:: Write a paragraph in the developer zone about the concept "Component State Change"

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.

**Example**

.. code-block:: xml

   <Action name="ComponentStateChange">
       <UserDefinedAction>
           <CustomCommandAction>SetComponentState Dynamics_TrajectoryFollower Acting</CustomCommandAction>
       </UserDefinedAction>
   </Action>

.. _scenario_stoptrigger:

StopTrigger
~~~~~~~~~~~

Here, end conditions for the simulation are defined.

Right now, only SimulationTime is supported, given in seconds, with the fixed ``rule="greaterThan"``.

**Example**

.. literalinclude:: /../../../repo/sim/contrib/examples/Common/Scenario.xosc
   :language: xml
   :dedent: 2
   :start-at: <StopTrigger>
   :end-at: </StopTrigger>
