Skip to content

Commit 04db86e

Browse files
PhRosenbergerpmai
authored andcommitted
Add new LogicalDetectionData message to SensorData
LogicalDetectionData provides feature data in the virtual cartesian sensor coordinate system and is therefore suitable for fusion at the feature data level, whereas FeatureData is not. Signed-off-by: Pierre R. Mai <[email protected]> Signed-off-by: Rosenberger, Philipp <[email protected]>
1 parent aa79afe commit 04db86e

File tree

5 files changed

+250
-1
lines changed

5 files changed

+250
-1
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ set(OSI_PROTO_FILES
7474
osi_roadmarking.proto
7575
osi_lane.proto
7676
osi_featuredata.proto
77+
osi_logicaldetectiondata.proto
7778
osi_object.proto
7879
osi_occupant.proto
7980
osi_sensordata.proto

doc/osifiles.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@ OSI common provides the building blocks for the OSI field messages.
5656
`osi_featuredata.proto`_
5757
---------------------------------
5858

59+
`osi_logicaldetectiondata.proto`_
60+
---------------------------------
61+
5962
`osi_object.proto`_
6063
---------------------------------
6164

osi_logicaldetectiondata.proto

Lines changed: 228 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,228 @@
1+
syntax = "proto2";
2+
3+
option optimize_for = SPEED;
4+
5+
import "osi_version.proto";
6+
import "osi_common.proto";
7+
8+
package osi3;
9+
10+
//
11+
// \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.
12+
//
13+
// All information is given with respect to the reference frame of the logical/virtual sensor
14+
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car) in Cartesian coordinates.
15+
//
16+
message LogicalDetectionData
17+
{
18+
// The interface version used by the sender (i.e. the simulation
19+
// environment).
20+
//
21+
optional InterfaceVersion version = 1;
22+
23+
// Header attributes of fused detections from multiple sensors and sensor types.
24+
//
25+
optional LogicalDetectionDataHeader header = 2;
26+
27+
// logical detections consisting of transformed (and potentially fused) detections from one or multiple sensors and sensor types.
28+
// Logical detections are given with respect to the reference frame of the logical/virtual sensor
29+
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car)
30+
//
31+
// \note OSI uses singular instead of plural for repeated field names.
32+
//
33+
repeated LogicalDetection logical_detection = 3;
34+
}
35+
36+
//
37+
// \brief The header attributes of the list of logical detections.
38+
//
39+
message LogicalDetectionDataHeader
40+
{
41+
// Time stamp at which the transformation and optional fusion was finished in the global synchronized time.
42+
//
43+
// \note See \c SensorData::timestamp and
44+
// \c SensorData::last_measurement_time for detailed discussions on the
45+
// semantics of time-related fields.
46+
//
47+
optional Timestamp logical_detection_time = 1;
48+
49+
// Data Qualifier expresses to what extent the content of this event can be
50+
// relied on.
51+
//
52+
optional DataQualifier data_qualifier = 2;
53+
54+
// The current number of valid detections in the logical detections list.
55+
//
56+
// \note This value has to be set if the list contains invalid logical detections.
57+
//
58+
// \rules
59+
// is_greater_than_or_equal_to: 0
60+
// \endrules
61+
//
62+
optional uint32 number_of_valid_logical_detections = 3;
63+
64+
// The IDs of the sensors that have been fused and result in the listed logical detections.
65+
//
66+
repeated Identifier sensor_id = 4;
67+
68+
// Data qualifier communicates the overall availability of the
69+
// interface.
70+
//
71+
enum DataQualifier
72+
{
73+
// Unknown (must not be used in ground truth).
74+
//
75+
DATA_QUALIFIER_UNKNOWN = 0;
76+
77+
// Other (unspecified but known).
78+
//
79+
DATA_QUALIFIER_OTHER = 1;
80+
81+
// Data is available.
82+
//
83+
DATA_QUALIFIER_AVAILABLE = 2;
84+
85+
// Reduced data is available.
86+
//
87+
DATA_QUALIFIER_AVAILABLE_REDUCED = 3;
88+
89+
// Data is not available.
90+
//
91+
DATA_QUALIFIER_NOT_AVAILABLE = 4;
92+
93+
// Sensor is blind.
94+
//
95+
DATA_QUALIFIER_BLINDNESS = 5;
96+
97+
// Sensor temporary available.
98+
//
99+
DATA_QUALIFIER_TEMPORARY_AVAILABLE = 6;
100+
101+
// Sensor invalid.
102+
//
103+
DATA_QUALIFIER_INVALID = 7;
104+
}
105+
}
106+
107+
//
108+
// \brief A logical detection that could be based on multiple sensors and sensor types.
109+
//
110+
message LogicalDetection
111+
{
112+
// Existence probability of the logical detection
113+
//
114+
// \note Use as confidence measure where a low value means less confidence
115+
// and a high value indicates strong confidence.
116+
//
117+
// \rules
118+
// is_greater_than_or_equal_to: 0
119+
// is_less_than_or_equal_to: 1
120+
// \endrules
121+
//
122+
optional double existence_probability = 1;
123+
124+
// ID of the detected object this logical detection is associated to.
125+
//
126+
// \note ID = MAX(uint64) indicates no reference to an object.
127+
//
128+
// \rules
129+
// refers_to: DetectedObject
130+
// \endrules
131+
//
132+
optional Identifier object_id = 2;
133+
134+
// Measured position of the logical detection given in cartesian coordinates in the
135+
// host vehicle coordinate system.
136+
//
137+
// Unit: m
138+
//
139+
optional Vector3d position = 3;
140+
141+
// Root mean squared error of the measured position of the logical detection.
142+
//
143+
optional Vector3d position_rmse = 4;
144+
145+
// Velocity of the logical detection given in cartesian coordinates in the
146+
// host vehicle coordinate system.
147+
//
148+
// Unit: m/s
149+
//
150+
optional Vector3d velocity = 5;
151+
152+
// Root mean squared error of the logical detection's velocity.
153+
//
154+
// Unit: m/s
155+
//
156+
// \rules
157+
// is_greater_than_or_equal_to: 0
158+
// \endrules
159+
//
160+
optional Vector3d velocity_rmse = 6;
161+
162+
// Intensity or equivalent value of the logical detection's echo.
163+
//
164+
// Unit: %
165+
//
166+
// \rules
167+
// is_greater_than_or_equal_to: 0
168+
// is_less_than_or_equal_to: 100
169+
// \endrules
170+
//
171+
optional double intensity = 7;
172+
173+
// The signal to noise ratio (SNR) of the logical detection.
174+
//
175+
// Unit: dB
176+
//
177+
optional double snr = 8;
178+
179+
// Describes the possibility whether more than one object may have led to
180+
// this logical detection.
181+
//
182+
// \rules
183+
// is_greater_than_or_equal_to: 0
184+
// is_less_than_or_equal_to: 1
185+
// \endrules
186+
//
187+
optional double point_target_probability = 9;
188+
189+
// The IDs of the sensors that have been fused to the single logical detection.
190+
//
191+
// \note one logical detection can originate from multiple sensors.
192+
//
193+
repeated Identifier sensor_id = 10;
194+
195+
// Basic classification of the logical detection.
196+
//
197+
optional LogicalDetectionClassification classification = 11;
198+
}
199+
200+
// Definition of basic logical detection classifications.
201+
//
202+
enum LogicalDetectionClassification
203+
{
204+
// Logical detection is unknown (must not be used in ground truth).
205+
//
206+
LOGICAL_DETECTION_CLASSIFICATION_UNKNOWN = 0;
207+
208+
// Other (unspecified but known) logical detection.
209+
//
210+
LOGICAL_DETECTION_CLASSIFICATION_OTHER = 1;
211+
212+
// Invalid logical detection, not to be used for object tracking, of unspecified
213+
// type (none of the other types applies).
214+
//
215+
LOGICAL_DETECTION_CLASSIFICATION_INVALID = 2;
216+
217+
// Clutter (noise, spray, rain, fog etc.).
218+
//
219+
LOGICAL_DETECTION_CLASSIFICATION_CLUTTER = 3;
220+
221+
// Over-drivable (ground etc.).
222+
//
223+
LOGICAL_DETECTION_CLASSIFICATION_OVERDRIVABLE = 4;
224+
225+
// Under-drivable (sign gantry etc.).
226+
//
227+
LOGICAL_DETECTION_CLASSIFICATION_UNDERDRIVABLE = 5;
228+
}

