| .. | |
| ******************************************************************************* | |
| 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> |