13.2 Object outline
Objects may have an outline that is too complex to be described by parameters for angular and circular objects alone. Therefore, the outline of polygonal objects or non-rectangular objects may be described in a more detailed way.
An outline defines a series of corner points, including the height of the object relative to the road reference line. Outlines may be closed or open. In a closed outline, the last corner point is connected to the first. The inner area of the described outline may be filled with a filling type, for example, grass, concrete, asphalt, or pavement. The definition of the outline of objects is mainly used for traffic islands and object-based road markings, such as parking spaces and arrows painted on the road surface.
Object-based road markings can be defined by:
-
using closed outlines with @fillType = "paint" to create filled-in areas
-
using outlines with a
<markings>element to create lines without fill.
See Section 13.8, "Object markings" for more information on the <markings> element.
For cross-walks and regularly shaped parking spaces, use object markings as described in Section 13.8, "Object markings".
An object with more than one <outline> element must have exactly one outer outline.
This outer outline defines the overall shape of the object.
All inner outlines must be located fully inside the outer outline.
Inner outlines allow the definition of objects composed of multiple areas with different fill types or lane types as well as those with additional details inside their base shape.
Defining multiple outlines for one object is useful in several cases.
For example, a tree has a narrow trunk and a wide crown.
A driving simulation application might conclude that a vehicle cannot pass the tree if it only just recognized a bounding volume representing the tree.
Two outlines could be defined, one for the narrow trunk and one for the wide crown of the tree.
A driving simulation application in this case could conclude that the vehicle can drive underneath the tree.
Another example is a street light that consist of a pole and a light.
Traffic islands often require more than one outline because the outlines represent logical information, for example, an area where pedestrians can stay.
See example UC_2Lane-RoundAbout-3Arms.xodr in Section 13.2.2, “<cornerLocal> element”.
If an outline is referenced by a <border> element and @fillType is set, the fill area is reduced by the border frame.
Figure 114 shows a traffic island which is placed in the middle of a road as non-rectangular object.
Elements in UML model
<outlines> element
In ASAM OpenDRIVE, the outlines of objects are represented by the <outlines> element within the <object> element.
The <outlines> element serves as a wrapper for the <outline> element, which itself contains further elements to describe, for example, corner roads, bridges, and borders.
UML class: t_road_objects_object_outlines XML tag: <outlines> (Multiplicity: 0..1)
Wrapper for the different outline entries of an object, that can contain multiple outline definitions.
If <outlines> is not used, an object can have only a single <outline> entry.
<outline> element
In ASAM OpenDRIVE, a single outline is represented by the <outline> element within the <outlines> element.
| If the optional attribute @closed is absent, the default value depends on the object type. See Section 13.14, "Combinations of elements and attributes for object types" for more details. |
UML class: t_road_objects_object_outlines_outline XML tag: <outline> (Multiplicity: 1..*)
Defines a series of corner points, including the height of the object relative to the road reference line. For areas, the points should be listed in counter-clockwise order. The inner area of the described outline may be filled with a filling type, such as grass, concrete, asphalt, or pavement.
An element shall be followed by two or more <cornerRoad> elements, by two or more <cornerLocal> elements, or by one or more <curveLocal> elements.
ASAM OpenDRIVE 1.4 outline definitions (without <outlines> parent element) shall still be supported.
| Name | Type | Use | Description |
|---|---|---|---|
|
optional |
If true, the outline describes an area, not a linear feature |
|
|
optional |
Type used to fill the area inside the outline |
|
|
nonNegativeInteger |
optional |
ID of the outline. Must be unique within one object. |
|
optional |
Describes the lane type of the outline |
|
|
optional |
Defines if outline is an outer outline of the object. Defaults to "true" |
XML example
Rules
The following rules apply to outline elements:
-
asam.net:xodr:1.9.0:road.object.outline.outline_followed_by_corner: An
<outline>element shall be followed by two or more<cornerRoad>elements, by two or more<cornerLocal>elements, or by one or more<curveLocal>elements.
-
The
<outline>element may represent an area or a line feature. -
The inner area of the described outline may be filled with a filling type.
-
An outline may be specified as an objects outer or inner outline. It may be specified if the described outline is located at the outer border of the object.
-
asam.net:xodr:1.9.0:road.object.outline.exactly_one_outer:
<outlines>elements shall have exactly one<outline>element with @outer=true.
-
Omitting @outer shall default to @outer=true.
-
It may be specified as which lane type the object is treated by the application.
-
asam.net:xodr:1.7.0:road.object.outline.points_inside_box: All points of the
<outline>element must be located inside the bounding volume.
-
Outlines with @closed=true shall connect the last point in the outline to the first as if it was the next point in the sequence
-
asam.net:xodr:1.9.0:road.object.outline.inner_outline_touches_outer: If an inner outline touches the outer outline, the reference point shall be identical in both outlines.
Related topics
13.2.1. <cornerRoad> element
<cornerRoad> elements are mandatory elements inside an <outline> element.
They are used to describe non-linear forms of objects.
They are mutually exclusive with <cornerLocal> and <curveLocal> elements.
<cornerRoad> elements describe the outline of objects relative to the road reference line with their s- and t-coordinates, using line connections between each element which are straight in the inertial coordinates systems.
The shape of an object may be described by the object’s height at a <cornerRoad> point and the difference in height relative to the road reference line.
Figure 115 shows a non-linear object with several corner points that is described by the s- and t-coordinates along the road reference line. Each point is connected to the next with a straight line. The corner road helps to position objects along a road, for example concrete barriers. Corner points are connected using linear interpolation.
Elements in UML model
<cornerRoad> element
In ASAM OpenDRIVE, corner points of an object that use s- and t-coordinates are represented by the <cornerRoad> element within the <outline> element.
UML class: t_road_objects_object_outlines_outline_cornerRoad XML tag: <cornerRoad> (Multiplicity: 2..*)
Defines a corner point on the object’s outline in road coordinates.
| Name | Type | Use | Unit | Description |
|---|---|---|---|---|
|
double |
required |
m |
dz of the corner relative to road reference line |
|
required |
m |
Height of the object at this corner, along the z-axis |
|
|
nonNegativeInteger |
optional |
ID of the outline point. Must be unique within one outline |
|
|
required |
m |
s-coordinate of the corner |
|
|
double |
required |
m |
t-coordinate of the corner |
XML example
Calculation
The outline \(\mathbf{e}\) between two given neighboring <cornerRoad> elements i and i+1 is calculated with the following linear function with respect to a common normalized interpolation parameter \(p\).
Note that the interpolation is done in the inertial coordinate system.
The s and t coordinates have to be transformed before interpolation.
where
\(\mathbf{e_{i \rightarrow i+1}}(p)\) |
is the outline between two neighboring corners i and i+1 |
\(x_i\), \(y_{i+1}\), \(y_i\), \(x_{i+1}\), \(z_i\), \(z_{i+1}\) |
are the coordinates x, y, and z of the corners i and i+1 respectively |
\(p\) |
is the normalized parameter to interpolate between 0 (corner i) and 1 (corner i+1) |
Rules
The following rules apply to <cornerRoad> elements:
-
asam.net:xodr:1.7.0:road.corner_road.element_min_amount: There shall be at least two
<cornerRoad>elements inside an<outline>element.
-
asam.net:xodr:1.9.0:road.corner_road.corner_road_local_exclusivity: There shall be no mixture of
<cornerRoad>,<cornerLocal>, and<curveLocal>elements inside the same<outline>element.
-
asam.net:xodr:1.9.0:road.corner_road.mandatory_id_with_markings: The @id attribute of a
<cornerRoad>element shall be mandatory when the parent also has a<markings>element.
-
asam.net:xodr:1.9.0:road.corner_road.first_id_zero: The @id attribute of the first
<cornerRoad>element of an object should be 0.
-
asam.net:xodr:1.9.0:road.corner_road.sequential_id_values: The @id attribute should increase by 1 for each
<cornerRoad>element in the order they are listed from top to bottom.
Related topics
13.2.2. <cornerLocal> element
<cornerLocal> elements are mandatory elements inside an <outline> element.
They are used to describe non-linear forms of objects.
They are mutually exclusive with <cornerRoad> and <curveLocal> elements.
<cornerLocal> elements describe the outline of objects within their local u- and v-coordinates with straight connections between each element.
<cornerLocal> coordinatesFigure 116 shows a non-linear object with several corner points that is described within a local coordinate system. Each point is connected to the next with a straight line. The corner local helps to position objects beyond a road and relative to a single point, for example buildings or traffic islands.
Elements in UML model
<cornerLocal> element
In ASAM OpenDRIVE, corner points of an object that use local u- and v-coordinates are represented by the <cornerLocal> element within the <outline> element.
UML class: t_road_objects_object_outlines_outline_cornerLocal XML tag: <cornerLocal> (Multiplicity: 2..*)
Defines a corner point on the object’s outline relative to the object’s origin in local u/v-coordinates.
| Name | Type | Use | Unit | Description |
|---|---|---|---|---|
|
required |
m |
Height of the object at this corner, along the z-axis |
|
|
nonNegativeInteger |
optional |
ID of the outline point. Shall be unique within one outline. |
|
|
double |
required |
m |
Local u-coordinate of the corner |
|
double |
required |
m |
Local v-coordinate of the corner |
|
double |
required |
m |
Local z-coordinate of the corner |
XML example
Calculation
The outline \(\mathbf{e}\) between two given neighboring <cornerLocal> elements i and i+1 is calculated with the following linear function with respect to a common normalized interpolation parameter \(p\):
where
\(\mathbf{e_{i \rightarrow i+1}}(p)\) |
is the outline between two neighboring corners i and i+1 |
\(u_i\), \(u_{i+1}\), \(v_i\), \(v_{i+1}\), \(z_i\), \(z_{i+1}\) |
are the coordinates u, v, and z of the corners i and i+1 respectively |
\(p\) |
is the normalized parameter to interpolate between 0 (corner i) and 1 (corner i+1) |
Rules
The following rules apply to <cornerLocal> elements:
-
asam.net:xodr:1.7.0:road.corner_local.element_min_amount: There shall be at least two
<cornerLocal>elements inside an<outline>element.
-
asam.net:xodr:1.9.0:road.corner_road.corner_road_local_exclusivity: There shall be no mixture of
<cornerRoad>,<cornerLocal>, and<curveLocal>elements inside the same<outline>element.
-
asam.net:xodr:1.9.0:road.corner_local.mandatory_id_with_markings: The @id attribute of a
<cornerLocal>element shall be mandatory when the parent also has a<markings>element.
-
asam.net:xodr:1.9.0:road.corner_local.first_id_zero: The @id attribute of the first
<cornerLocal>element of an object should be 0.
-
asam.net:xodr:1.9.0:road.corner_local.sequential_id_values: The @id attribute should increase by 1 for each
<cornerLocal>element in the order they are listed from top to bottom.
Related topics
13.2.3. <curveLocal> element
<curveLocal> elements are mandatory elements inside an <outline> element.
They are used to describe non-linear forms of objects.
They are mutually exclusive with <cornerRoad> and <cornerLocal> elements.
<curveLocal> coordinates using <paramPoly3> elementsFigure 117 shows a non-linear object with several parametric cubic curves that is described within a local coordinate system. Each vertex is connected to the next one using its curve, forming a smooth object outline. Corner local curve helps to model objects with a smooth geometry such as traffic islands or additional road markings which cannot be modeled as lane boundaries.
Elements in UML model
<curveLocal> element
In ASAM OpenDRIVE, object outlines that use local u- and v-coordinates can be defined using <curveLocal> elements.
The following shapes are available:
-
Straight lines
-
Arcs with a constant curvature
-
Parametric cubic polynomials
UML class: t_road_objects_object_outlines_outline_curveLocal XML tag: <curveLocal> (Multiplicity: 1..*) Introduced: 1.9.0
Used to describe complex forms of objects.
Can be one of <line>, <arc>, or <paramPoly3>
| Name | Type | Use | Unit | Description |
|---|---|---|---|---|
|
double |
optional |
rad |
Start orientation (inertial heading) |
|
required |
m |
Height of the object at this corner, along the z-axis |
|
|
nonNegativeInteger |
optional |
ID of the outline point. Shall be unique within one outline. |
|
|
optional |
m |
Length of the element’s reference line |
|
|
double |
required |
m |
Local u-coordinate of the corner |
|
double |
required |
m |
Local v-coordinate of the corner |
|
double |
required |
m |
Local z-coordinate of the corner |
<line> element
In ASAM OpenDRIVE, a straight line is represented by the <line> element within the <curveLocal> element.
A straight line is the simplest corner local curve element.
UML class: t_road_objects_object_outlines_outline_curveLocal_line XML tag: <line> (Multiplicity: 1) Introduced: 1.9.0
A straight line is the simplest element. It contains no further attributes.
<arc> element
In ASAM OpenDRIVE, an arc is represented by the <arc> element within the <curveLocal> element.
An arc describes an object outline with constant curvature.
UML class: t_road_objects_object_outlines_outline_curveLocal_arc XML tag: <arc> (Multiplicity: 1) Introduced: 1.9.0
Arcs describe curves with constant curvature.
| Name | Type | Use | Unit | Description |
|---|---|---|---|---|
|
double |
required |
1/m |
Constant curvature throughout the element. |
<paramPoly3> element
In ASAM OpenDRIVE, parametric cubic curves are represented by <paramPoly3> elements within the <curveLocal> element.
Parametric cubic curves are typically used to represent measurement data.
Unless otherwise stated, the variable p is in the range [0;1].
Alternatively, it may be given in the range [0; @length of parent <curveLocal>].
UML class: t_road_objects_object_outlines_outline_curveLocal_paramPoly3 XML tag: <paramPoly3> (Multiplicity: 1) Introduced: 1.9.0
A parametric cubic curve describing the curve.
| Name | Type | Use | Unit | Description |
|---|---|---|---|---|
|
double |
required |
m |
Coefficient a for u. |
|
double |
required |
m |
Coefficient a for v. |
|
double |
required |
1 |
Coefficient b for u. |
|
double |
required |
1 |
Coefficient b for v. |
|
double |
required |
1/m |
Coefficient c for u. |
|
double |
required |
1/m |
Coefficient c for v. |
|
double |
required |
1/m² |
Coefficient d for u. |
|
double |
required |
1/m² |
Coefficient d for v. |
|
required |
Range of parameter p.
|
XML example
<objects>
<object type="trafficIsland" subtype="island" id="0" s="20.0" t="0.0" zOffset="0.0" orientation="none" length="32.566370964050293" width="4.0" height="0.3" hdg="0.0" pitch="0.0" roll="0.0">
<outlines>
<outline id="0" outer="true">
<curveLocal u="0.0" v="0.0" z="0.0" height="0.3" hdg="0.0" length="10.0">
<line/>
</curveLocal>
<curveLocal u="10.0" v="0.0" z="0.0" height="0.3" hdg="0.0" length="6.2831854820251465">
<arc curvature="0.5"/>
</curveLocal>
<curveLocal u="10.0" v="4.0" z="0.0" height="0.3" hdg="-1.5707963267948966" length="10.0">
<line/>
</curveLocal>
<curveLocal u="0.0" v="4.0" z="0.0" height="0.3" hdg="-1.5707963267948966" length="6.2831854820251465">
<arc curvature="0.5"/>
</curveLocal>
</outline>
</outlines>
</object>
</objects>
Rules
The following rules apply to <curveLocal> elements:
-
asam.net:xodr:1.9.0:road.curve_local.element_min_amount: There shall be at least one
<curveLocal>element inside an<outline>element.
-
asam.net:xodr:1.9.0:road.corner_road.corner_road_local_exclusivity: There shall be no mixture of
<cornerRoad>,<cornerLocal>, and<curveLocal>elements inside the same<outline>element.
-
asam.net:xodr:1.9.0:road.curve_local.continuous_curve_local: Outlines defined by
<curveLocal>elements shall be continuous.
Continuity is achieved when each point with a predecessor lies at the end of that predecessors curve.
-
If no @length is provided, the curve shall extend up to the next
<curveLocal>element.
-
asam.net:xodr:1.9.0:road.curve_local.length_match: The actual curve length, as determined by numerical integration over the parameter range, should match @length.
-
asam.net:xodr:1.9.0:road.curve_local.paramPoly3.arcLength_range: For
<paramPoly3>elements with @pRange="arcLength", p shall be chosen in [0, @length from<curveLocal>].
-
asam.net:xodr:1.9.0:road.curve_local.paramPoly3.normalized_range: For
<paramPoly3>elements with @pRange="normalized", p shall be chosen in [0, 1].
Related topics
13.2.4 Object marking on outlines
An object’s outline may have markings.
This is done using an <markings> element inside the <outline> element.
See Section 13.8, "Object markings".