diff --git a/osi_common.proto b/osi_common.proto index 7ab5852ec..9a2c2868b 100644 --- a/osi_common.proto +++ b/osi_common.proto @@ -215,6 +215,68 @@ message Identifier optional uint64 value = 1; } +// \brief References to external objects. +// +// The external reference is an optional recommendation to refer to objects defined outside of OSI. +// This could be other OpenX standards, 3rd-party standards or user-defined objects. +// +// \note ExternalReference is optional and can be left empty. +// +message ExternalReference +{ + // The source of the external references. + // + // Defines the original source of an object as uniquely identifiable reference. + // In case of using \c GroundTruth::map_reference or + // \c GroundTruth::model_reference, the reference can be left empty. + // If not otherwise required, an URI is suggested. The syntax should follow + // \link https://tools.ietf.org/html/rfc3986 RFC 3986\endlink. + // + // + optional string reference = 1; + + // The type of the external references. + // + // Mandatory value describing the type of the original source. + // + // For OpenX/ASAM standards it is specified as follows: + // - net.asam.opendrive + // - net.asam.openscenario + // + // For third-party standards and user-defined objects, + // reverse domain name notation with lower-case type field + // is recommended to guarantee unique and interoperable identification. + // + optional string type = 2; + + // The external identifier reference value. + // + // The repeated string is chosen as a common description of the external + // identifier, because a variety of identificatier types could be + // involved . + // + // For example, referencing a unique lane in OpenDRIVE requires the + // following identifiers: + // * RoadId: String + // * S-Value of LaneSection: Double + // * LaneId: Int + // + // \note The detailed description of the identifiers and how they are + // used for referencing external objects is given in the individual + // messages where the external identifier is used. + // + // \see EnvironmentalConditions::source_reference + // \see Lane::source_reference + // \see LaneBoundary::source_reference + // \see StationaryObject::source_reference + // \see MovingObject::source_reference + // \see RoadMarking::source_reference + // \see TrafficLight::source_reference + // \see TrafficSign::source_reference + // + repeated string identifier = 3; +} + // // \brief Specifies the mounting position of a sensor. // @@ -517,4 +579,3 @@ message WavelengthData // optional double samples_number = 3; } - diff --git a/osi_environment.proto b/osi_environment.proto index be5d830a8..5aafe2cac 100644 --- a/osi_environment.proto +++ b/osi_environment.proto @@ -2,6 +2,8 @@ syntax = "proto2"; option optimize_for = SPEED; +import "osi_common.proto"; + package osi3; // @@ -85,6 +87,19 @@ message EnvironmentalConditions // Description of the fog. // optional Fog fog = 7; + + // Optional external reference to the environmental condition sources. + // + // \note For OpenDRIVE and OpenSECNARIO there is no direct counterpart. + // + // \note For non-ASAM standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated because one object may be derived + // from more than one origin source, for example, from a scenario file + // and from sensors. + // + repeated ExternalReference source_reference = 9; // Definition of discretized precipitation states according to [1]. // (I = Intensity of precipitation in mm per hour mm/h) diff --git a/osi_lane.proto b/osi_lane.proto index 3fed17271..05e4bbcdf 100644 --- a/osi_lane.proto +++ b/osi_lane.proto @@ -50,6 +50,30 @@ message Lane // optional Classification classification = 2; + // Optional external reference to the lane source. + // + // The external reference points to the source of the lane, if it is derived + // from one or more objects or external references. + // + // For example, to reference a lane defined in an OpenDRIVE map + // the items should be set as follows: + // * reference = URI to map, can remain empty if identical with definiton + // in \c GroundTruth::map_reference + // * type = "net.asam.opendrive" + // * identifier[0] = id of t_road + // * identifier[1] = s of t_road_lanes_laneSection + // * identifier[2] = id of t_road_lanes_laneSection_left_lane, + // t_road_lanes_laneSection_right_lane + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated, because one lane segment may be + // derived from more than one origin segment. Multiple sources + // may be added as reference as well, for example, a map and sensors. + // + repeated ExternalReference source_reference = 3; + // // \brief \c Classification of a lane. // @@ -724,6 +748,20 @@ message LaneBoundary // The classification of the lane boundary. // optional Classification classification = 3; + + // Optional external reference to the lane boundary source. + // + // \note For OpenDRIVE, there is no direct possibility to reference the + // RoadMark, as there is no unique identifier in this sub-object. + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated because one object may be derived + // from more than one origin source, for example, from a scenario file + // and from sensors. + // + repeated ExternalReference source_reference = 4; // // \brief A single point of a lane boundary. diff --git a/osi_object.proto b/osi_object.proto index b44066f0f..1578f7bf3 100644 --- a/osi_object.proto +++ b/osi_object.proto @@ -40,6 +40,41 @@ message StationaryObject // optional string model_reference = 4; + // External reference to the stationary-object source. + // + // The external reference points to the source of a stationary object, if it + // is derived from an external sources like OpenDRIVE or OpenSCENARIO. + // + // For example, to reference an object defined in an OpenDRIVE map + // the items should be set as follows: + // * reference = URI to map, can remain empty if identical with definiton + // in \c GroundTruth::map_reference + // * type = "net.asam.opendrive" + // * identifier[0] = "object" for t_road_objects_object and + // "bridge" for t_road_objects_bridge + // * identifier[1] = id of t_road_objects_object or t_road_objects_bridge + // + // For example, to reference OpenSCENARIO entities of the type MiscObject, + // which describe partly stationary objects, the items should be set as + // follows: + // * reference = URI to the OpenSCENARIO File + // * type = "net.asam.openscenario" + // * identifier[0] = Entity-Type ("MiscObject") + // * identifier[1] = name of MiscObject in Entity + // + // \note The following rule, described in OpenDRIVE, also applies: + // * Objects derived from OpenSCENARIO shall not be mixed with objects + // described in OpenDRIVE. + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated because one object may be derived + // from more than one origin source, for example, from a scenario file + // and from sensors. + // + repeated ExternalReference source_reference = 5; + // // \brief Classification data for a stationary object. // @@ -359,6 +394,30 @@ message MovingObject // optional MovingObjectClassification moving_object_classification = 9; + // Optional external reference to the moving-object source + // + // The external reference points to the source of an moving object, if it + // is derived from an external sources like OpenSCENARIO. + // + // For example, to reference OpenSCENARIO entities of the type Vehicle or + // Pedestrian, which describe moving objects, the items should be set as + // follows: + // * reference = URI to the OpenSCENARIO File + // * type = "net.asam.openscenario" + // * identifier[0] = Entity-Type ("Vehicle" or "Pedestrian") + // * identifier[1] = name of Vehicle/Pedestrian in Entity + // + // \todo OpenSCENARIO currently does not provide an animal type. + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated because one object may be derived + // from more than one origin source, for example, from a scenario file + // and from sensors. + // + repeated ExternalReference source_reference = 10; + // Definition of object types. // enum Type diff --git a/osi_occupant.proto b/osi_occupant.proto index 131e109fa..8b7f6ea83 100644 --- a/osi_occupant.proto +++ b/osi_occupant.proto @@ -23,6 +23,19 @@ message Occupant // optional Classification classification = 2; + // External reference to the occupant source. + // + // \note For OpenDRIVE and OpenSCENARIO there is no direct counterpart. + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated because one object may be derived + // from more than one origin source, for example, from a scenario file + // and from sensors. + // + repeated ExternalReference source_reference = 3; + // // \brief Information regarding the classification of the occupant. // diff --git a/osi_roadmarking.proto b/osi_roadmarking.proto index 7afbf4f77..a2acd3716 100644 --- a/osi_roadmarking.proto +++ b/osi_roadmarking.proto @@ -55,6 +55,33 @@ message RoadMarking // optional Classification classification = 3; + // Optional external reference to the road-marking source. + // + // The external reference points to the source of the surface marking, if it + // is derived from one or more objects or external references. An example + // here is the reference to the signal defined in a OpenDRIVE map. + // + // For example, to reference a signal defined in an OpenDRIVE map + // the items should be set as follows: + // * reference = URI to map, can remain empty if identical with definiton + // in \c GroundTruth::map_reference + // * type = "net.asam.opendrive" + // * identifier[0] = id of t_road_signals_signal + // + // \note With OpenDRIVE, surface markings can also be defined as objects. + // In this case, the associated object is usually referenced within + // OpenDRIVE using the reference t_road_signals_signal_reference. + // An additional reference to the object is therefore not necessary. + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated, because one lane segment may be + // derived from more than one origin segment. Multiple sources + // may be added as reference as well, for example, a map and sensors. + // + repeated ExternalReference source_reference = 4; + // // \brief \c Classification data for a road surface marking. // diff --git a/osi_trafficlight.proto b/osi_trafficlight.proto index 0aef80e7c..d88528cf7 100644 --- a/osi_trafficlight.proto +++ b/osi_trafficlight.proto @@ -42,6 +42,27 @@ message TrafficLight // optional string model_reference = 4; + // Optional external reference to the traffic light source. + // + // The external reference points to the source of the traffic light, if it + // is derived from one or more objects or external references. + // + // For example, to reference a signal defined in an OpenDRIVE map + // the items should be set as follows: + // * reference = URI to map, can remain empty if identical with definition + // in \c GroundTruth::map_reference + // * type = "net.asam.opendrive" + // * identifier[0] = id of t_road_signals_signal + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note The value has to be repeated, because one lane segment may be + // derived from more than one origin segment. Multiple sources + // may be added as reference as well, for example, a map and sensors. + // + repeated ExternalReference source_reference = 5; + // // \brief \c Classification data for a traffic light. // diff --git a/osi_trafficsign.proto b/osi_trafficsign.proto index 3c9ac589b..999510696 100644 --- a/osi_trafficsign.proto +++ b/osi_trafficsign.proto @@ -156,6 +156,32 @@ message TrafficSign // repeated SupplementarySign supplementary_sign = 3; + + // Optional external reference to the traffic sign source. + // + // The external reference point to the source of the traffic sign, if it is + // derived from one or more objects or external references. + // + // For example, to reference a signal defined in an OpenDRIVE map + // the items should be set as follows: + // * reference = URI to map, can remain empty if identical with definition + // in \c GroundTruth::map_reference + // * type = "net.asam.opendrive" + // * identifier[0] = id of t_road_signals_signal + // + // \note For non-ASAM Standards, it is implementation-specific how + // source_reference is resolved. + // + // \note If an individual identification of MainSign and SupplementarySign + // is necessary, this should be done via multiple individual + // entries of this source_reference. + // + // \note The value has to be repeated, because one lane segment may be + // derived from more than one origin segment. Multiple sources + // may be added as reference as well, for example, a map and sensors. + // + repeated ExternalReference source_reference = 4; + // // \brief Main sign of the traffic sign. //