Skip to content

Add new LogicalDetectionData message to SensorData #440

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 3, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ set(OSI_PROTO_FILES
osi_roadmarking.proto
osi_lane.proto
osi_featuredata.proto
osi_logicaldetectiondata.proto
osi_object.proto
osi_occupant.proto
osi_sensordata.proto
Expand Down
3 changes: 3 additions & 0 deletions doc/osifiles.rst
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ OSI common provides the building blocks for the OSI field messages.
`osi_featuredata.proto`_
---------------------------------

`osi_logicaldetectiondata.proto`_
---------------------------------

`osi_object.proto`_
---------------------------------

Expand Down
231 changes: 231 additions & 0 deletions osi_logicaldetectiondata.proto
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
syntax = "proto2";

option optimize_for = SPEED;

import "osi_version.proto";
import "osi_common.proto";

package osi3;

//
// \brief Processed data from one or multiple sensors as a list of logical detections.
// Logical detections are derived from sensor detections in a logical model through processing steps like fusion filtering, tracking etc.
//
// All information is given with respect to the reference frame of the logical/virtual sensor
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car) in Cartesian coordinates.
//
message LogicalDetectionData
{
// The interface version used by the sender (i.e. the simulation
// environment).
//
optional InterfaceVersion version = 1;

// Header attributes of fused detections from multiple sensors and sensor types.
//
optional LogicalDetectionDataHeader header = 2;

// logical detections consisting of transformed (and potentially fused) detections from one or multiple sensors and sensor types.
// Logical detections are given with respect to the reference frame of the logical/virtual sensor
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car)
//
// \note OSI uses singular instead of plural for repeated field names.
//
repeated LogicalDetection logical_detection = 3;
}

//
// \brief The header attributes of each sensor's logical detections list.
//
message LogicalDetectionDataHeader
{
// Time stamp at which the transformation and optional fusion was finished in the global synchronized time.
//
// \note See \c SensorData::timestamp and
// \c SensorData::last_measurement_time for detailed discussions on the
// semantics of time-related fields.
//
optional Timestamp logical_detection_time = 1;

// Data Qualifier expresses to what extent the content of this event can be
// relied on.
//
optional DataQualifier data_qualifier = 2;

// The current number of valid detections in the logical detections list.
//
// \note This value has to be set if the list contains invalid logical detections.
//
// \rules
// is_greater_than_or_equal_to: 0
// \endrules
//
optional uint32 number_of_valid_logical_detections = 3;

// The ID(s) of the sensor(s) that produced the detections for transformation
// and - in case of multiple sensors - fusion into logical detections.
//
repeated Identifier sensor_id = 4;

// Data qualifier communicates the overall availability of the
// interface.
//
enum DataQualifier
{
// Unknown (must not be used in ground truth).
//
DATA_QUALIFIER_UNKNOWN = 0;

// Other (unspecified but known).
//
DATA_QUALIFIER_OTHER = 1;

// Data is available.
//
DATA_QUALIFIER_AVAILABLE = 2;

// Reduced data is available.
//
DATA_QUALIFIER_AVAILABLE_REDUCED = 3;

// Data is not available.
//
DATA_QUALIFIER_NOT_AVAILABLE = 4;

// Sensor is blind.
//
DATA_QUALIFIER_BLINDNESS = 5;

// Sensor temporary available.
//
DATA_QUALIFIER_TEMPORARY_AVAILABLE = 6;

// Sensor invalid.
//
DATA_QUALIFIER_INVALID = 7;
}
}

