From 2db24fb39fc0017c460c66785523a63265009bff Mon Sep 17 00:00:00 2001 From: Fabian Pfeuffer Date: Fri, 27 Jan 2023 17:47:42 +0100 Subject: [PATCH 1/3] feat: New OSI message osi_route The new message allows sending route information to a traffic agent in the simulation. The route information can then be used by the agent to traverse the road network. Signed-off-by: Fabian Pfeuffer --- CMakeLists.txt | 1 + doc/images/OSI_Planned_Route.png | Bin 0 -> 22780 bytes doc/images/OSI_Route_Segment.png | Bin 0 -> 17096 bytes osi_hostvehicledata.proto | 5 ++ osi_route.proto | 123 +++++++++++++++++++++++++++++++ setup.py | 1 + 6 files changed, 130 insertions(+) create mode 100644 doc/images/OSI_Planned_Route.png create mode 100644 doc/images/OSI_Route_Segment.png create mode 100644 osi_route.proto diff --git a/CMakeLists.txt b/CMakeLists.txt index 8c9626321..6057fddf8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -85,6 +85,7 @@ set(OSI_PROTO_FILES osi_trafficcommandupdate.proto osi_referenceline.proto osi_roadmarking.proto + osi_route.proto osi_lane.proto osi_logicallane.proto osi_featuredata.proto diff --git a/doc/images/OSI_Planned_Route.png b/doc/images/OSI_Planned_Route.png new file mode 100644 index 0000000000000000000000000000000000000000..17e490cedea144709d52d5634133986563209348 GIT binary patch literal 22780 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 Y=3KtLCv?vZ@bv$<{V6;4@7_264{_EPLjV8( literal 0 HcmV?d00001 diff --git a/doc/images/OSI_Route_Segment.png b/doc/images/OSI_Route_Segment.png new file mode 100644 index 0000000000000000000000000000000000000000..be13b5672a11cffb727446af9fe34055a58e6140 GIT binary patch literal 17096 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 literal 0 HcmV?d00001 diff --git a/osi_hostvehicledata.proto b/osi_hostvehicledata.proto index cdd723118..9467b72a8 100644 --- a/osi_hostvehicledata.proto +++ b/osi_hostvehicledata.proto @@ -4,6 +4,7 @@ option optimize_for = SPEED; import "osi_version.proto"; import "osi_common.proto"; +import "osi_route.proto"; package osi3; @@ -91,6 +92,10 @@ message HostVehicleData // optional VehicleMotion vehicle_motion = 13; + // Currently planned route of the vehicle + // + optional Route route = 14; + // // \brief Base parameters and overall states of the vehicle. // diff --git a/osi_route.proto b/osi_route.proto new file mode 100644 index 000000000..147c66f14 --- /dev/null +++ b/osi_route.proto @@ -0,0 +1,123 @@ +syntax = "proto3"; + +option optimize_for = SPEED; + +import "osi_common.proto"; + +package osi3; + +// +// \brief A route in the road network +// +// A route is an e.g. planned or suggested path for an agent to travel from one +// location to another within the road network. It is composed of a list of route +// segments, which form a continuous path through the road network and should be +// traversed in the order they are listed. +// The route allows the simulation environment to provide agents with high level +// path information, similar to that of a map or a navigation system, without the +// need for the agent model to perform complex path planning on its own. This +// allows for an efficient control of the agent's general direction, while +// simultaneously giving it enough freedom on how to traverse the path. +// +// ## Example +// +// The example below shows the \link Route route\endlink of a vehicle. +// +// \image html OSI_Planned_Route.png "Route" width=850px +// +// The route is composed of three \link RouteSegment route segments\endlink RS1-3, +// each indicated by a yellow outline. Two of the route segments +// (RS2 and RS3) only contain a single \link LogicalLaneSegment logical lane segment\endlink +// (highlighted in blue), while RS1 is composed of three +// logical lane segments (green, blue and red). +// +message Route +{ + + // The unique id of the route. + // + // \note This field is mandatory. + // + // \note This id must be unique within all route messages exchanged with + // one traffic participant. + // + optional Identifier route_id = 1; + + // Route segments that form the route of an agent. + // + // Consecutive segments should be connected without gaps, meaning that the + // two of them should form a continuous area. + // + repeated RouteSegment route_segment = 2; + + // + // \brief A segment of a logical lane. + // + message LogicalLaneSegment + { + // The ID of the logical lane this segment belongs to. + // + // \rules + // refers_to: LogicalLane + // \endrules + // + optional Identifier logical_lane_id = 1; + + // S position on the logical lane where the segment starts. + // + optional double start_s = 2; + + // S position on the logical lane where the segment ends. + // + optional double end_s = 3; + } + + // + // \brief A segment of a route. + // + // A route segment describes a segment of a traffic agent's route through the + // road network. The route segment is composed of a list of logical lanes + // segments that indicate the agent which logical lanes it should use in a + // given interval, so that it will eventually reach its destination. + // In general, only lanes should be listed that are parallel to each + // other, though some may have different lengths (e.g. if a lane widening + // occurs, the newly appearing lane will have a shorter length). + // + // Typically a route segment will be either + // - a set of lanes between two junctions, or + // - parallel lanes on an intersection with the same driving direction + // + // ## Example + // + // Consider the \link RouteSegment route segment\endlink between two intersections, + // shown in the image below. + // + // \image html OSI_Route_Segment.png "RouteSegment" width=850px + // + // In the example, a single route segment RS with three + // \link LogicalLaneSegment logical lane segments\endlink LL1, LL2 and LL3 is + // shown. The segments are indicated by the green, blue and red highlighted areas, + // one for each underlying logical lane The starting + // s-position of each segment is indicated by the yellow dotted line and the s- prefix + // (note that the start of LL2 lies further to the left, outside of the image), + // while the ending s-position of all segments is shown by the yellow dotted line e-RS. + // + // As it can be seen in the example, all logical lane segments are parallel, + // but two of them are opening at a later position, so their starting + // s-positions will be different. + // + message RouteSegment + { + + // Logical lane segments that form a route segment. + // + // The logical lane segments of a route segment should be connected without + // gaps, meaning that, together, the lane segments should form a + // continous area. + // + repeated LogicalLaneSegment lane_segment = 1; + + } + + +} diff --git a/setup.py b/setup.py index 36672287e..b09aee6c3 100644 --- a/setup.py +++ b/setup.py @@ -73,6 +73,7 @@ def find_protoc(): "osi_occupant.proto", "osi_referenceline.proto", "osi_roadmarking.proto", + 'osi_route.proto', "osi_sensordata.proto", "osi_sensorspecific.proto", "osi_sensorview.proto", From 02d086a2cd6f7fc500bc6ed2258503faf177fc6f Mon Sep 17 00:00:00 2001 From: Fabian Pfeuffer Date: Wed, 22 Nov 2023 10:16:59 +0100 Subject: [PATCH 2/3] Concretize documentation of route segments Signed-off-by: Fabian Pfeuffer --- osi_route.proto | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/osi_route.proto b/osi_route.proto index 147c66f14..54afc6dc8 100644 --- a/osi_route.proto +++ b/osi_route.proto @@ -53,6 +53,13 @@ message Route // // \brief A segment of a logical lane. // + // \note The #LogicalLaneSegment allows that #start_s > #end_s. + // If #start_s < #end_s, then the traffic agent should traverse the + // segment in the logical lane's reference line definition direction. + // If #end_s > #start_s, then the traffic agent should traverse the + // segment in the opposite of the logical lane's reference line + // definition direction. + // message LogicalLaneSegment { // The ID of the logical lane this segment belongs to. @@ -76,15 +83,23 @@ message Route // \brief A segment of a route. // // A route segment describes a segment of a traffic agent's route through the - // road network. The route segment is composed of a list of logical lanes - // segments that indicate the agent which logical lanes it should use in a - // given interval, so that it will eventually reach its destination. - // In general, only lanes should be listed that are parallel to each - // other, though some may have different lengths (e.g. if a lane widening + // logical lanes of the road network. + // + // Each time there is a successor-predecessor relation between the logical + // lanes along the route (i.e. a logical lane ends, and is continued by another + // logical lane, e.g. at a junction border), a new #RouteSegment starts. The + // #RouteSegment then lists the logical lane segments that can be used to + // travel through this space of the road. + // + // Together, the listed logical lane segments should form a continuous area, + // where the traffic agent can move freely. These will mostly be parallel + // lanes, though lanes may overlap (e.g. if one lane splits into two on a + // junction). In general, the logical lane segments in a #RouteSegment will + // have the same length, though there are exceptions (e.g. if a lane widening // occurs, the newly appearing lane will have a shorter length). // // Typically a route segment will be either - // - a set of lanes between two junctions, or + // - a set of parallel lanes between two junctions, or // - parallel lanes on an intersection with the same driving direction // // ## Example @@ -113,7 +128,7 @@ message Route // // The logical lane segments of a route segment should be connected without // gaps, meaning that, together, the lane segments should form a - // continous area. + // continuous area. // repeated LogicalLaneSegment lane_segment = 1; From fbe6362855fa2c466b114bb6a6bc6e10d6a65ed6 Mon Sep 17 00:00:00 2001 From: "Pierre R. Mai" Date: Mon, 15 Jan 2024 16:27:39 +0100 Subject: [PATCH 3/3] Fix proto syntax and formatting Signed-off-by: Pierre R. Mai --- osi_route.proto | 32 ++++++++++++++------------------ setup.py | 2 +- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/osi_route.proto b/osi_route.proto index 54afc6dc8..b7e519330 100644 --- a/osi_route.proto +++ b/osi_route.proto @@ -1,4 +1,4 @@ -syntax = "proto3"; +syntax = "proto2"; option optimize_for = SPEED; @@ -33,7 +33,6 @@ package osi3; // message Route { - // The unique id of the route. // // \note This field is mandatory. @@ -53,12 +52,12 @@ message Route // // \brief A segment of a logical lane. // - // \note The #LogicalLaneSegment allows that #start_s > #end_s. - // If #start_s < #end_s, then the traffic agent should traverse the - // segment in the logical lane's reference line definition direction. - // If #end_s > #start_s, then the traffic agent should traverse the - // segment in the opposite of the logical lane's reference line - // definition direction. + // \note The LogicalLaneSegment allows that start_s > end_s. + // If start_s < end_s, then the traffic agent should traverse the + // segment in the logical lane's reference line definition direction. + // If end_s > start_s, then the traffic agent should traverse the + // segment in the opposite of the logical lane's reference line + // definition direction. // message LogicalLaneSegment { @@ -87,16 +86,16 @@ message Route // // Each time there is a successor-predecessor relation between the logical // lanes along the route (i.e. a logical lane ends, and is continued by another - // logical lane, e.g. at a junction border), a new #RouteSegment starts. The - // #RouteSegment then lists the logical lane segments that can be used to + // logical lane, e.g. at a junction border), a new RouteSegment starts. The + // RouteSegment then lists the logical lane segments that can be used to // travel through this space of the road. // // Together, the listed logical lane segments should form a continuous area, // where the traffic agent can move freely. These will mostly be parallel // lanes, though lanes may overlap (e.g. if one lane splits into two on a - // junction). In general, the logical lane segments in a #RouteSegment will - // have the same length, though there are exceptions (e.g. if a lane widening - // occurs, the newly appearing lane will have a shorter length). + // junction). In general, the logical lane segments in a RouteSegment will + // have the same length, though there are exceptions (e.g. if a lane + // widening occurs, the newly appearing lane will have a shorter length). // // Typically a route segment will be either // - a set of parallel lanes between two junctions, or @@ -127,12 +126,9 @@ message Route // Logical lane segments that form a route segment. // // The logical lane segments of a route segment should be connected without - // gaps, meaning that, together, the lane segments should form a - // continuous area. + // gaps, meaning that, together, the lane segments should form a continuous + // area. // repeated LogicalLaneSegment lane_segment = 1; - } - - } diff --git a/setup.py b/setup.py index b09aee6c3..cad557993 100644 --- a/setup.py +++ b/setup.py @@ -73,7 +73,7 @@ def find_protoc(): "osi_occupant.proto", "osi_referenceline.proto", "osi_roadmarking.proto", - 'osi_route.proto', + "osi_route.proto", "osi_sensordata.proto", "osi_sensorspecific.proto", "osi_sensorview.proto",