osi_sensordata.proto

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import "osi_detectedobject.proto";
1212
import "osi_detectedoccupant.proto";
1313
import "osi_sensorview.proto";
1414
import "osi_featuredata.proto";
15+
import "osi_logicaldetectiondata.proto";
1516

1617
package osi3;
1718

@@ -92,7 +93,7 @@ message DetectedEntityHeader
9293
//
9394
// Sensor fusion models can consolidate multiple \c SensorData interfaces into
9495
// one consolidated \c SensorData interface. This can happen either in
95-
// seperate logical models, consuming and producing \c SensorData interfaces,
96+
// separate logical models, consuming and producing \c SensorData interfaces,
9697
// or it can happen as part of a combined sensor/logical model, that consumes
9798
// \c SensorView interfaces and directly produces one consolidated \c SensorData
9899
// output.
@@ -297,4 +298,19 @@ message SensorData
297298
// object hypothesis and tracking.
298299
//
299300
optional FeatureData feature_data = 26;
301+
302+
// Logical detection data interface.
303+
//
304+
// Logical detection data are provided by a transformation
305+
// (and optional sensor fusion)
306+
// performed by a sensor model or a logical Model
307+
// that fuses multiple sensors and/or sensor types
308+
// into a single reference frame
309+
// of the so called logical/virtual sensor.
310+
// Therefore, all information is given with respect to
311+
// the reference frame of the logical/virtual sensor
312+
// \c SensorView::mounting_position (e.g. center of rear axle of the ego car)
313+
// in cartesian coordinates.
314+
//
315+
optional LogicalDetectionData logical_detection_data = 27;
300316
}

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ def find_protoc():
6363
'osi_trafficcommand.proto',
6464
'osi_roadmarking.proto',
6565
'osi_featuredata.proto',
66+
'osi_logicaldetectiondata.proto',
6667
'osi_object.proto',
6768
'osi_occupant.proto',
6869
'osi_lane.proto',

0 commit comments

Comments
 (0)