Observation_Log

This section describes the parameters and outputs of the Observation_Log observer.

Parameterization

Following parameters are supported:

Parameter

Type

Description

OutputFilename

String

Name of the output file (normally simulationOutput.xml)

LoggingCyclicsToCsv

Bool

If true, cyclics are written an additional file (one CSV file per run)

LoggingGroup_<NAME>

StringVector

Defines which columns belong to the logging group named NAME

LoggingGroups

StringVector

Defines active logging groups

The columns, defined by the LoggingGroup_<NAME> correspond to cyclic data entries written by the world and other components. Cyclics are named data values of a single agent during a specific timestep. Simulation components including agent components can write this values into the DataBuffer component using the PublisherInterface. The Observation_Log can then read this values and write them into the output.

The world publishes the following cyclics (see source of AgentNetwork.cpp):

Cyclics

Type

Unit

Description

XPosition

Double

m

Position x of the reference point (in world coordinates)

YPosition

Double

m

Position y of the reference point (in world coordinates)

VelocityEgo

Double

m/s

Absolute velocity (length of the velocity vector) at the reference point (including spin caused by YawRate)

AccelerationEgo

Double

m/s²

Longitudinal acceleration (including angular acceleration) at the reference point. Longitudinal refers to the angle of the vehicle regardless of the curvature of the road it is on.

YawAngle

Double

rad

Yaw angle w.r.t. x-axis

YawRate

Double

rad/s

Yaw rate of the agent

SteeringAngle

Double

rad

Steering wheel angle

TotalDistanceTraveled

Double

m

Total traveled distance of all agents

PositionRoute*

Double

m

Position of the agent’s front center in road’s s coordinate (distance to the start of the road)

TCoordinate*

Double

m

Position of the agent’s front center in lane’s t coordinate (distance to the middle of the lane respecting intended driving direction)

Lane*

Integer

Id of the lane

Road*

String

OpenDRIVE id of the road on which the agent is on (i.e. the front center).

SecondaryLanes*

IntegerVector

List of secondary lanes on a specific road

AgentInFront*

Integer

Id of the next object on the agent’s route

The longitudinal driver publishes the following cyclics (see source of longitudinalDriver.cpp):

Cyclics

Type

Description

AccelerationPedalPosition

Double

Position of the acceleration pedal position in percent

BrakePedalPosition

Double

Position of the brake pedal position in percent

Gear

Integer

Current gear position

The component Action_SecondaryDriverTasks publishes the following cyclics (see source of secondaryDriverTasks.cpp):

Cyclics

Type

Description

BrakeLight

Boolean

True if BrakeLight is on

IndicatorState

Enum

State of the turning indicator (left, center/off, right)

LightStatus

Enum

State of the headlight (off, low beam, fog light, high beam, flash)

The component AgentUpdater publishes the following cyclics (see source of agentUpdaterImpl.cpp):

Cyclics

Type

Description

LongitudinalController

String

Component that is active for longitudinal control

LateralController

String

Component that is active for lateral control

The component Dynamics_RegularDriving publishes the following cyclics (see source of regularDriving.cpp):

Cyclics

Type

Unit

Description

EngineMoment

Double

Nm

Torque of the engine

SteeringAngle

Double

rad

Angle of the steering wheel

The component Sensor_Driver publishes the following cyclics (see source of sensor_driverImpl.cpp):

Cyclics

Type

Description

AgentInFront

Integer

Id of the agent infront

The component Sensor_OSI publishes the following cyclics (see source of sensorCar2X.cpp):

Cyclics

Type

Description

DetectedAgents

String

List of ids of detected agents

VisibleAgents

String

List of ids of visible agents

Wildcards in LoggingGroup definitions

It is possible to use the wildcard character * in a LoggingGroup_<NAME> entry.
The wildcard can be used only once per column reference.

Example

      <Library>Observation_Log</Library>
      <Parameters>
        <String Key="OutputFilename" Value="simulationOutput.xml"/>
        <Bool Key="LoggingCyclicsToCsv" Value="false"/>
        <StringVector Key="LoggingGroup_Trace" Value="XPosition,YPosition,YawAngle"/>
        <StringVector Key="LoggingGroup_RoadPosition" Value="AgentInFront,Lane,PositionRoute,Road,TCoordinate"/>
        <StringVector Key="LoggingGroup_RoadPositionExtended" Value="SecondaryLanes"/>
        <StringVector Key="LoggingGroup_Sensor" Value="Sensor*_DetectedAgents,Sensor*_VisibleAgents"/>
        <StringVector Key="LoggingGroup_Vehicle" Value="AccelerationPedalPosition,BrakePedalPosition,EngineMoment,Gear,SteeringAngle,TotalDistanceTraveled,YawRate"/>
        <StringVector Key="LoggingGroup_Visualization" Value="AccelerationEgo,BrakeLight,IndicatorState,LightStatus,VelocityEgo"/>
        <StringVector Key="LoggingGroups" Value="Trace,Visualization,RoadPosition,Sensor"/>
      </Parameters>

Output Files

SimulationOutput

Every successful run (single experiment) generates a single file, normally called simulationOutput.xml (see :ref:’observationlog_parameterization’). The output can contain multiple invocations of the same configuration with different random seeds. For each invocation a RunResult is stored, which contains information about the agents and their parameters. As well as run specific events and parameters.

<SimulationOutput>
    <RunResults>
        <RunResult RunId="0">
            ...
        </RunResult>
        <RunResult RunId="1">
            ...
        </RunResult>
    </RunResults>
</SimulationOutput>

The RunResult consist out of the following parts:

RunStatistics

This section contains the RandomSeed and general statistics of the invocation.

Tag

Description

RandomSeed

