diff --git a/doc/architecture/architecture_overview.adoc b/doc/architecture/architecture_overview.adoc
index 6ef5b76ee..9d8a20228 100644
--- a/doc/architecture/architecture_overview.adoc
+++ b/doc/architecture/architecture_overview.adoc
@@ -51,7 +51,8 @@ This has been done to allow backward-compatible changes in the field.
Additionally, this is the default behavior in Protocol Buffer version 3 that no longer has the `required` type.
Setting all fields to `optional` thus ensures update compatibility.
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.
+Fields with the rule `is_set` are mandatory and have to be set at all times.
+All other fields have to be set according to the requirements of the connected models.
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.
diff --git a/osi_detectedobject.proto b/osi_detectedobject.proto
index d651b949e..030747f06 100644
--- a/osi_detectedobject.proto
+++ b/osi_detectedobject.proto
@@ -17,6 +17,10 @@ message DetectedItemHeader
// Specific ID of the detected item as assigned by the sensor internally.
// Needs not to match with \c #ground_truth_id.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier tracking_id = 1;
// The ID of the original detected item in the ground truth.
diff --git a/osi_featuredata.proto b/osi_featuredata.proto
index 16ed85aaf..69b4fcd62 100644
--- a/osi_featuredata.proto
+++ b/osi_featuredata.proto
@@ -92,6 +92,10 @@ message SensorDetectionHeader
// \par Reference:
// [1] DIN Deutsches Institut fuer Normung e. V. (2013). DIN ISO 8855 Strassenfahrzeuge - Fahrzeugdynamik und Fahrverhalten - Begriffe. (DIN ISO 8855:2013-11). Berlin, Germany.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional MountingPosition mounting_position = 3;
// The origin/orientation of the sensor frame represents the current
@@ -124,6 +128,10 @@ message SensorDetectionHeader
// This ID can equal \c SensorData::sensor_id, if \c SensorData holds only
// data from one sensor/sensor model.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier sensor_id = 7;
// The extended qualifier describes the reason (not the effect) why the
diff --git a/osi_groundtruth.proto b/osi_groundtruth.proto
index 5cf5477b5..651ff7e81 100644
--- a/osi_groundtruth.proto
+++ b/osi_groundtruth.proto
@@ -47,6 +47,10 @@ message GroundTruth
// The interface version used by the sender (i.e. the simulation
// environment).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment. The zero time point is
@@ -60,6 +64,10 @@ message GroundTruth
// (there is no inherent latency for ground truth data, as opposed to
// sensor data).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The ID of the host vehicle object referencing to \c MovingObject .
@@ -68,6 +76,7 @@ message GroundTruth
//
// \rules
// refers_to: MovingObject
+ // is_set
// \endrules
//
optional Identifier host_vehicle_id = 3;
@@ -118,7 +127,7 @@ message GroundTruth
// [1] ISO International Organization for Standardization. (2013). ISO 3166-1 Codes for the representation of names of countries and their subdivisions - Part 1: Country codes. (ISO 3166-1:2013). Geneva, Switzerland.
//
// \rules
- // is_iso_country_code:
+ // is_iso_country_code
// \endrules
//
optional uint32 country_code = 13;
diff --git a/osi_lane.proto b/osi_lane.proto
index c95a30de1..702a088d9 100644
--- a/osi_lane.proto
+++ b/osi_lane.proto
@@ -42,6 +42,7 @@ message Lane
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_logicaldetectiondata.proto b/osi_logicaldetectiondata.proto
index cbf0e71fe..353abd407 100644
--- a/osi_logicaldetectiondata.proto
+++ b/osi_logicaldetectiondata.proto
@@ -19,6 +19,10 @@ message LogicalDetectionData
// The interface version used by the sender (i.e. the simulation
// environment).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// Header attributes of fused detections from multiple sensors and sensor types.
diff --git a/osi_logicallane.proto b/osi_logicallane.proto
index f709a89a6..5d3828673 100644
--- a/osi_logicallane.proto
+++ b/osi_logicallane.proto
@@ -56,6 +56,7 @@ message LogicalLaneBoundary
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_motionrequest.proto b/osi_motionrequest.proto
index 82560c8e6..be81b0804 100644
--- a/osi_motionrequest.proto
+++ b/osi_motionrequest.proto
@@ -25,11 +25,19 @@ message MotionRequest
{
// The interface version used by the sender (simulation environment).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment.
// A reference to \c Timestamp message.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// Define the type that is used to specify the motion request.
diff --git a/osi_object.proto b/osi_object.proto
index 3868eb3ff..fa879188a 100644
--- a/osi_object.proto
+++ b/osi_object.proto
@@ -21,6 +21,7 @@ message StationaryObject
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
@@ -388,6 +389,7 @@ message MovingObject
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_referenceline.proto b/osi_referenceline.proto
index b6b3bc5e4..72fa312a8 100644
--- a/osi_referenceline.proto
+++ b/osi_referenceline.proto
@@ -32,6 +32,7 @@ message ReferenceLine
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_roadmarking.proto b/osi_roadmarking.proto
index d8ed5a2e0..f002f9bb5 100644
--- a/osi_roadmarking.proto
+++ b/osi_roadmarking.proto
@@ -29,6 +29,10 @@ message RoadMarking
{
// The ID of the road marking.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier id = 1;
// The base parameters of the road marking.
diff --git a/osi_route.proto b/osi_route.proto
index b7e519330..794c6bb20 100644
--- a/osi_route.proto
+++ b/osi_route.proto
@@ -40,6 +40,10 @@ message Route
// \note This id must be unique within all route messages exchanged with
// one traffic participant.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier route_id = 1;
// Route segments that form the route of an agent.
diff --git a/osi_sensordata.proto b/osi_sensordata.proto
index 689149370..523cb4cfb 100644
--- a/osi_sensordata.proto
+++ b/osi_sensordata.proto
@@ -102,6 +102,10 @@ message SensorData
{
// The interface version used by the sender.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The timestamp of the sensor data. Zero time is arbitrary but must be
@@ -129,6 +133,10 @@ message SensorData
// a dumb sensor with no internal time concept), the two timestamps might
// also be identical, but delayed from the \c GroundTruth timestamp.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The sensors estimated location of the host vehicle
@@ -156,6 +164,10 @@ message SensorData
// object output; it is distinct from the IDs of its physical detectors,
// which are used in the detected features.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier sensor_id = 5;
// The virtual mounting position of the sensor (origin and orientation
@@ -186,6 +198,10 @@ message SensorData
// vehicle's bounding box \c MovingObject::base . \c
// BaseMoving::orientation.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional MountingPosition mounting_position = 6;
// The root mean squared error of the mounting position.
diff --git a/osi_sensorview.proto b/osi_sensorview.proto
index 8d595ed92..863a5c2bb 100644
--- a/osi_sensorview.proto
+++ b/osi_sensorview.proto
@@ -36,6 +36,10 @@ message SensorView
{
// The interface version used by the sender (simulation environment).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment. Zero time is arbitrary
@@ -48,6 +52,10 @@ message SensorView
// (there is no inherent latency for sensor view data, as opposed to
// sensor data).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The ID of the sensor at host vehicle's \c #mounting_position.
@@ -58,6 +66,7 @@ message SensorView
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier sensor_id = 3;
@@ -92,6 +101,10 @@ message SensorView
// vehicle's bounding box \c MovingObject::base . \c
// BaseMoving::orientation.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional MountingPosition mounting_position = 4;
// The root mean squared error of the mounting position.
@@ -127,6 +140,7 @@ message SensorView
//
// \rules
// refers_to: 'MovingObject'
+ // is_set
// \endrules
//
optional Identifier host_vehicle_id = 8;
diff --git a/osi_sensorviewconfiguration.proto b/osi_sensorviewconfiguration.proto
index fc3720ebc..1419c9312 100644
--- a/osi_sensorviewconfiguration.proto
+++ b/osi_sensorviewconfiguration.proto
@@ -66,6 +66,10 @@ message SensorViewConfiguration
{
// The interface version used by the sender (simulation environment).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The ID of the sensor at host vehicle's mounting_position.
@@ -77,6 +81,10 @@ message SensorViewConfiguration
// The ID is to be provided by the environment simulation, the sensor
// model is not in a position to provide a useful default value.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier sensor_id = 2;
// The virtual mounting position of the sensor (origin and orientation
diff --git a/osi_streamingupdate.proto b/osi_streamingupdate.proto
index b1ad1121a..f3006fee9 100644
--- a/osi_streamingupdate.proto
+++ b/osi_streamingupdate.proto
@@ -30,6 +30,10 @@ message StreamingUpdate
{
// The interface version used by the sender.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp where the information of contained objects is calculated.
@@ -38,6 +42,10 @@ message StreamingUpdate
// Zero time does not need to coincide with the UNIX epoch.
// Recommended is the starting time point of the simulation.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The list of stationary objects (excluding traffic signs and traffic
diff --git a/osi_trafficcommand.proto b/osi_trafficcommand.proto
index 6e717e3e8..5baef7731 100644
--- a/osi_trafficcommand.proto
+++ b/osi_trafficcommand.proto
@@ -21,6 +21,10 @@ message TrafficCommand
{
// The interface version used by the sender (scenario engine).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment. Zero time is arbitrary
@@ -33,10 +37,18 @@ message TrafficCommand
// There is no inherent latency for traffic command data, as opposed
// to sensor data.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The ID of this traffic participant.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier traffic_participant_id = 3;
// Commanded traffic action(s) if any.
diff --git a/osi_trafficcommandupdate.proto b/osi_trafficcommandupdate.proto
index d55d38ff3..c341acfdc 100644
--- a/osi_trafficcommandupdate.proto
+++ b/osi_trafficcommandupdate.proto
@@ -29,6 +29,10 @@ message TrafficCommandUpdate
{
// The interface version used by the sender (traffic participant model).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment. Zero time is arbitrary
@@ -36,11 +40,19 @@ message TrafficCommandUpdate
// coincide with the UNIX epoch. It is recommended to use zero timestamp as
// the starting time point of the simulation.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// The ID of this traffic participant which must coincide with a prior sent ID, cf.
// \c TrafficCommand::traffic_participant_id.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Identifier traffic_participant_id = 3;
// Actions which a traffic participant dismisses and which are not yet ended or
diff --git a/osi_trafficlight.proto b/osi_trafficlight.proto
index 887a99fd4..fe90fd4b4 100644
--- a/osi_trafficlight.proto
+++ b/osi_trafficlight.proto
@@ -20,6 +20,7 @@ message TrafficLight
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_trafficsign.proto b/osi_trafficsign.proto
index f15aad856..11e600d4d 100644
--- a/osi_trafficsign.proto
+++ b/osi_trafficsign.proto
@@ -173,6 +173,7 @@ message TrafficSign
//
// \rules
// is_globally_unique
+ // is_set
// \endrules
//
optional Identifier id = 1;
diff --git a/osi_trafficupdate.proto b/osi_trafficupdate.proto
index 5b157c668..45a87d6fb 100644
--- a/osi_trafficupdate.proto
+++ b/osi_trafficupdate.proto
@@ -27,6 +27,10 @@ message TrafficUpdate
{
// The interface version used by the sender (traffic participant model).
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional InterfaceVersion version = 1;
// The data timestamp of the simulation environment. Zero time is arbitrary
@@ -39,6 +43,10 @@ message TrafficUpdate
// There is no inherent latency for moving object update data, as opposed
// to sensor data.
//
+ // \rules
+ // is_set
+ // \endrules
+ //
optional Timestamp timestamp = 2;
// Updated traffic participant data
diff --git a/rules.yml b/rules.yml
index 473bf51b2..1816a7542 100644
--- a/rules.yml
+++ b/rules.yml
@@ -9,4 +9,5 @@ refers_to: '^[ ]\b(refers_to)\b'
is_iso_country_code: '^[ ]\b(is_iso_country_code)\b'
first_element: '^[ ]\b(first_element)\b'
last_element: '^[ ]\b(last_element)\b'
-check_if: '^[ ](\bcheck_if\b)(.*\belse do_check\b)'
\ No newline at end of file
+check_if: '^[ ](\bcheck_if\b)(.*\belse do_check\b)'
+is_set: '^[ ]\b(is_set)\b'
\ No newline at end of file