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

.. _systemconfigblueprint:

SystemConfigBlueprint
=====================

This file contains the possible agent modules and channels of a dynamically generated agent. The content of this file should only be adjusted by experienced users with knowledge of the simulation architecture. The SystemConfigBlueprint is a special SystemConfig and has the same schema. Only the system with id 0 is used for generating dynamic agents.
If the simulation uses only statically configured agents (AgentProfile Type attribute is "Static"), this file isn't required.

.. _systemconfigblueprint_agentComponents:

AgentComponents
---------------
All components are listed here. An agent consists of a subset of this components.

.. table::
   :class: tight-table

   =========== ===============================================================================
   Attribute   Description
   =========== ===============================================================================
   Id          Used as key by the simulation to find the component
   Priority    The module with the highest priority value gets executed first by the scheduler
   Offset      Delay for the trigger method of each component in ms
   Cycle       Interval in which the component gets triggered by the scheduler in ms
   Response    Delay for the UpdateOutput method of each component in ms
   Library     Library name of this component
   Parameters  Parameters used by the component
   =========== ===============================================================================

Example:
This example describes the Sensor_Driver module.

.. literalinclude:: /../../../tuev/sim/contrib/examples/Common/systemConfigBlueprint.xml
   :language: xml
   :dedent: 12
   :lines: 28-38

.. _systemconfigblueprint_priorities:

Priorities
----------

Please refer to the :ref:`Components and channel communication diagram <component_channel_communication>` for assignment of a proper priority.
Based on the signal flow, input relevant components like sensors need to be executed first. They provide data for consuming components (algorithms) like ADAS and drivers.
Data is then handled by algorithms like Algorithm_Lateral.
Output-relevant modules like dynamics and actions are executed last.

Prioritizer can be applied on different levels depending on the modules/data they need to handle levels as following can be defined:

- Level 1 describes data produced by ADAS and drivers
- Level 2 describes data output by vehicle dynamic controllers
- Level 3 describes data delivered by dynamics

Priorities can be grouped (coarse) as following:
Highest number indicates highest priority.

.. table::
   :class: tight-table

   =========================== ===========
   Scope                       Range
   =========================== ===========
   Parameters                  500
   OpenScenarioActions         400
   Sensor                      350...399
   Event                       330
   DriverMode                  310
   ADAS                        250...299
   ComponentController         200
   Prioritizer (Lvl. 1)        150...199
   VehicleDynamicsControllers  100...149
   Prioritizer (Lvl. 2)        75...99
   Dynamics                    50...74
   Prioritizer (Lvl. 3)        25...49
   Updater                     0...24
   =========================== ===========

The table below can be used as orientation when a new module is introduced.

.. table::
   :class: tight-table

   ========================================= ======================================= ========= =========================== =======================================================================================================================
   Name                                      Library                                 Priority  Scope                       Note
   ========================================= ======================================= ========= =========================== =======================================================================================================================
   ParametersAgentModules                    ParametersAgent                         500       Parameters                  Sets all init-data and is updated cyclically
   OpenScenarioActions                       OpenScenarioActions                     400       ADAS                        Reads events from OpenScenario Actions and forwards them to other components
   SensorObjectDetector                      Sensor_OSI                              398       Sensor                      Gets instantiated multiple times (one time per sensor)
   SensorAggregation                         SensorAggregation_OSI                   351       Sensor
   SensorFusionErrorless                     SensorFusionErrorless_OSI               350       Sensor
   AlgorithmAgentFollowingDriverModel        AlgorithmAgentFollowingDriverModel      310       DriverModels
   AEB                                       AlgorithmAutonomousEmergencyBraking     250       ADAS
   FMU1                                      AlgorithmFmuWrapper                     250       ADAS
   FMU2                                      AlgorithmFmuWrapper                     250       ADAS
   FMU3                                      AlgorithmFmuWrapper                     250       ADAS
   ComponentController                       ComponentController                     200       ADAS                        Manages vehicle component states with regard to other vehicle component states and conditions and in response to events.
   PrioritizerLaterDriver                    SignalPrioritizer                       150       Prioritizer
   PrioritizerAccelerationDriver             SignalPrioritizer                       150       Prioritizer
   PrioritizerTurningIndicator               SignalPrioritizer                       150       Prioritizer
   PrioritizerSteeringVehicleComponents      SignalPrioritizer                       150       Prioritizer
   PrioritizerAccelerationVehicleComponents  SignalPrioritizer                       150       Prioritizer
   LimiterAccelerationVehicleComponents      LimiterAccelerationVehicleComponents    120       VehicleDynamicsControllers
   AlgorithmLateralDriver                    AlgorithmLateralDriver                  100       VehicleDynamicsControllers
   AlgorithmLongitudinalVehicleComponents    AlgorithmLongitudinalVehicleComponents  100       VehicleDynamicsControllers
   AlgorithmLongitudinalDriver               AlgorithmLongitudinalDriver             100       VehicleDynamicsControllers
   PrioritizerSteering                       SignalPrioritizer                       75        Prioritizer
   PrioritizerLongitudinal                   SignalPrioritizer                       75        Prioritizer
   DynamicsCollision                         DynamicsCollision                       50        Dynamics
   DynamicsRegularDriving                    DynamicsRegularDriving                  50        Dynamics
   DynamicsTrajectoryFollower                DynamicsTrajectoryFollower              50        Dynamics
   PrioritizerDynamics                       SignalPrioritizer                       25        Prioritizer
   SensorRecordStateModule                   SensorRecordState                       2         Updater                     Since values are "frozen" for current time step, logging can be placed anywhere
   ActionLongitudinalDriverModules           ActionLongitudinalDriver                3         Updater                     Will be expanded to ActionPrimary DriverTasks
   ActionSecondaryDriverTasksModules         ActionSecondaryDriverTasks              3         Updater
   AgentUpdater                              AgentUpdater                            1         Updater
   ========================================= ======================================= ========= =========================== =======================================================================================================================

