Skip to content

Add obstruction fields to SensorView #548

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

Closed
wants to merge 4 commits into from
Closed
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 doc/images/OSI_Obstruction_visibility.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 46 additions & 2 deletions osi_sensorspecific.proto
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

First question that comes to my mind (as a non-native speaker) is: Why is it named obstruction and not occlusion?

{
// 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.
Expand All @@ -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;
}

//
Expand All @@ -25,8 +63,9 @@ message RadarSpecificObjectData
//
message LidarSpecificObjectData
{
// currently no fields.
// Obstruction level for this object from this sensor
//
optional Obstruction obstruction = 1;
}

//
Expand All @@ -35,8 +74,9 @@ message LidarSpecificObjectData
//
message CameraSpecificObjectData
{
// currently no fields.
// Obstruction level for this object from this sensor
//
optional Obstruction obstruction = 1;
}

//
Expand Down Expand Up @@ -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.
Expand Down
55 changes: 55 additions & 0 deletions osi_sensorview.proto
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,43 @@ 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
{
// 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;

// 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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would probably be useful to specify more precisely that all objects are projected, for example, onto a sphere or cylinder with a radius of 1 m from the eye point of 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;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would ask for the absolute projected area in sqm of the projection onto the Z-plane (e.g. sphere or cylinder at 1 m).


//
// \brief Definition of the radar sensor view.
//
Expand All @@ -192,6 +229,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.
//
Expand Down Expand Up @@ -265,6 +308,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.
//
Expand Down Expand Up @@ -331,6 +380,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;
}

//
Expand Down