Skip to content

Commit 82c75f3

Browse files
committed
Improve LogicalLane documentation, add two example images.
1 parent 5b1628f commit 82c75f3

File tree

3 files changed

+56
-14
lines changed

3 files changed

+56
-14
lines changed

doc/images/OSI_LogicalLane1.png

17.1 KB
Loading

doc/images/OSI_LogicalLane2.png

9.2 KB
Loading

osi_logicallane.proto

Lines changed: 56 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -240,27 +240,69 @@ message LogicalLaneBoundary
240240
// A logical lane is part of a road. Compared to a physical lane (OSI type
241241
// \c Lane), its existence doesn't hinge on the existence of road markings. So
242242
// e.g. a narrow urban road with two driving directions but no road markings
243-
// in-between would be presented as two LogicalLanes, but only one Lane. So one
244-
// Lane can consist of multiple LogicalLanes. E.g. on intersections, each
245-
// driving path is one LogicalLane, but the whole area is one \c Lane of type
246-
// \c #TYPE_INTERSECTION.
243+
// in-between would be presented as two \link LogicalLane LogicalLanes\endlink,
244+
// but only one Lane. So one Lane can consist of multiple \link LogicalLane
245+
// LogicalLanes\endlink. E.g. on intersections, each driving path is one
246+
// LogicalLane, but the whole area is one \c Lane of type \link
247+
// osi3::Lane::Classification::TYPE_INTERSECTION \c TYPE_INTERSECTION \endlink.
247248
//
248249
// Outside of junctions, logical lanes are constructed such that each point on
249250
// the road belongs to at least one (typically: exactly one) logical lane. So
250251
// there are no gaps between logical lanes, and no areas that don't belong to a
251252
// logical lane.
252253
//
253-
// If OSI is generated from OpenDRIVE, then LogicalLanes map directly to
254-
// OpenDRIVE lanes. However, it is allowed to merge multiple consecutive
255-
// OpenDRIVE lanes with the same type into one OSI LogicalLane: if an OpenDRIVE
256-
// lane has a single successor, which has the same lane type, and this
257-
// successor has only one predecessor (so no lane merging or splitting) then
258-
// the two lanes may be presented as one continuous LogicalLane. This may be
259-
// done recursively.
254+
// If OSI is generated from OpenDRIVE, then \link LogicalLane
255+
// LogicalLanes\endlink map directly to OpenDRIVE lanes. However, it is allowed
256+
// to merge multiple consecutive OpenDRIVE lanes with the same type into one
257+
// OSI LogicalLane: if an OpenDRIVE lane has a single successor, which has the
258+
// same lane type, and this successor has only one predecessor (so no lane
259+
// merging or splitting) then the two lanes may be presented as one continuous
260+
// LogicalLane. This may be done recursively.
260261
//
261-
// The reference line pointed to by reference_line_id defines an ST coordinate
262-
// system for the lane. This ST coordinate system is used to describe positions
263-
// on the lane.
262+
// The \link ReferenceLine reference line\endlink pointed to by
263+
// #reference_line_id defines an ST coordinate system for the lane. This ST
264+
// coordinate system is used to describe positions on the lane.
265+
//
266+
// ## Example
267+
//
268+
// The example below shows two logical lanes on an intersection, with a focus
269+
// on the left-turn lane (\c l1):
270+
// \image html OSI_LogicalLane1.png "Two logical lanes on an intersection"
271+
//
272+
// Assumptions not shown in the image:
273+
// - This is right-hand traffic (and thus vehicles on \c l1 drive from the bottom
274+
// to the left, vehicles on \c l2 drive from right to left).
275+
// - The yellow line is a ReferenceLine, defined starting at the bottom, and
276+
// going to the left.
277+
//
278+
// Some features shown in the image relative to \c l1:
279+
// - The yellow line is the ReferenceLine of \c l1 . The ReferenceLine can be
280+
// shared with other lanes. Because the ReferenceLine has the same direction
281+
// as the driving direction of \c l1 in this example,
282+
// <code>#reference_line_is_driving_direction == true</code>.
283+
// - The red line marks the area where \c l2 is left of
284+
// \c l1 - this info is recorded in #left_adjacent_lane of \c l1.
285+
// - The red area is the area where \c l2 overlaps \c l1. This is recorded in
286+
// #overlapping_lane of \c l1.
287+
//
288+
// The image below shows the same two lanes, but from the perspective of \c l2:
289+
// \image html OSI_LogicalLane2.png "Two logical lanes on an intersection"
290+
//
291+
// Assumptions not shown in the image:
292+
// - The yellow line is a ReferenceLine, defined starting at the right, going
293+
// to the left.
294+
//
295+
// Some features shown in the image relative to \c l2:
296+
// - The yellow line is the ReferenceLine of \c l2 . The ReferenceLine can be
297+
// shared with other lanes. Because the ReferenceLine has the same direction
298+
// as the driving direction of \c l2 in this example,
299+
// <code>#reference_line_is_driving_direction == true</code>.
300+
// - The green line marks the area where \c l1 is right of
301+
// \c l2 - this info is recorded in #right_adjacent_lane of \c l2.
302+
// - The red area is the area where \c l1 overlaps \c l2. This is recorded in
303+
// #overlapping_lane of \c l1.
304+
//
305+
// Note: all these relations are also defined outside of intersections.
264306
//
265307
message LogicalLane
266308
{

0 commit comments

Comments
 (0)