//
// \brief A logical detection that could be based on multiple sensors and sensor types.
//
message LogicalDetection
{
// Existence probability of the logical detection
//
// \note Use as confidence measure where a low value means less confidence
// and a high value indicates strong confidence.
//
// \rules
// is_greater_than_or_equal_to: 0
// is_less_than_or_equal_to: 1
// \endrules
//
optional double existence_probability = 1;

// ID of the detected object this logical detection is associated to.
//
// \note ID = MAX(uint64) indicates no reference to an object.
//
// \rules
// refers_to: DetectedObject
// \endrules
//
optional Identifier object_id = 2;

// Measured position of the logical detection given in cartesian coordinates in the
// host vehicle coordinate system.
//
// Unit: m
//
optional Vector3d position = 3;

// Root mean squared error of the measured position of the logical detection.
//
optional Vector3d position_rmse = 4;

// Velocity of the logical detection given in cartesian coordinates in the
// host vehicle coordinate system.
//
// Unit: m/s
//
optional Vector3d velocity = 5;

// Root mean squared error of the logical detection's velocity.
//
// Unit: m/s
//
// \rules
// is_greater_than_or_equal_to: 0
// \endrules
//
optional Vector3d velocity_rmse = 6;

// Intensity or equivalent value of the logical detection's echo.
//
// Unit: %
//
// \rules
// is_greater_than_or_equal_to: 0
// is_less_than_or_equal_to: 100
// \endrules
//
optional double intensity = 7;

// The signal to noise ratio (SNR) of the logical detection.
//
// Unit: dB
//
optional double snr = 8;

// Describes the possibility whether more than one object may have led to
// this logical detection.
//
// \rules
// is_greater_than_or_equal_to: 0
// is_less_than_or_equal_to: 1
// \endrules
//
optional double point_target_probability = 9;

// The ID(s) of the sensor(s) that produced the detection(s) for transformation
// and - in case of multiple sensors - fusion into the single logical detection.
//
// \note One logical detection can originate from multiple sensors.
//
repeated Identifier sensor_id = 10;

// Basic classification of the logical detection.
//
optional LogicalDetectionClassification classification = 11;
}

// Definition of basic logical detection classifications.
//
enum LogicalDetectionClassification
{
// Logical detection is unknown (must not be used in ground truth).
//
LOGICAL_DETECTION_CLASSIFICATION_UNKNOWN = 0;

// Other (unspecified but known) logical detection.
//
LOGICAL_DETECTION_CLASSIFICATION_OTHER = 1;

// Invalid logical detection, not to be used for object tracking, of unspecified
// type (none of the other types applies).
//
LOGICAL_DETECTION_CLASSIFICATION_INVALID = 2;

// Clutter (noise, spray, rain, fog etc.).
//
LOGICAL_DETECTION_CLASSIFICATION_CLUTTER = 3;

// Over-drivable (ground etc.).
//
LOGICAL_DETECTION_CLASSIFICATION_OVERDRIVABLE = 4;

// Under-drivable (sign gantry etc.).
//
LOGICAL_DETECTION_CLASSIFICATION_UNDERDRIVABLE = 5;
}
18 changes: 17 additions & 1 deletion osi_sensordata.proto
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import "osi_detectedobject.proto";
import "osi_detectedoccupant.proto";
import "osi_sensorview.proto";
import "osi_featuredata.proto";
import "osi_logicaldetectiondata.proto";

package osi3;

Expand Down Expand Up @@ -92,7 +93,7 @@ message DetectedEntityHeader
//
// Sensor fusion models can consolidate multiple \c SensorData interfaces into
// one consolidated \c SensorData interface. This can happen either in
// seperate logical models, consuming and producing \c SensorData interfaces,
// separate logical models, consuming and producing \c SensorData interfaces,
// or it can happen as part of a combined sensor/logical model, that consumes
// \c SensorView interfaces and directly produces one consolidated \c SensorData
// output.
Expand Down Expand Up @@ -297,4 +298,19 @@ message SensorData
// object hypothesis and tracking.
//
optional FeatureData feature_data = 26;

// Logical detection data interface.
//
// Logical detection data are provided by a transformation
// (and optional sensor fusion)
// performed by a sensor model or a logical model
// that fuses multiple sensors and/or sensor types
// into a single reference frame
// of the so called logical/virtual sensor.
// Therefore, all information is given with respect to
// the reference frame of the logical/virtual sensor
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car)
// in cartesian coordinates.
//
optional LogicalDetectionData logical_detection_data = 27;
}
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ def find_protoc():
'osi_trafficcommand.proto',
'osi_roadmarking.proto',
'osi_featuredata.proto',
'osi_logicaldetectiondata.proto',
'osi_object.proto',
'osi_occupant.proto',
'osi_lane.proto',
Expand Down