Random seed used for this invocation

VisibilityDistance

Visibility distance of the world

StopReason

Displays the reason why the simulation stopped. Currently only due to time out.

StopTime

Currently not used and set to -1

EgoAccident

Flag which shows whether the ego agent was involved in an accident

TotalDistanceTraveled

Total traveled distance of all agents

EgoDistanceTraveled

Total traveled distance of ego vehicle only

Events

This section contains all events that occurred during the invocation. Event can either be triggered by an EventDetector, Manipulator or by certain vehicle components. They are used to track special behavior in the simulation.

Attribute

Description

Time

Time in ms when the event occurred.

Source

Name of the component which created the event. OpenSCENARIO, if triggered by an OpenSCENARIO condition.

Name

In case of an OpenSCENARIO event, a path expression Story/Act/Sequence/Maneuver/Event using the names of the corresponding tags as described in the OpenSCENARIO file. Otherwise determined by the triggering component.

TriggeringEntities

List of entity IDs triggering this event.

AffectedEntities

List of entity IDs affected by this event.

Parameters

List of generic key/value string pairs.

Important Events

Some of the Events are logged for other applications to use, for instance the openPASS Visualizer. These Events can be identified by their Name and are listed below:

Attribute

Description

TrafficLight

TrafficLight Events are triggered once a TrafficLightController changes the state of it’s Trafficlight bulbs. Parameters include the traffic_light_state and the opendrive_id which links to a dynamic signal in the scenery configuration. traffic_light_state is going to be used by the openPASS Visualizer. The initial state of the ThreeSignalsTrafficLight is posted too.

The change in the active component of longitudinal and/or lateral control is also logged as event with name “ActiveComponentChange”.

Agents

This section contains some information on how each agent is configured.

Attribute

Description

Id

Identification number

AgentTypeGroupName

The agent category. This can either be Ego, Scenario or Common

AgentTypeName

Name of the agent profile

VehicleModelType

Name of the vehicle model

DriverProfileName

Name of the driver profile

<Agent Id="0"
       AgentTypeGroupName="Ego"
       AgentTypeName="MiddleClassCarAgent"
       VehicleModelType="car_bmw_7"
       DriverProfileName="Regular">

The VehicleAttributes tag lists basic information of the vehicle parameters.

Attribute

Description

Width

Width of the vehicles bounding box

Length

Length of the vehicles bounding box

Height

Height of the vehicles bounding box

LongitudinalPivotOffset

Distance between center of the bounding box and reference point of the agent. Positive distances are closer to the front of the vehicle. Negative distances are closer to the rear of the vehicle.

The Components tag lists all instantiated components from the SystemProfile.

Attribute

Description

Type

Type of the component

Profile

Name of the component profile

The Sensors tag lists all sensors of the agent and their parameters.

Attribute

Description

Name

Name of the component

Model

Type of the sensor

MountingPosLongitudinal

Relative longitudinal position of the sensor in relation to the agent

MountingPosLateral

Relative lateral position of the sensor in relation to the agent

MountingPosHeight

Relative height of the sensor in relation to the agent

OrientationPitch

Pitch rotation of the sensor in relation to the agent

OrientationYaw

Yaw rotation of the sensor in relation to the agent

OpeningAngleH

Horizontal opening angle of the sensor

OpeningAngleV

Vertical opening angle of the sensor

DetectionRange

Range how far the sensor reaches in m

Note

Calculation of visual obstruction is currently supported only by the Geometric2D sensor. See SystemConfigBlueprint for configuration.

<Sensor Name="Geometric2DFront"
        Model="Geometric2D"
        MountingPosLongitudinal="0"
        MountingPosLateral="0"
        MountingPosHeight="0.5"
        OrientationPitch="0"
        OrientationYaw="0"
        OpeningAngleH="20"
        OpeningAngleV="-999"
        DetectionRange="300" />

Cyclics

If the parameter LoggingCyclicsToCsv is set to false, this section contains all logged parameters of the agents per time step. The tag header defines the layout of all samples. Each entry of the header consists of the agent id and the name of the logged value, in the form ID:SAMPLE_NAME. A sample contains all information for one specific time step. If an agent does not exist at the current time step, the value is ‘ ‘.

Example

In this example exist two agents with the ids 0 and 1. Two time steps were being tracked, one at 0 seconds and one at 100 ms. Agent 0 has a constant velocity of 30 m/s and starts at the position X: 100 and Y: 50. Agent 1 has a initial velocity of 40 m/s and starts at the position X: 200 and Y: 50.

<Cyclics>
    <Header>00:VelocityEgo, 00:XPosition, 00:YPosition, 00:YawAngle, 01:VelocityEgo, 01:XPosition, 01:YPosition, 01:YawAngle</Header>
    <Samples>
        <Sample Time="0">30, 100, 50, 0, 40, 200, 50, 0</Sample>
        <Sample Time="100">30, 103, 50, 0, 40, 204, 50, 0</Sample>
    </Samples>
</Cyclics>

If the parameter LoggingCyclicsToCsv is set to true, this section only contains a reference to the corresponding CSV file, e.g.

<Cyclics>
    <CyclicsFile>Cyclics_Run_000.csv</CyclicsFile>
</Cyclics>

For each invocation, the file number of the filename is incremented, starting with Cyclics_Run_000.csv.

Cyclics_Run_###

This file contains the samples as described in :ref:’observationlog_cyclics’, but with the time step as leading column.

Example

Timestep

00:VelocityEgo

00:XPosition

00:YPosition

00:YawAngle

01:VelocityEgo

01:XPosition

01:YPosition

01:YawAngle

0

30

100

50

0

40

200

50

0

100

30

103

50

0

40

204

50

0