diff --git a/doc/images/OSI_DetectedTrafficLight.svg b/doc/images/OSI_DetectedTrafficLight.svg
new file mode 100644
index 000000000..98f4d2757
--- /dev/null
+++ b/doc/images/OSI_DetectedTrafficLight.svg
@@ -0,0 +1,6799 @@
+
+
diff --git a/doc/images/OSI_USSensor.svg b/doc/images/OSI_USSensor.svg
new file mode 100644
index 000000000..627954dae
--- /dev/null
+++ b/doc/images/OSI_USSensor.svg
@@ -0,0 +1,1348 @@
+
+
diff --git a/doc/images/OSI_USSensor_direct.svg b/doc/images/OSI_USSensor_direct.svg
new file mode 100644
index 000000000..fb6c84027
--- /dev/null
+++ b/doc/images/OSI_USSensor_direct.svg
@@ -0,0 +1,1366 @@
+
+
diff --git a/doc/images/OSI_USSensor_indirect.svg b/doc/images/OSI_USSensor_indirect.svg
new file mode 100644
index 000000000..cd6f6853f
--- /dev/null
+++ b/doc/images/OSI_USSensor_indirect.svg
@@ -0,0 +1,1452 @@
+
+
diff --git a/osi_featuredata.proto b/osi_featuredata.proto
index 3db1a575c..7afe5053a 100644
--- a/osi_featuredata.proto
+++ b/osi_featuredata.proto
@@ -8,8 +8,8 @@ import "osi_common.proto";
package osi3;
//
-// \brief Interface for sensor data, in contrast to interpreted data after
-// object hypothesis and tracking.
+// \brief Interface for sensor data containing information without a history
+// in contrast to interpreted data after object hypothesis and tracking.
//
// All information regarding the environment is given with respect to the sensor
// coordinate system specified in \c SensorDetectionHeader::mounting_position.
@@ -35,6 +35,16 @@ message FeatureData
// \note OSI uses singular instead of plural for repeated field names.
//
repeated LidarDetectionData lidar_sensor = 3;
+
+ // Ultrasonic detections for multiple ultrasonic sensors (sensor fusion).
+ //
+ // \note OSI uses singular instead of plural for repeated field names.
+ //
+ // \note Required for ultrasonic sensors: Detections will be send by the
+ // emitting ultrasonic sensor, including all indirect detections received
+ // by neighbouring sensors.
+ //
+ repeated UltrasonicDetectionData ultrasonic_sensor = 4;
}
//
@@ -53,7 +63,7 @@ message SensorDetectionHeader
optional Timestamp measurement_time = 1;
// Monotonous counter to identify the exact cycle.
- // Generally the detection function is called periodic and
+ // In general the detection function is called periodically and
// \c #cycle_counter corresponds to the number of periods.
//
optional uint64 cycle_counter = 2;
@@ -104,14 +114,18 @@ message SensorDetectionHeader
//
optional uint32 number_of_valid_detections = 6;
- // The ID of the sensor at host vehicle's mounting_position.
+ // The ID of the sensor at host vehicle's \c #mounting_position.
//
// This ID can equal \c SensorData::sensor_id, if \c SensorData holds only
// data from one sensor/sensor model.
//
optional Identifier sensor_id = 7;
+ // The extended qualifier describes the reason (not the effect) why the
+ // event data qualifier, \c #data_qualifier, is reduced or not available.
//
+ optional ExtendedQualifier extended_qualifier = 8;
+
// Data qualifier communicates the overall availability of the
// interface.
//
@@ -144,6 +158,69 @@ message SensorDetectionHeader
// Sensor temporary available.
//
DATA_QUALIFIER_TEMPORARY_AVAILABLE = 6;
+
+ // Sensor invalid.
+ //
+ DATA_QUALIFIER_INVALID = 7;
+ }
+
+ // The extended qualifier describes the reason (not the effect) why the
+ // event data qualifier, \c #data_qualifier, is reduced or not available.
+ //
+ enum ExtendedQualifier
+ {
+ // Unknown (must not be used in ground truth).
+ //
+ EXTENDED_QUALIFIER_UNKNOWN = 0;
+
+ // Other (unspecified but known).
+ //
+ EXTENDED_QUALIFIER_OTHER = 1;
+
+ // Normal operation mode.
+ //
+ EXTENDED_QUALIFIER_NORMAL_OPERATION_MODE = 2;
+
+ // Power up or down.
+ //
+ EXTENDED_QUALIFIER_POWER_UP_OR_DOWN = 3;
+
+ // Sensor not calibrated.
+ //
+ EXTENDED_QUALIFIER_SENSOR_NOT_CALIBRATED = 4;
+
+ // Sensor blocked.
+ //
+ EXTENDED_QUALIFIER_SENSOR_BLOCKED = 5;
+
+ // Sensor misaligned.
+ //
+ EXTENDED_QUALIFIER_SENSOR_MISALIGNED = 6;
+
+ // Bad sensor environmental condition (e.g. Darkness for vision).
+ //
+ EXTENDED_QUALIFIER_BAD_SENSOR_ENVIRONMENTAL_CONDITION = 7;
+
+ // Reduced field of view.
+ //
+ EXTENDED_QUALIFIER_REDUCED_FIELD_OF_VIEW = 8;
+
+ // Input not available.
+ //
+ EXTENDED_QUALIFIER_INPUT_NOT_AVAILABLE = 9;
+
+ // Internal reason (e.g. an internal HW or SW error has occurred).
+ //
+ EXTENDED_QUALIFIER_INTERNAL_REASON = 10;
+
+ // External disturbance, sensor specific for front radar (e.g.
+ // Interference of different radar sensors).
+ //
+ EXTENDED_QUALIFIER_EXTERNAL_DISTURBANCE = 11;
+
+ // Beginning blockage, sensor specific for front radar.
+ //
+ EXTENDED_QUALIFIER_BEGINNING_BLOCKAGE = 12;
}
}
@@ -171,6 +248,8 @@ message RadarDetection
// Existence probability of the detection not based on history. Value does
// not depend on any past experience with similar detections.
//
+ // Range: [0.0, 1.0]
+ //
// \note Use as confidence measure where a low value means less confidence
// and a high value indicates strong confidence.
//
@@ -182,7 +261,7 @@ message RadarDetection
//
optional Identifier object_id = 2;
- // Measured position of the detection, given in spherical coordinates in the
+ // Measured position of the detection given in spherical coordinates in the
// sensor coordinate system.
//
optional Spherical3d position = 3;
@@ -218,6 +297,8 @@ message RadarDetection
// Describes the possibility whether more than one object may have led to
// this detection.
//
+ // Range: [0.0, 1.0]
+ //
optional double point_target_probability = 9;
// Ambiguity Information:
@@ -225,9 +306,10 @@ message RadarDetection
// indicated by an identical ambiguity ID.
//
// \note Unambiguous measurements have the ambiguity ID 0.
- // \note Multiple seperate detections from e.g. a large object do not
- // on their own necessarily create any ambiguity, i.e. they do not
- // usually share an an ambiguity ID. They can however be ambiguous
+ //
+ // \note Multiple seperate detections, from e.g. a large object, do not
+ // necessarily on their own create any ambiguity. Therefore they do not
+ // usually share an ambiguity ID. They can however be ambiguous
// with other detections.
//
optional Identifier ambiguity_id = 10;
@@ -261,6 +343,8 @@ message LidarDetection
// Existence probability of the detection not based on history. Value does
// not depend on any past experience with similar detections.
//
+ // Range: [0.0, 1.0]
+ //
// \note Used as confidence measure where a low value means less confidence
// and a high value indicates strong confidence.
//
@@ -272,7 +356,7 @@ message LidarDetection
//
optional Identifier object_id = 2;
- // Measured position of the detection, given in spherical coordinates in the
+ // Measured position of the detection given in spherical coordinates in the
// sensor coordinate system.
//
optional Spherical3d position = 3;
@@ -281,8 +365,8 @@ message LidarDetection
//
optional Spherical3d position_rmse = 4;
- // Height value, which is required when multiple scan points are vertically
- // clustered. Only vertical clustering is allowed (z-axis).
+ // The height value which is required when multiple scan points are
+ // vertically clustered. Only vertical clustering is allowed (z-axis).
//
// Unit: [m]
//
@@ -311,12 +395,168 @@ message LidarDetection
//
optional DetectionClassification classification = 9;
- // Lambertian reflectivity
+ // Lambertian reflectivity.
//
optional double reflectivity = 10;
}
//
+// \brief Specific header extension for ultrasonic sensors.
+//
+message UltrasonicDetectionSpecificHeader
+{
+ // Maximal range of the ultrasonic sensor.
+ //
+ // Unit: [m]
+ //
+ optional double max_range = 1;
+
+ // The current number of valid indirect detections in the detections list.
+ // The detections are measured by a virtual sensor (i.e. sender and
+ // receiver are different sensors).
+ //
+ // \note This value has to be set if the list contains invalid detections.
+ //
+ optional uint32 number_of_valid_indirect_detections = 2;
+}
+
+//
+// \brief Data from one ultrasonic sensor including a list of detections.
+// This list is generated by the sending ultrasonic sensor. Indirectly received
+// signals from other ultrasonic sensors are included in this message.
+//
+// Direct detections:
+//
+// Sending: Ultrasonic Sensor ID 1
+//
+// Receiving:
+// - Direct: Ultrasonic Sensor ID 1
+// - Indirect: Ultrasonic Sensor ID 2 and 3
+//
+// \image html OSI_USSensor.svg
+//
+// \note Direct detecions lies on circles with the sending sensor as centre.
+//
+message UltrasonicDetectionData
+{
+ // Header attributes of ultrasonic detection from one ultrasonic sensor.
+ //
+ optional SensorDetectionHeader header = 1;
+
+ // Additional header attributes of ultrasonic detection from one ultrasonic
+ // sensor.
+ //
+ optional UltrasonicDetectionSpecificHeader specific_header = 3;
+
+ // List of ultrasonic detections.
+ //
+ // \note OSI uses singular instead of plural for repeated field names.
+ //
+ repeated UltrasonicDetection detection = 2;
+
+ // List of ultrasonic indirect detections (sender and receiver sensors are
+ // not the same).
+ //
+ // \note OSI uses singular instead of plural for repeated field names.
+ //
+ repeated UltrasonicIndirectDetection indirect_detection = 4;
+}
+
+//
+// \brief Ultrasonic detection from the sensor (same sensor as sender and
+// receiver).
+//
+// Direct detections:
+//
+// Sending: Ultrasonic Sensor ID 1
+//
+// Receiving: Ultrasonic Sensor ID 1
+//
+// \image html OSI_USSensor_direct.svg
+//
+// \note Direct detecions lies on circles with the sensor as centre.
+//
+message UltrasonicDetection
+{
+ // Existence probability of the detection not based on history. Value does
+ // not depend on any past experience with similar detections.
+ //
+ // Range: [0.0, 1.0]
+ //
+ // \note Used as confidence measure where a low value means less confidence
+ // and a high value indicates strong confidence.
+ //
+ optional double existence_probability = 1;
+
+ // ID of the detected object this detection is associated to.
+ //
+ // \note ID = MAX(uint64) indicates no reference to an object.
+ //
+ optional Identifier object_id = 2;
+
+ // Measured distance (radius) of the detection.
+ //
+ // Unit: [m]
+ //
+ optional double distance = 3;
+}
+
+//
+// \brief Ultrasonic detection received by another ultrasonic sensor (different
+// sensors as sender and receiver).
+//
+// Indirect detections:
+//
+// Sending: Ultrasonic Sensor ID 1
+//
+// Receiving: Ultrasonic Sensor ID 2 and 3
+//
+// \image html OSI_USSensor_indirect.svg
+//
+// \note Indirect detecions lies on ellipses with the sending resp. receiving
+// sensor in the focal points.
+//
+message UltrasonicIndirectDetection
+{
+ // Existence probability of the detection not based on history. Value does
+ // not depend on any past experience with similar detections.
+ //
+ // Range: [0.0, 1.0]
+ //
+ // \note Used as confidence measure where a low value means less confidence
+ // and a high value indicates strong confidence.
+ //
+ optional double existence_probability = 1;
+
+ // ID of the detected object this detection is associated to.
+ //
+ // \note ID = MAX(uint64) indicates no reference to an object.
+ //
+ optional Identifier object_id = 2;
+
+ // First parameter b of an ellipsoid equation.
+ //
+ // Unit: [m]
+ //
+ optional double ellipsoid_radial = 3;
+
+ // Second parameter b of an ellipsoid equation.
+ //
+ // Unit: [m]
+ //
+ optional double ellipsoid_axial = 4;
+
+ // The ID of the sensor's receiver. Sender ID is stored in the header \c
+ // SensorDetectionHeader.
+ //
+ optional Identifier receiver_id = 5;
+
+ // The vector to the receiver's origin in sending ultrasonic sensor frame.
+ // The vector is also the direction of \c #ellipsoid_axial.
+ //
+ optional Vector3d receiver_origin = 6;
+}
+
// Definition of a basic detection classifications.
//
enum DetectionClassification
diff --git a/osi_sensorspecific.proto b/osi_sensorspecific.proto
index c6cad1d04..8d8121f5e 100644
--- a/osi_sensorspecific.proto
+++ b/osi_sensorspecific.proto
@@ -2,6 +2,8 @@ syntax = "proto2";
option optimize_for = SPEED;
+import "osi_common.proto";
+
package osi3;
//
@@ -43,6 +45,104 @@ message CameraSpecificObjectData
//
message UltrasonicSpecificObjectData
{
- // currently no fields.
+ // Maximum measured distance from one sensor which leads to the calculation
+ // of this object.
+ //
+ // Unit: [m]
+ //
+ optional double maximum_measurement_distance_sensor = 1;
+
+ // This value indicates the propability height for the classification in the
+ // calculated object.
+ //
+ // Unit: [%]
+ //
+ optional double probability = 2;
+
+ // This indicates if the detection was calculated based on one or multiple
+ // sensors.
+ //
+ optional TrilaterationStatus trilateration_status = 3;
+
+ // Describes the general moving direction of the detection.
+ //
+ optional Trend trend = 4;
+
+ // Ultrasonic signalway. Sender to receiver.
+ //
+ // \note This information can also be derived from the corresponding \c
+ // UltrasonicDetection. \c UltrasonicDetection refer to DetectedXXX by \c
+ // UltrasonicDetection::object_id.
+ //
+ repeated Signalway signalway = 5;
+
+ //
+ // This indicates if the object was calculated based on one or multiple
+ // sensors.
//
+ enum TrilaterationStatus
+ {
+ // Unknown (must not be used in ground truth).
+ //
+ TRILATERATION_STATUS_UNKNOWN = 0;
+
+ // Other (unspecified but known).
+ //
+ TRILATERATION_STATUS_OTHER = 1;
+
+ // No trilateration used.
+ //
+ TRILATERATION_STATUS_NOT_TRILATERATED = 2;
+
+ // Trilateration used.
+ //
+ TRILATERATION_STATUS_TRILATERATED = 3;
+ }
+
+ //
+ // Describes the general moving direction of the detection.
+ //
+ enum Trend
+ {
+ // Unknown (must not be used in ground truth).
+ //
+ TREND_UNKNOWN = 0;
+
+ // Other (unspecified but known).
+ //
+ TREND_OTHER = 1;
+
+ // Distance (object, sensor) is constant. The object has approached in
+ // the past before it was constant.
+ //
+ TREND_CONSTANT_APPROACHING = 2;
+
+ // Distance (object, sensor) is constant. The object has departed in the
+ // past before it was constant or there is no history.
+ //
+ TREND_CONSTANT = 3;
+
+ // Distance (object, sensor) is decreasing.
+ //
+ TREND_APPROACHING = 4;
+
+ // Distance (object, sensor) is increasing.
+ //
+ TREND_DEPARTING = 5;
+ }
+
+ //
+ // \brief Message encapsulates all data for detected objects that is
+ // specific to ultrasonic sensors.
+ //
+ message Signalway
+ {
+ // The ID of the ultrasonic sensor's sender.
+ //
+ optional Identifier sender_id = 1;
+
+ // The ID of the ultrasonic sensor's receiver.
+ //
+ optional Identifier receiver_id = 2;
+ }
}