From fdb87d19383917fe931958b4c5e21a8e6e964e99 Mon Sep 17 00:00:00 2001 From: Caspar de Haes Date: Fri, 2 Jul 2021 17:34:35 +0100 Subject: [PATCH 1/4] Add obstruction fields to SensorView --- osi_sensorview.proto | 69 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) diff --git a/osi_sensorview.proto b/osi_sensorview.proto index e6331cb76..b42c95782 100644 --- a/osi_sensorview.proto +++ b/osi_sensorview.proto @@ -172,6 +172,57 @@ message GenericSensorView optional GenericSensorViewConfiguration view_configuration = 1; } +// +// \brief Obstruction values for a given object and sensor. +// +// For a given object in the ground truth data, and for a particular sensor, how +// obstructed is that object from the point of view of that sensor. +// +message Obstruction +{ + // \brief ID of the object in ground truth data + // + // This field is required as without it the entire message ships + // no useful information. + // + optional Identifier ground_truth_id = 1; + + // \brief Level of occlusion for the object. + // + // The occlusion level represents a fraction of object volume exposed to the + // sensor assuming the sensor had a full 360 degree field of view (so ignoring + // any truncation of that object). + // + // The possibly occluding objects might be moving ones (other vehicles, pedestrians + // etc) as well as stationary ones (like buildings, trees etc). + // + // Value in range between 0.0 (not occluded) and 1.0 (fully occluded). + // + optional double occlusion = 2; + + // \brief Level of truncation for the object. + // + // The truncation level represents a fraction of object volume remaining + // outside of sensor's field of view. The truncation value is independent of + // the occlusion value, so something can be fully occluded but not truncated. + // + // The value is in range between 0.0 (fully within FOV) and 1.0 (fully truncated). + // + optional double truncation = 3; + + // \brief Total visible proportion for the object. + // + // This value combines both truncation and occlusion to provide a indicate how + // visible an object is from the view of a particular sensor. + // + // \note This is not the sum of the occlusion and truncation values as the + // two values are independent, so they may overlap, or they may be distinct. + // + // The value is in the range 0.0 (fully hidden) and 1.0 (fully visible). + // + optional double visible = 4; +} + // // \brief Definition of the radar sensor view. // @@ -192,6 +243,12 @@ message RadarSensorView // repeated Reflection reflection = 2; + // Obstruction level for the objects + // + // \note OSI uses singular instead of plural for repeated field names. + // + repeated Obstruction obstruction = 3; + // // \brief Definition of the radar reflection. // @@ -265,6 +322,12 @@ message LidarSensorView // repeated Reflection reflection = 2; + // Obstruction level for the objects + // + // \note OSI uses singular instead of plural for repeated field names. + // + repeated Obstruction obstruction = 3; + // // \brief Definition of the lidar reflection. // @@ -331,6 +394,12 @@ message CameraSensorView // camera sensor input configuration. // optional bytes image_data = 2; + + // Obstruction level for the objects + // + // \note OSI uses singular instead of plural for repeated field names. + // + repeated Obstruction obstruction = 3; } // From e43bf9c17b3c0901bf84e89da49da56f84fd4230 Mon Sep 17 00:00:00 2001 From: Caspar de Haes Date: Fri, 2 Jul 2021 17:41:02 +0100 Subject: [PATCH 2/4] Remove redundant \brief instances --- osi_sensorview.proto | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/osi_sensorview.proto b/osi_sensorview.proto index b42c95782..37f7575cc 100644 --- a/osi_sensorview.proto +++ b/osi_sensorview.proto @@ -180,14 +180,14 @@ message GenericSensorView // message Obstruction { - // \brief ID of the object in ground truth data + // ID of the object in ground truth data // // This field is required as without it the entire message ships // no useful information. // optional Identifier ground_truth_id = 1; - // \brief Level of occlusion for the object. + // Level of occlusion for the object. // // The occlusion level represents a fraction of object volume exposed to the // sensor assuming the sensor had a full 360 degree field of view (so ignoring @@ -200,7 +200,7 @@ message Obstruction // optional double occlusion = 2; - // \brief Level of truncation for the object. + // Level of truncation for the object. // // The truncation level represents a fraction of object volume remaining // outside of sensor's field of view. The truncation value is independent of @@ -210,7 +210,7 @@ message Obstruction // optional double truncation = 3; - // \brief Total visible proportion for the object. + // Total visible proportion for the object. // // This value combines both truncation and occlusion to provide a indicate how // visible an object is from the view of a particular sensor. From ff6cf32cf8824adbd9a0c2137c43d417cec773ef Mon Sep 17 00:00:00 2001 From: Caspar de Haes Date: Thu, 8 Jul 2021 18:16:08 +0100 Subject: [PATCH 3/4] Update to only include visibility --- doc/images/OSI_Obstruction_visibility.svg | 1 + osi_sensorview.proto | 42 ++++++++--------------- 2 files changed, 15 insertions(+), 28 deletions(-) create mode 100644 doc/images/OSI_Obstruction_visibility.svg diff --git a/doc/images/OSI_Obstruction_visibility.svg b/doc/images/OSI_Obstruction_visibility.svg new file mode 100644 index 000000000..498716183 --- /dev/null +++ b/doc/images/OSI_Obstruction_visibility.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/osi_sensorview.proto b/osi_sensorview.proto index 37f7575cc..ecd43aedf 100644 --- a/osi_sensorview.proto +++ b/osi_sensorview.proto @@ -187,40 +187,26 @@ message Obstruction // optional Identifier ground_truth_id = 1; - // Level of occlusion for the object. - // - // The occlusion level represents a fraction of object volume exposed to the - // sensor assuming the sensor had a full 360 degree field of view (so ignoring - // any truncation of that object). - // - // The possibly occluding objects might be moving ones (other vehicles, pedestrians - // etc) as well as stationary ones (like buildings, trees etc). - // - // Value in range between 0.0 (not occluded) and 1.0 (fully occluded). - // - optional double occlusion = 2; - - // Level of truncation for the object. - // - // The truncation level represents a fraction of object volume remaining - // outside of sensor's field of view. The truncation value is independent of - // the occlusion value, so something can be fully occluded but not truncated. - // - // The value is in range between 0.0 (fully within FOV) and 1.0 (fully truncated). - // - optional double truncation = 3; - // Total visible proportion for the object. // - // This value combines both truncation and occlusion to provide a indicate how - // visible an object is from the view of a particular sensor. + // This value considers various factors that would stop an object from being + // visible from the point of view of this sensor. It should include + // truncation (outside of the field of view of the sensor), distance (beyond + // the range of the sensor), and occlusion (how hidden is the object by + // other objects in the scene). // - // \note This is not the sum of the occlusion and truncation values as the - // two values are independent, so they may overlap, or they may be distinct. + // Occlusion can be caused by both static objects (trees, buildings, etc.) + // and dynamic objects (cars, pedestrians, etc.). By convention + // semi-transparent surfaces (e.g. car windows) are considered opaque. + // + // \note The object is considered to be the 2D cross-section of the object + // as visible from the sensor. // // The value is in the range 0.0 (fully hidden) and 1.0 (fully visible). // - optional double visible = 4; + // \image html OSI_Obstruction_visibility.svg "Obstruction visibility" + // + optional double visibility = 2; } // From 3cc832f689817db87d7d50af983edca8b2efeef1 Mon Sep 17 00:00:00 2001 From: Caspar de Haes Date: Mon, 16 Aug 2021 17:57:03 +0100 Subject: [PATCH 4/4] Add a second alternative for obstruction Specifically having it inside the detected moving objects rather than the SensorView. --- osi_sensorspecific.proto | 48 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/osi_sensorspecific.proto b/osi_sensorspecific.proto index 48b3ca9af..41aac8e03 100644 --- a/osi_sensorspecific.proto +++ b/osi_sensorspecific.proto @@ -6,6 +6,40 @@ import "osi_common.proto"; package osi3; +// +// \brief Obstruction values for a given object and sensor. +// +// For a given detected moving object, and for a particular sensor, how +// obstructed is that object from the point of view of that sensor. +// +// \note The ID of the sensor in question is available from the parent +// SensorData.sensor_id field. The ID of the object is available from +// the parent DetectedMovingObject.DetectedItemHeader.ground_truth_id. +// +message Obstruction +{ + // Total visible proportion for the object. + // + // This value considers various factors that would stop an object from being + // visible from the point of view of this sensor. It should include + // truncation (outside of the field of view of the sensor), distance (beyond + // the range of the sensor), and occlusion (how hidden is the object by + // other objects in the scene). + // + // Occlusion can be caused by both static objects (trees, buildings, etc.) + // and dynamic objects (cars, pedestrians, etc.). By convention + // semi-transparent surfaces (e.g. car windows) are considered opaque. + // + // \note The object is considered to be the 2D cross-section of the object + // as visible from the sensor. + // + // The value is in the range 0.0 (fully hidden) and 1.0 (fully visible). + // + // \image html OSI_Obstruction_visibility.svg "Obstruction visibility" + // + optional double visibility = 2; +} + // // \brief Message encapsulates all data for detected objects that is specific to // radar sensors. @@ -17,6 +51,10 @@ message RadarSpecificObjectData // Unit: dB m^2 // optional double rcs = 1; + + // Obstruction level for this object from this sensor + // + optional Obstruction obstruction = 2; } // @@ -25,8 +63,9 @@ message RadarSpecificObjectData // message LidarSpecificObjectData { - // currently no fields. + // Obstruction level for this object from this sensor // + optional Obstruction obstruction = 1; } // @@ -35,8 +74,9 @@ message LidarSpecificObjectData // message CameraSpecificObjectData { - // currently no fields. + // Obstruction level for this object from this sensor // + optional Obstruction obstruction = 1; } // @@ -85,6 +125,10 @@ message UltrasonicSpecificObjectData // repeated Signalway signalway = 5; + // Obstruction level for this object from this sensor + // + optional Obstruction obstruction = 6; + // // This indicates if the object was calculated based on one or multiple // sensors.