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 |
LoggingCyclicsToCsv |
Bool |
If |
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
*
in a LoggingGroup_<NAME>
entry.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.
|
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 |