Skip to content

Commit 9b47674

Browse files
authored
Merge pull request #718 from OpenSimulationInterface/feature/pp/visualization_interface_PR2
Introduce StreamingUpdate Interface
2 parents 35d3f6a + 9f9536f commit 9b47674

File tree

7 files changed

+101
-1
lines changed

7 files changed

+101
-1
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ set(OSI_PROTO_FILES
9494
osi_sensorviewconfiguration.proto
9595
osi_sensorspecific.proto
9696
osi_sensorview.proto
97+
osi_streamingupdate.proto
9798
)
9899

99100
protobuf_generate_cpp(PROTO_SRCS PROTO_HEADERS ${OSI_PROTO_FILES})

doc/architecture/architecture_overview.adoc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,12 @@ The `HostVehicleData` interface describes the measured internal states of a traf
3636
OSI currently provides only limited support for data structures that describe measured internal states of traffic participants.
3737
One example would be the `MotionRequest` interface that can be used to communicate the results of the behavior planning to the dynamic model.
3838

39+
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).
40+
41+
[#fig-interface-streaming]
42+
.Interface for partial ground truth updates
43+
image::{images_open_simulation_interface}/osi-streaming-principle.png[1100]
44+
3945
NOTE: OSI uses singular instead of plural for `repeated` field names.
4046

4147
NOTE: All fields in an interface are set to `optional`.
@@ -48,4 +54,4 @@ However, this does not mean that it is optional to fill the field.
4854
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.
4955

5056
NOTE: All field numbers equal to or greater than 10000 are available for user-specific extensions via custom fields.
51-
No future evolution of OSI will therefore use field numbers equal to or greater than 10000.
57+
No future evolution of OSI will therefore use field numbers equal to or greater than 10000.
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
ifndef::include-only-once[]
2+
:root-path: ../
3+
include::{root-path}_config.adoc[]
4+
endif::[]
5+
= Streaming update
6+
7+
The `StreamingUpdate` message provides an interface to transmit a subset of ground truth and/or vehicle internal data.
8+
This interface mainly addresses applications with low latency requirements and no need for highly consistent and complete data, e.g. visualization applications.
9+
Static and/or non-relevant objects can be omitted as required for the specific use case.
10+
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.
20.5 KB
Loading

doc/open-simulation-interface_user_guide.adoc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ include::./architecture/motion_request.adoc[leveloffset=+3]
2929

3030
include::./architecture/traffic_update.adoc[leveloffset=+3]
3131

32+
include::./architecture/streaming_update.adoc[leveloffset=+3]
33+
3234
=== Model types
3335

3436
include::./architecture/environmental_effect_model.adoc[leveloffset=+3]

osi_streamingupdate.proto

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
syntax = "proto2";
2+
3+
option optimize_for = SPEED;
4+
5+
import "osi_version.proto";
6+
import "osi_common.proto";
7+
import "osi_environment.proto";
8+
import "osi_object.proto";
9+
import "osi_trafficsign.proto";
10+
import "osi_trafficlight.proto";
11+
import "osi_hostvehicledata.proto";
12+
13+
package osi3;
14+
15+
//
16+
// \brief The streaming update interface enables simulation entities to send
17+
// partial updates to other modules that favor performance (especially latency)
18+
// over data completeness/consistency (e.g. visualization applications).
19+
//
20+
// Static and/or non-relevant objects can be omitted as required for the
21+
// specific use case. Adding an object's unique id to the repeated field \c
22+
// obsolete_id indicates that it will no longer be updated from then on.
23+
//
24+
// \note The receiver of partial streaming update messages can only rely on the
25+
// most up-to-date information at the corresponding timestamp. E.g. omitting
26+
// objects does not indicate static behaviour but it may be sufficient for the
27+
// use case to update certain objects at a later point in time.
28+
//
29+
message StreamingUpdate
30+
{
31+
// The interface version used by the sender.
32+
//
33+
optional InterfaceVersion version = 1;
34+
35+
// The data timestamp where the information of contained objects is calculated.
36+
//
37+
// Zero time is arbitrary but must be identical for all messages.
38+
// Zero time does not need to coincide with the UNIX epoch.
39+
// Recommended is the starting time point of the simulation.
40+
//
41+
optional Timestamp timestamp = 2;
42+
43+
// The list of stationary objects (excluding traffic signs and traffic
44+
// lights).
45+
//
46+
repeated StationaryObject stationary_object_update = 3;
47+
48+
// The list of moving objects.
49+
//
50+
repeated MovingObject moving_object_update = 4;
51+
52+
// The list of traffic signs.
53+
//
54+
repeated TrafficSign traffic_sign_update = 5;
55+
56+
// The list of traffic lights.
57+
//
58+
repeated TrafficLight traffic_light_update = 6;
59+
60+
// Conditions of the environment.
61+
//
62+
optional EnvironmentalConditions environmental_conditions_update = 7;
63+
64+
// Host vehicle data.
65+
//
66+
// Host vehicle data is data that the host vehicle knows about itself,
67+
// e.g. from location sensors, internal sensors and ECU bus data, etc.,
68+
// that is made available to sensors as input.
69+
//
70+
// The ID inside this message allows an association to moving object data.
71+
//
72+
repeated HostVehicleData host_vehicle_data_update = 8;
73+
74+
// Entities that will no longer be updated, because they are considered
75+
// obsolete by the sender.
76+
//
77+
// \note IDs are globally unique.
78+
//
79+
repeated Identifier obsolete_id = 9;
80+
}

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ def find_protoc():
6969
'osi_sensorspecific.proto',
7070
'osi_sensorview.proto',
7171
'osi_sensorviewconfiguration.proto',
72+
'osi_streamingupdate.proto',
7273
'osi_trafficcommand.proto',
7374
'osi_trafficcommandupdate.proto',
7475
'osi_trafficlight.proto',

0 commit comments

Comments
 (0)