From bfe355ebdc5c32f274d549b54fe5215617efb2df Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Thu, 23 Feb 2023 13:58:42 +0100 Subject: [PATCH 1/9] Add initial consolidated osi_streaming.proto Interface and message for streaming updates, as discussed and revised in the workshops. Signed-off-by: Thomas Nader --- osi_streaming.proto | 81 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 osi_streaming.proto diff --git a/osi_streaming.proto b/osi_streaming.proto new file mode 100644 index 000000000..41352a36f --- /dev/null +++ b/osi_streaming.proto @@ -0,0 +1,81 @@ +syntax = "proto2"; +option optimize_for = SPEED; +import "osi_version.proto"; +import "osi_common.proto"; +import "osi_object.proto"; +import "osi_trafficlight.proto"; +import "osi_hostvehicledata.proto"; + +package osi3; + +// +// \brief This message is about partial updates from simulation entities. +// +// First time message is being sent: +// +// ToDo +// +// Afterwards: +// As streaming update this message contains objects of which at least one +// property has changed. Unchanged properties are nevertheless sent. +// +// +// +message Streaming +{ + // The interface version used by the sender (traffic participant model). + // + optional InterfaceVersion version = 1; + + // The data timestamp where the information of contained objects is calculated. + // + // Zero time is arbitrary but must be identical for all messages. + // Zero time does not need to coincide with the UNIX epoch. + // Recommended is the starting time point of the simulation. + // + optional Timestamp timestamp = 2; + + // The list of stationary objects (excluding traffic signs and traffic + // lights). + // + repeated StationaryObject stationary_object_update = 4; + + // \note It is not expected that static fields are populated. If they + // are, they may be ignored by the receiver of this message, for example, dimensions, + // or vehicle category. All dynamic fields should be populated where known, + // for example, velocity, light states, or future trajectory. + // + // ToDo: how to handle trailers? + // \note The field is repeated because it is possible to have a trailer attached to + // a vehicle, see MovingObject::VehicleClassification::has_trailer and + // MovingObject::VehicleClassification::trailer_id. + // + repeated MovingObject moving_object_update = 5; + + // The list of traffic signs. + // + repeated TrafficSign traffic_sign = 6; + + // The list of traffic lights. + // + repeated TrafficLight traffic_light_update = 7; + + // Conditions of the environment. + // + optional EnvironmentalConditions environmental_conditions_update = 12; + + // Host vehicle data. + // + // Host vehicle data is data that the host vehicle knows about itself, + // e.g. from location sensors, internal sensors and ECU bus data, etc., + // that is made available to sensors as input. + // + repeated HostVehicleData host_vehicle_data_update = 29; + + // Entities that will no longer be updated, because they are considered + // obsolete by the sender. + // + // Note: IDs are globally unique. + // + repeated Identifier obsolete_id = 30; +} From 2f4d22d00e8b2793df549b35dac772599f539379 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 16 May 2023 16:29:00 +0200 Subject: [PATCH 2/9] Add architecture png for osi-streaming Signed-off-by: Thomas Nader Signed-off-by: Pierre R. Mai --- doc/images/osi-streaming-principle.PNG | Bin 0 -> 9723 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/images/osi-streaming-principle.PNG diff --git a/doc/images/osi-streaming-principle.PNG b/doc/images/osi-streaming-principle.PNG new file mode 100644 index 0000000000000000000000000000000000000000..9da547025153dc1279db1a13d186f45dc72da23c GIT binary patch literal 9723 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 MGSqyhZX5Ey0C+@3f&c&j literal 0 HcmV?d00001 From 5324e14595e5ef0450788bb88ec8b5d4754034e5 Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Tue, 16 May 2023 16:35:20 +0200 Subject: [PATCH 3/9] Update architecture_overview.adoc by osi-streaming Signed-off-by: Thomas Nader Signed-off-by: Pierre R. Mai --- doc/architecture/architecture_overview.adoc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/doc/architecture/architecture_overview.adoc b/doc/architecture/architecture_overview.adoc index 4fadeb8eb..7a980de7e 100644 --- a/doc/architecture/architecture_overview.adoc +++ b/doc/architecture/architecture_overview.adoc @@ -32,6 +32,10 @@ The following figure shows a more advanced use case for traffic participants. .Traffic participant with sensor models, AD function, and dynamic model image::{images_open_simulation_interface}/osi-traffic-participant-advanced.png[1100] +[#fig-interface-streaming] +.Interface for Streaming +image::{images_open_simulation_interface}/osi-streaming-principle.png[1100] + The `HostVehicleData` interface describes the measured internal states of a traffic participant. OSI currently provides only limited support for data structures that describe measured internal states of traffic participants. One example would be the `MotionRequest` interface that can be used to communicate the results of the behavior planning to the dynamic model. @@ -48,4 +52,4 @@ However, this does not mean that it is optional to fill the field. For the purpose of providing a complete interface, all existing fields should be set, unless not setting a field carries a specific meaning, as indicated in the accompanying comment. NOTE: All field numbers equal to or greater than 10000 are available for user-specific extensions via custom fields. -No future evolution of OSI will therefore use field numbers equal to or greater than 10000. \ No newline at end of file +No future evolution of OSI will therefore use field numbers equal to or greater than 10000. From f2c837f7f1efe6f15983a9cfcaebbc4d2ccb70a0 Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Mon, 22 May 2023 11:33:40 +0200 Subject: [PATCH 4/9] Add StreamingUpdate description Signed-off-by: Thomas Sedlmayer --- ...reaming.proto => osi_streamingupdate.proto | 37 ++++++++----------- 1 file changed, 15 insertions(+), 22 deletions(-) rename osi_streaming.proto => osi_streamingupdate.proto (60%) diff --git a/osi_streaming.proto b/osi_streamingupdate.proto similarity index 60% rename from osi_streaming.proto rename to osi_streamingupdate.proto index 41352a36f..9b4b8bd94 100644 --- a/osi_streaming.proto +++ b/osi_streamingupdate.proto @@ -1,5 +1,7 @@ syntax = "proto2"; + option optimize_for = SPEED; + import "osi_version.proto"; import "osi_common.proto"; import "osi_object.proto"; @@ -9,21 +11,20 @@ import "osi_hostvehicledata.proto"; package osi3; // -// \brief This message is about partial updates from simulation entities. -// -// First time message is being sent: +// \brief The streaming update interface enables simulation entities to send +// partial updates to other modules that favor performance (especially latency) +// over data completeness/consistency (e.g. visualization applications). // -// ToDo +// Static and/or non-relevant objects can be omitted as required for the +// specific use case. Adding an object's unique id to the repeated field \c +// obsolete_id indicates that it will no longer be updated from then on. // -// Afterwards: -// As streaming update this message contains objects of which at least one -// property has changed. Unchanged properties are nevertheless sent. +// \note The receiver of partial streaming update messages can only rely on the +// most up-to-date information at the corresponding timestamp. // -// -// -message Streaming +message StreamingUpdate { - // The interface version used by the sender (traffic participant model). + // The interface version used by the sender. // optional InterfaceVersion version = 1; @@ -40,21 +41,13 @@ message Streaming // repeated StationaryObject stationary_object_update = 4; - // \note It is not expected that static fields are populated. If they - // are, they may be ignored by the receiver of this message, for example, dimensions, - // or vehicle category. All dynamic fields should be populated where known, - // for example, velocity, light states, or future trajectory. - // - // ToDo: how to handle trailers? - // \note The field is repeated because it is possible to have a trailer attached to - // a vehicle, see MovingObject::VehicleClassification::has_trailer and - // MovingObject::VehicleClassification::trailer_id. + // The list of moving objects. // repeated MovingObject moving_object_update = 5; // The list of traffic signs. // - repeated TrafficSign traffic_sign = 6; + repeated TrafficSign traffic_sign_update = 6; // The list of traffic lights. // @@ -75,7 +68,7 @@ message Streaming // Entities that will no longer be updated, because they are considered // obsolete by the sender. // - // Note: IDs are globally unique. + // \note IDs are globally unique. // repeated Identifier obsolete_id = 30; } From 103b87349af952e6aaeb1f7db828179a789cefaa Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Mon, 22 May 2023 16:32:10 +0200 Subject: [PATCH 5/9] Add missing imports and order field numbers Signed-off-by: Thomas Sedlmayer --- osi_streamingupdate.proto | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/osi_streamingupdate.proto b/osi_streamingupdate.proto index 9b4b8bd94..a1301bb80 100644 --- a/osi_streamingupdate.proto +++ b/osi_streamingupdate.proto @@ -4,7 +4,9 @@ option optimize_for = SPEED; import "osi_version.proto"; import "osi_common.proto"; +import "osi_environment.proto"; import "osi_object.proto"; +import "osi_trafficsign.proto"; import "osi_trafficlight.proto"; import "osi_hostvehicledata.proto"; @@ -39,23 +41,23 @@ message StreamingUpdate // The list of stationary objects (excluding traffic signs and traffic // lights). // - repeated StationaryObject stationary_object_update = 4; + repeated StationaryObject stationary_object_update = 3; // The list of moving objects. // - repeated MovingObject moving_object_update = 5; + repeated MovingObject moving_object_update = 4; // The list of traffic signs. // - repeated TrafficSign traffic_sign_update = 6; + repeated TrafficSign traffic_sign_update = 5; // The list of traffic lights. // - repeated TrafficLight traffic_light_update = 7; + repeated TrafficLight traffic_light_update = 6; // Conditions of the environment. // - optional EnvironmentalConditions environmental_conditions_update = 12; + optional EnvironmentalConditions environmental_conditions_update = 7; // Host vehicle data. // @@ -63,12 +65,12 @@ message StreamingUpdate // e.g. from location sensors, internal sensors and ECU bus data, etc., // that is made available to sensors as input. // - repeated HostVehicleData host_vehicle_data_update = 29; + repeated HostVehicleData host_vehicle_data_update = 8; // Entities that will no longer be updated, because they are considered // obsolete by the sender. // // \note IDs are globally unique. // - repeated Identifier obsolete_id = 30; + repeated Identifier obsolete_id = 9; } From 31272a2f97941e2d15bd0eee0eec376c7b3d59df Mon Sep 17 00:00:00 2001 From: Thomas Nader Date: Mon, 12 Jun 2023 18:24:33 +0200 Subject: [PATCH 6/9] Clarify host vehicle data ID handling Add description to associate through Host Vehicle Data ID. Signed-off-by: Thomas Nader --- osi_streamingupdate.proto | 2 ++ 1 file changed, 2 insertions(+) diff --git a/osi_streamingupdate.proto b/osi_streamingupdate.proto index a1301bb80..acfa0839e 100644 --- a/osi_streamingupdate.proto +++ b/osi_streamingupdate.proto @@ -65,6 +65,8 @@ message StreamingUpdate // e.g. from location sensors, internal sensors and ECU bus data, etc., // that is made available to sensors as input. // + // The ID inside this message allows an association to moving object data. + // repeated HostVehicleData host_vehicle_data_update = 8; // Entities that will no longer be updated, because they are considered From 05b75311ce9ebe6f481e765ac590a4cf5f1af6d5 Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Tue, 13 Jun 2023 14:11:40 +0200 Subject: [PATCH 7/9] Add documentation for StreamingUpdate - Align figure - Add architecture information - Add section to top-level interface Signed-off-by: Thomas Sedlmayer --- doc/architecture/architecture_overview.adoc | 10 ++++++---- doc/architecture/streaming_update.adoc | 10 ++++++++++ doc/images/osi-streaming-principle.PNG | Bin 9723 -> 21033 bytes doc/open-simulation-interface_user_guide.adoc | 2 ++ 4 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 doc/architecture/streaming_update.adoc diff --git a/doc/architecture/architecture_overview.adoc b/doc/architecture/architecture_overview.adoc index 7a980de7e..6ef5b76ee 100644 --- a/doc/architecture/architecture_overview.adoc +++ b/doc/architecture/architecture_overview.adoc @@ -32,14 +32,16 @@ The following figure shows a more advanced use case for traffic participants. .Traffic participant with sensor models, AD function, and dynamic model image::{images_open_simulation_interface}/osi-traffic-participant-advanced.png[1100] -[#fig-interface-streaming] -.Interface for Streaming -image::{images_open_simulation_interface}/osi-streaming-principle.png[1100] - The `HostVehicleData` interface describes the measured internal states of a traffic participant. OSI currently provides only limited support for data structures that describe measured internal states of traffic participants. One example would be the `MotionRequest` interface that can be used to communicate the results of the behavior planning to the dynamic model. +The `StreamingUpdate` interface enables partial ground truth updates to modules that favor performance, especially latency, over data completeness/consistency (e.g. visualization applications) or that do not require complete data in the first place (e.g. logging applications). + +[#fig-interface-streaming] +.Interface for partial ground truth updates +image::{images_open_simulation_interface}/osi-streaming-principle.png[1100] + NOTE: OSI uses singular instead of plural for `repeated` field names. NOTE: All fields in an interface are set to `optional`. diff --git a/doc/architecture/streaming_update.adoc b/doc/architecture/streaming_update.adoc new file mode 100644 index 000000000..1bf661948 --- /dev/null +++ b/doc/architecture/streaming_update.adoc @@ -0,0 +1,10 @@ +ifndef::include-only-once[] +:root-path: ../ +include::{root-path}_config.adoc[] +endif::[] += Streaming update + +The `StreamingUpdate` message provides an interface to transmit a subset of ground truth and/or vehicle internal data. +This interface mainly addresses applications with low latency requirements and no need for highly consistent and complete data, e.g. visualization applications. +Static and/or non-relevant objects can be omitted as required for the specific use case. +Note that the receiver of partial updates can only rely on the most up-to-date information at the corresponding timestamp. E.g. omitting objects does not indicate static behaviour but it may be sufficient for the use case to update certain objects at a later point in time. \ No newline at end of file diff --git a/doc/images/osi-streaming-principle.PNG b/doc/images/osi-streaming-principle.PNG index 9da547025153dc1279db1a13d186f45dc72da23c..4ed874b57288dc55b6450caa0ac9e9a193805204 100644 GIT binary patch literal 21033 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 HN@xNA&Xj*; literal 9723 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 MGSqyhZX5Ey0C+@3f&c&j diff --git a/doc/open-simulation-interface_user_guide.adoc b/doc/open-simulation-interface_user_guide.adoc index 90b288a6f..b9864441e 100644 --- a/doc/open-simulation-interface_user_guide.adoc +++ b/doc/open-simulation-interface_user_guide.adoc @@ -29,6 +29,8 @@ include::./architecture/motion_request.adoc[leveloffset=+3] include::./architecture/traffic_update.adoc[leveloffset=+3] +include::./architecture/streaming_update.adoc[leveloffset=+3] + === Model types include::./architecture/environmental_effect_model.adoc[leveloffset=+3] From b6a8c4afa234a3a2404534ea15b307d027b7106c Mon Sep 17 00:00:00 2001 From: Thomas Sedlmayer Date: Thu, 15 Jun 2023 11:25:05 +0200 Subject: [PATCH 8/9] Add example to the note of StreamingUpdate Signed-off-by: Thomas Sedlmayer --- osi_streamingupdate.proto | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/osi_streamingupdate.proto b/osi_streamingupdate.proto index acfa0839e..b1ad1121a 100644 --- a/osi_streamingupdate.proto +++ b/osi_streamingupdate.proto @@ -22,7 +22,9 @@ package osi3; // obsolete_id indicates that it will no longer be updated from then on. // // \note The receiver of partial streaming update messages can only rely on the -// most up-to-date information at the corresponding timestamp. +// most up-to-date information at the corresponding timestamp. E.g. omitting +// objects does not indicate static behaviour but it may be sufficient for the +// use case to update certain objects at a later point in time. // message StreamingUpdate { From 9f9536fc77afedb2ed660153fe60bce29e10d3a0 Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Wed, 21 Jun 2023 12:25:54 +0200 Subject: [PATCH 9/9] Add to build infrastructure Signed-off-by: Pierre R. Mai --- CMakeLists.txt | 1 + setup.py | 1 + 2 files changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8cb07187e..dc99bbadb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -94,6 +94,7 @@ set(OSI_PROTO_FILES osi_sensorviewconfiguration.proto osi_sensorspecific.proto osi_sensorview.proto + osi_streamingupdate.proto ) protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES}) diff --git a/setup.py b/setup.py index 22b179acc..435207aeb 100644 --- a/setup.py +++ b/setup.py @@ -69,6 +69,7 @@ def find_protoc(): 'osi_sensorspecific.proto', 'osi_sensorview.proto', 'osi_sensorviewconfiguration.proto', + 'osi_streamingupdate.proto', 'osi_trafficcommand.proto', 'osi_trafficcommandupdate.proto', 'osi_trafficlight.proto',