@@ -302,13 +302,22 @@ message LogicalLane
302
302
//
303
303
repeated ExternalReference source_reference = 3 ;
304
304
305
- // Reference to the physical lane this logical lane belongs to.
305
+ // Reference to the physical lanes this logical lane belongs to.
306
306
//
307
307
// This makes it possible to get detailed information on the physical lane
308
308
// properties, e.g. the visual colors of the boundaries, the road
309
309
// condition, etc..
310
310
//
311
- // TODO Should this be a repeated field? Imagine the following scenario:
311
+ // Note: a logical lane may consist of several physical lanes (in a row).
312
+ // At any one S position, a logical lane should only reference one physical
313
+ // lane. Several logical lanes may reference the same physical lane (see
314
+ // drawing below).
315
+ //
316
+ // Logical lanes should not extend beyond intersections. All logical lanes
317
+ // on intersections should end at the latest at the border of the
318
+ // intersection.
319
+ //
320
+ // Example:
312
321
// <pre>
313
322
// ---------------------------------
314
323
// l1 l2
@@ -321,22 +330,21 @@ message LogicalLane
321
330
// lane marking is present. And l3 is one lane covering the whole road
322
331
// (because no road marking is present).
323
332
//
324
- // Now there are two basic possibilities to define the logical lanes:
325
- // - There could be two logical lanes: one encompassing l4, part of l3 and
326
- // l5; another encompassing l2, part of l3 and l1. In this case, one
327
- // logical lane can map to a number of physical lanes, and the mapping
328
- // should include s positions, so it is clear which part of the logical
329
- // lane maps to which physical lane.
330
- // - There could be 6 logical lanes: l1, l2, l4, l5 and two lanes for each
331
- // halve of l3. Then each logical lane would map to a single physical
332
- // lane, but logical lanes would have to be split each time a lane
333
- // marking appears or disappears.
333
+ // This would typically be presented as two logical lanes:
334
+ // - One encompassing l1, part of l3, and l2
335
+ // - The other encompassing l4, part of l3 and l5
336
+ //
337
+ // In this example, both logical lanes would reference l3. Their shared
338
+ // LogicalLaneBoundary would cut through the middle of l3.
339
+ //
340
+ // physical_lane_reference does not give any information how much of the
341
+ // area of a physical lane is covered by a logical lane.
334
342
//
335
343
// \rules
336
344
// refers_to: Lane
337
345
// \endrules
338
346
//
339
- optional Identifier physical_lane_id = 4 ;
347
+ repeated PhysicalLaneReference physical_lane_reference = 4 ;
340
348
341
349
// The reference line for this logical lane
342
350
//
@@ -554,6 +562,30 @@ message LogicalLane
554
562
TYPE_CURB = 16 ;
555
563
}
556
564
565
+ //
566
+ // \brief Reference to a physical lane.
567
+ //
568
+ message PhysicalLaneReference
569
+ {
570
+ // Id of the physical lane referenced.
571
+ //
572
+ // \rules
573
+ // refers_to: Lane
574
+ // \endrules
575
+ //
576
+ optional Identifier physical_lane_id = 1 ;
577
+
578
+ // S position on the logical lane where the physical lane starts
579
+ //
580
+ optional double start_s = 2 ;
581
+
582
+ // S position on the logical lane where the physical lane ends
583
+ //
584
+ // Requirement: end_s > start_s
585
+ //
586
+ optional double end_s = 3 ;
587
+ }
588
+
557
589
//
558
590
// \brief Connection to another lane (predecessor or successor)
559
591
//
0 commit comments