.. _systemconfigblueprint_channelids:

Channel-Ids
-----------

Channels allow components to communicate with each other.
The signal flow is set explicitly via a channel-Id of 4 digits (see also :ref:`Components and channels communication diagram <component_channel_communication>`).

The first two numbers define the sending module (XX 00).
The other two digits define the type of signal that is sent (00 XX).

Signals as well as modules can be grouped to allow explicit numbering (see tables below).

Channel-Ids between Sensor and SensorFusion are an exception to this rule. For sensor/sensor fusion communication channel-ids are 9900 + x (incremented for every new sensor)

Example:
PrioritizerAccelerationDriver -> AlgorithmLongitudinalDriver with signal of type AccelerationSignal: 1813.


**Ids for Modules (first two digits)**


Index range for module groups:

.. table::
   :class: tight-table

   ================= ==========
   Group             Id
   ================= ==========
   Dynamics          1...10
   Algorithm         11...30
   DriverTasks       31...40
   Driver            41...50
   VehicleComponent  51...70
   Special           81...89
   Sensor            91...99
   ================= ==========

With corresponding defined indices:

.. table::
   :class: tight-table

   ========================================= ================= =====
   Module                                    Group             Id
   ========================================= ================= =====
   AgentUpdater                              Dynamics          1
   Dynamics_TrajectoryFollower               Dynamics          2
   Dynamics_RegularDriving                   Dynamics          3
   Dynamics_Collision                        Dynamics          4
   PrioritizerDynamics                       Dynamics          5
   Algorithm_LongitudinalVehicleComponent    Algorithm         11
   Algorithm_LongitudinalAfdm                Algorithm         12
   Algorithm_SteeringVehicleComponent        Algorithm         14
   Algorithm_LateralVehicleAfdm              Algorithm         15
   LimiterAccelerationVehicleComponents      Algorithm         17
   PrioritizerLongitudinal                   Algorithm         21
   PrioritizerSteering                       Algorithm         22
   PrioritizerAccelerationVehicleComponents  Algorithm         23
   PrioritizerSteeringVehicleComponents      Algorithm         24
   Action_LongitudinalDriver                 DriverTasks       31
   Action_SecondaryDriverTasks               DriverTasks       32
   PrioritizerTurningIndicator               DriverTasks       33
   AlgorithmAgentFollowingDriverModel        Driver            41
   AEB                                       VehicleComponent  52
   FMU1                                      VehicleComponent  71
   FMU2                                      VehicleComponent  72
   FMU3                                      VehicleComponent  73
   ComponentController                       Special           83
   OpenScenarioActions                       Special           84
   Parameter_Vehicle                         Sensor            92
   SensorAggregation                         Sensor            93
   SensorFusionErrorless                     Sensor            94
   Sensor_Driver                             Sensor            95
   SensorObjectDetector                      Sensor            98
   ========================================= ================= =====

**Ids for Signals (last two digits)**

Index range for signal groups:


.. table::
   :class: tight-table

   ==================== ==========
   Group                Id
   ==================== ==========
   Dynamics             1...10
   Algorithm            11...30
   OpenScenarioActions  61...70
   Special              71...80
   Sensor               81...90
   Parameters           91...99
   ==================== ==========

With corresponding defined indices:

.. table::
   :class: tight-table

   ======================================= ==================== =====
   Signal                                  Group                Id
   ======================================= ==================== =====
   Dynamics                                Dynamics             01
   Longitudinal                            Algorithm            11
   Steering                                Algorithm            12
   Acceleration                            Algorithm            13
   Lateral                                 Algorithm            14
   SecondaryDriverTasks                    Algorithm            19
   Trajectory                              OpenScenarioActions  71
   AcquireGlobalPosition                   OpenScenarioActions  62
   CustomParameters (CustomCommandAction)  OpenScenarioActions  63
   SensorDriver                            Sensor               81
   SensorData                              Sensor               90
   ParametersVehicle                       Parameters           92
   ======================================= ==================== =====

.. _systemconfigblueprint_parameters:

Parameters
----------

For more information on the type of parameters (especially stochastic distributions), please refer to the :ref:`ProfilesGroup section <profilescatalog_profilegroups>`.

**Important Note:** The syntax for defining parameters in the SystemConfigBlueprint file differs from the ProfilesCatalog syntax.
See the following example:

.. code-block:: xml

   <parameters>
       <parameter>
           <id>StringParameter</id>
           <type>string</type>
           <unit/>
           <value>Lorem ipsum</value>
       </parameter>
       <parameter>
           <id>RandomParameter</id>
           <type>normalDistribution</type>
           <unit/>
           <value>
               <mean>15.0</mean>
               <sd>2.5</sd>
               <min>10.0</min>
               <max>20.0</max>
           </value>
       </parameter>
   </parameters>
