# Sensor_Driver

This module collects and distributes data from the WorldInterface and AgentInterface concerning the own vehicle, traffic rule and geometry information and surrounding object. It creates a data struct to store the world and agent data of the own vehicle, traffic rule and geometry information, other objects and surrounding vehicles.

## Components of the module

The information collected by SensorDriver consists of generally four different data structs:

- OwnVehicleStates includes all information about the vehicle of the driver (e.g. speed, acceleration, …)

- TrafficRuleInformation includes information about the static environment (e.g. traffic signs, lane markings, …)

- GeometryInformation includes information about surrounding lanes that describe its geometric features

- SurroundingObjects includes information about objects surrounding the own agent as seen by the driver

### OwnVehicleStates

The Information of the own vehicle are based on the following general struct OwnVehicleInformation :

Variable | Type | Unit | Description | Default value
--- | --- | --- | --- | ---
absoluteVelocity | Double | m/s | Velocity of agent | -999
acceleration | Double | m/s² | Acceleration of agent | -999
lateralPosition | Double | m | t-coordinate | -999
heading | Double | rad | Heading relative to lane | -999
steeringWheelAngle | Double | rad | Angle of the steering wheel | -999
distanceToLaneBoundaryLeft | Double | m | Distance between the left front point and the left boundary of the lane it is in | -999
distanceToLaneBoundaryRight | Double | m | Distance between the right front point and the right boundary of the lane it is in | -999
collision | Boolean |  | Whether this agent has collided with another object | false

### TrafficRuleInformation

The struct TrafficRuleInformation contains infrastructure information of surrounding lanes that are used to establish traffic rules.

The general structure is shown in the following table.

Variable | Description
--- | ---
laneLeft | Data about the lane to left (in driving direction) of the mainLane
laneEgo | Data about the lane the where the middle of the front of the agent is (i.e. mainLane)
laneRight | Data about the lane to right (in driving direction) of the mainLane
laneMarkingsLeft | List of lane markings on the left side of mainLane
laneMarkingsRight | List of lane markings on the right side of mainLane
laneMarkingsLeftOfLeftLane | List of lane markings on the left side of lane to the left
laneMarkingsRightOfRightLane | List of lane markings on the right side of lane to the right

The basis for the respective variables is the following general struct LaneInformationTrafficRules, which is used to trasport data of a lane concerning traffic rules as seen by the driver.

Variable | Description
--- | ---
trafficSigns | Vector of all traffic signs valid for this lane inside the visibility distance
trafficLights | Vector of all traffic lights valid for this lane inside the visibility distance

### GeometryInformation

The struct GeometryInformation contains infrastructure information of surrounding lanes that describe its geometric features.

The general structure is shown in the following table.

Variable | Description
--- | ---
visibilityDistance | Current maximum visibility distance as specified by the world
laneLeft | Data about the lane to left (in driving direction) of the mainLane
laneEgo | Data about the lane the where the middle of the front of the agent is (i.e. mainLane)
laneRight | Data about the lane to right (in driving direction) of the mainLane

The basis for the respective variables is the following general struct LaneInformationGeometry, which is used to transport data of a lane concerning its geometric features as seen by the driver.

Variable | Type | Unit | Description | Default value
--- | --- | --- | --- | ---
exists | Boolean |  | Whether there is a lane on this position | false
curvature | Double | 1/m | Curvature at current s position (default if not existing) | -999
width | Double | m | Width at current s position (default if not existing) | -999
distanceToEndOfLane | Double | m | Distance from current position to the end of the lane or infinity if the end is farther away than the visibility distance | -999

### SurroundingObjects

This struct SurroundingObjects contains data of the objects surrounding the own agent as seen by the driver. For all cases mainLaneId is used as own lane.

Variable | Description
--- | ---
objectFront | Next object in the same lane
objectRear | Closest object behind the agent in the same lane
objectFrontLeft | Next object in the lane to the left
objectRearLeft | Closest object behind the agent in the lane to the left
objectFrontRight | Next object in the lane to the right
objectRearRight | Closest object behind the agent in the lane to the right

The basis for the respective variables is the following general struct ObjectInformation, which is used to transport data of an object as seen by the driver:

Variable | Type | Unit | Description | Default value
--- | --- | --- | --- | ---
id | Integer |  | Id of the object | -1 (not existing)
exist | Boolean |  | False if there is no object in this position | false
isStatic | Boolean |  | True if stationary object, false if agent | false
absoluteVelocity | Double | m/s | Absolute velocity of the agent | -999 (object is not an agent)
acceleration | Double | m/s² | Acceleration of the agent | -999 (object is not an agent)
heading | Double | rad | Heading relative to the street | -999 (not existing)
length | Double | m | Length of object | -999 (not existing)
width | Double | m | Width of object | -999 (not existing)
height | Double | m | Heigth of object | -999 (not existing)
relativeLongitudinalDistance | Double | m | Relative distance along the road (i.e. in direction s) between own agent and object | -999 (not existing)
relativeLateralDistance | Double | m | Relative distance at right angle to the road (i.e in direction t) between own agent and object | -999 (not existing)