open_simulation_interface
master (560d23a)
|
Boundary line of a LogicalLane. More...
Classes | |
struct | LogicalBoundaryPoint |
A point on the boundary. More... | |
Public Types | |
enum | PassingRule { PASSING_RULE_UNKNOWN = 0 , PASSING_RULE_OTHER = 1 , PASSING_RULE_NONE_ALLOWED = 2 , PASSING_RULE_INCREASING_T = 3 , PASSING_RULE_DECREASING_T = 4 , PASSING_RULE_BOTH_ALLOWED = 5 } |
Passing rule of the LogicalLaneBoundary. More... | |
Public Attributes | |
optional Identifier | id = 1 |
The ID of the lane boundary. More... | |
repeated LogicalBoundaryPoint | boundary_line = 2 |
Points making up the lane boundary. More... | |
optional Identifier | reference_line_id = 3 |
The reference line for this boundary. More... | |
repeated Identifier | physical_boundary_id = 4 |
Reference to the physical lane boundary or boundaries that make up this logical boundary. More... | |
optional PassingRule | passing_rule = 5 |
The passing rules, insomuch as they can be determined just from road markings. More... | |
repeated ExternalReference | source_reference = 6 |
Optional external reference to the lane boundary source. More... | |
Boundary line of a LogicalLane.
Similar to a LaneBoundary, but with a reference line and ST positions.
A logical lane boundary describes the boundary between two logical lanes. As such, there will always be exactly one logical lane boundary between two lanes at a given S position. Contrary to that, there can be 0 to N physical lane boundaries (i.e. type LaneBoundary) between two logical lanes at a given S position.
If there are multiple physical lane boundaries at one S position between two lanes (think of a solid-broken marking, which would be described by two LaneBoundary objects, one for the solid lane marking, one for the broken lane marking), then the single LogicalLaneBoundary describing the boundary between two logical lanes should be between the physical boundaries.
A logical lane boundary consists of a list of LogicalBoundaryPoints. Each point has a XYZ and an ST coordinate. The XYZ coordinates describe the position and height of the boundary in the world.
Notes on design decisions:
Passing rule of the LogicalLaneBoundary.
This describes how vehicles are legally allowed to move across the LogicalLaneBoundary. The PassingRule is determined solely based on the semantics of (physical) lane boundaries, not on any signs (i.e. it may be overridden by signs).
Enumerator | |
---|---|
PASSING_RULE_UNKNOWN | Passing rule is unknown (must not be used in ground truth). |
PASSING_RULE_OTHER | Passing rule fits neither of the other categories. Example: this type needs to be used if passing depends on the agent type, e.g. if cars may change lane, but trucks may not. This value is also used between LogicalLanes where the traffic regulations do not say anything about passing rules (e.g. for a LogicalLaneBoundary between LogicalLanes of TYPE_NORMAL and TYPE_CURB or between LogicalLanes of TYPE_BORDER and TYPE_SHOULDER) . |
PASSING_RULE_NONE_ALLOWED | No passing is allowed (neither from left to right nor from right to left). |
PASSING_RULE_INCREASING_T | Only passing in increasing T direction allowed. Passing is allowed from one lane to the other if the points on the target lane have larger T values than points on the source lane (at the same S position). In reference line direction (but not necessarily in driving direction), this means changing from right to left is allowed. |
PASSING_RULE_DECREASING_T | Only passing in decreasing T direction allowed. Passing is allowed from one lane to the other if the points on the target lane have smaller T values than points on the source lane (at the same S position). In reference line direction (but not necessarily in driving direction), this means changing from left to right is allowed. |
PASSING_RULE_BOTH_ALLOWED | Passing is allowed in both directions (left to right and right to left). |
optional Identifier osi3::LogicalLaneBoundary::id = 1 |
The ID of the lane boundary.
repeated LogicalBoundaryPoint osi3::LogicalLaneBoundary::boundary_line = 2 |
Points making up the lane boundary.
The boundary must be defined in the same direction as the reference line. So S positions should increase along the line. Note that S positions will not always increase strictly monotonically. Example:
|---------\ | \ /---boundary--| \------------ / ---------- reference line --------------
At the place where the boundary suddenly increases, two points will have the same S coordinate.
If the boundary approximates a curve (e.g. a cubic function in OpenDRIVE), the points must be chosen in a way that the lateral distance to the ideal line does not exceed 5cm. As shown in the following image:
Approximation error green line.
The Z error (difference in Z height between boundary_line and the "real" line) must not exceed 2cm. This is a stricter requirement than for errors in the XY plane, because Z differences between lanes influence driving very much.
Note: if two lanes have different Z heights (e.g. a driving lane is beside a sidewalk, where the sidewalk is 10cm higher than the road), then these lanes cannot share a boundary, since their boundaries have different Z heights.
optional Identifier osi3::LogicalLaneBoundary::reference_line_id = 3 |
The reference line for this boundary.
The reference line is used as a coordinate system for this boundary. All points of this LogicalLaneBoundary must have S coordinates in the range [sStart
,sEnd
].
The reference line should roughly have the same shape as the boundary (so roughly parallel to the lane middle), so that S coordinates continually increase along the boundary.
repeated Identifier osi3::LogicalLaneBoundary::physical_boundary_id = 4 |
Reference to the physical lane boundary or boundaries that make up this logical boundary.
Rules and notes:
Example:
Lane 1 --------a------------------ - - - -c- - - - ----> - - - -b- - - - Lane -1
This shows the boundary between lane 1 and lane -1, with the reference line going from left to right. First there is a solid-broken line (a and b), then there is only a solid line (a), then there is a broken line (c). There would be three LogicalLaneBoundary objects between Lane1 and Lane2: the first would reference first b and then a, the second would reference only a, and the third would reference c.
optional PassingRule osi3::LogicalLaneBoundary::passing_rule = 5 |
The passing rules, insomuch as they can be determined just from road markings.
repeated ExternalReference osi3::LogicalLaneBoundary::source_reference = 6 |
Optional external reference to the lane boundary source.