Skip to content

Intersection

The drawings on this page use left-hand traffic, as in Japan: vehicles drive on the left side of the road, and a right turn crosses the opposing lane. For right-hand traffic, swap left and right.


Requirements#

vm-03-01 Intersection criteria#

Detail of requirements #

Essential criteria for the construction of an intersection:

  • Encircle the drivable area at the intersection with a Polygon (type:intersection_area).
  • Add turn_direction to all Lanelets in the intersection.
  • Ensure that all lanelets in the intersection are tagged:
    • key:intersection_area
    • value: Polygon's ID
  • Attach right_of_way to the necessary Lanelets.
  • Also, it is necessary to appropriately create traffic lights, crosswalks, and stop lines.

For detailed information, refer to the respective requirements on this page.

Autoware modules #
  • The intersection module uses turn_direction and right_of_way. It plans the velocity to avoid collisions with other vehicles, and it takes the traffic lights into account. The blind spot module uses turn_direction to check for bicycles and pedestrians on the side of a turning vehicle.
  • The static obstacle avoidance module uses the intersection_area tag. It can plan a path that leaves the lane inside the intersection area (parameter use_intersection_areas, true by default). The lane change module also reads the intersection_area tag. The intersection module can use the intersection area to detect vehicles outside the lanelets (parameter use_intersection_area, false by default).

Preferred vector map #

None in particular.

Incorrect vector map #

None in particular.


vm-03-02 Lanelet's turn direction and virtual linestring#

Detail of requirements #

Add the following tag to the Lanelets in the intersection:

  • turn_direction : straight
  • turn_direction : left
  • turn_direction : right

Also, if the left or right Linestrings of Lanelets at the intersection lack road paintings, designate these as type:virtual.

Behavior of Autoware #

Autoware turns on the turn signal (blinker) before a Lanelet with turn_direction left or right. By default, the turn signal starts when the distance to the start of that Lanelet is less than 30 m plus the distance that the vehicle drives in 3 s at its current speed. The parameters are turn_signal_intersection_search_distance and turn_signal_search_time of the behavior path planner. To change the distance for one Lanelet, add the following tag to it. This value then replaces the whole default distance.

  • key: turn_signal_distance
  • value: numerical value (m)
A T-junction. A road goes from west to east, and a second road joins it from the south. The road from the south has a stop line.
A T-junction. A second road joins the main road from the south.

Preferred vector map #

The lanelets of a T-junction. The lanelet that turns left has turn_direction left. The lanelet that goes straight through the junction has turn_direction straight. The right bound of the left-turn lanelet has no paint, so it is a linestring of type virtual.Laneletturn_direction: leftLaneletturn_direction: straightLinestringtype: virtualLanelet
The lanelets in the junction have turn_direction. The unpainted bound of the left turn is a virtual linestring.

Incorrect vector map #

None in particular.


vm-03-03 Lanelet width in the intersection#

Detail of requirements #

Lanelets in the intersection should have a consistent width. Additionally, draw Linestrings with smooth curves.

The shape of this curve must be determined by the Vector Map creator.

An intersection with traffic lights. The ego vehicle comes from the south and turns right.
The ego vehicle turns right at an intersection with traffic lights.

Preferred vector map #

Correct: the lanelet that turns right has a constant width, and its linestrings are smooth curves.The lanelet has a constant width,and its linestrings are smooth curves.
Correct: the lanelet has a constant width and smooth linestrings.

Incorrect vector map #

Incorrect: the width of the lanelet that turns right changes, and its linestrings are not smooth.The width of the lanelet changes,and its linestrings are not smooth.
Incorrect: the width changes, and the linestrings are not smooth.

vm-03-04 Lanelet creation in the intersection#

Detail of requirements #

Create all Lanelets in the intersection, including lanelets not driven by the vehicle. Additionally, link stop lines and traffic lights to the Lanelets appropriately.

Refer also to the creation scope vm-07-01

Behavior of Autoware #

Autoware uses lanelets to predict the movements of other vehicles and plan the vehicle's velocity accordingly. Therefore, it is necessary to create all lanelets in the intersection.

An intersection where the map has a lanelet for every lane and every turn, also for the lanes that the ego vehicle does not use. The ego vehicle comes from the south and turns left.
The map has a lanelet for every lane and every turn. The ego vehicle turns left.

Preferred vector map #

Correct: the map has a lanelet for every lane and every turn in the intersection.All lanelets in the intersectionare created.
Correct: all lanelets in the intersection exist.

Incorrect vector map #

Incorrect: the map has only the lanelets that the ego vehicle uses to turn left.Only the lanelets that the ego vehicleuses are created. The map is incomplete.
Incorrect: only the lanelets of the ego vehicle exist.

vm-03-05 Lanelet division in the intersection#

Detail of requirements #

Create the Lanelets in the intersection as a single object without dividing them.

An intersection with traffic lights. The ego vehicle comes from the south and turns right.
The ego vehicle turns right at an intersection with traffic lights.

Preferred vector map #

Correct: one lanelet goes from the entrance to the exit of the intersection.One lanelet goes from the entranceto the exit of the intersection.
Correct: one lanelet goes from the entrance to the exit.

Incorrect vector map #

Incorrect: the right turn is divided into two lanelets between the entrance and the exit of the intersection.The turn is divided into two laneletsbetween the entrance and the exit.
Incorrect: the turn is divided into two lanelets.

vm-03-06 Guide lines in the intersection#

Detail of requirements #

If there are guide lines in the intersection, draw the Lanelet following them.

In cases where the Lanelets branches off, begin the branching at the end of the guide line. However, it is not necessary to share points or linestrings between Lanelets.

A guide line is a road painting. Give the Linestring along a dashed guide line type:line_thin and subtype:dashed, not type:virtual. Use type:virtual only for the bounds without road paintings, as in vm-03-02. Lanelet2 defines virtual as a non-physical lane boundary. Camera-based localization (YabLoc) uses line_thin Linestrings as road markings, but not virtual Linestrings. Lanelet2 permits a lane change across a line_thin dashed Linestring. To prohibit it, add lane_change=no (see vm-01-02).

Two intersections with guide lines for the right turn. On the left, the guide lines lead one lane into one lane. On the right, the lane branches into two lanes at the end of the guide lines.Guide line
Guide lines for a right turn. On the right, the lane branches into two lanes.

Preferred vector map #

The lanelets follow the guide lines, and their bounds along the guide lines are linestrings of type line_thin and subtype dashed. When a lanelet branches, the branch starts at the end of the guide lines.Linestringtype: line_thinsubtype: dashedLinestringtype: line_thinsubtype: dashedWhen a lanelet branches, the branchstarts at the end of the guide line.
The lanelets follow the guide lines. The branch starts at the end of the guide lines.

Incorrect vector map #

None in particular.


vm-03-07 Multiple lanelets in the intersection#

Detail of requirements #

When connecting multiple lanes with Lanelets at an intersection, those Lanelets should be made adjacent to each other without crossing.

A road with two lanes in each direction. Two vehicles turn right side by side, each from its lane into its own lane.
Two vehicles turn right side by side.

Preferred vector map #

Correct: the two lanelets that turn right are next to each other and do not cross.The lanelets are next to eachother and do not cross.
Correct: the lanelets are next to each other and do not cross.

Incorrect vector map #

Incorrect: the two lanelets that turn right cross each other.The lanelets cross each other.
Incorrect: the lanelets cross each other.

vm-03-08 Intersection area range#

Detail of requirements #

Encircle the intersection's drivable area with a Polygon (type:intersection_area). The boundary of this intersection's Polygon should be defined by the objects below.

  • Linestrings (type:road_border)
  • Straight lines at the connection points of lanelets in the intersection.

Preferred vector map #

The intersection area is a polygon of type intersection_area. Its boundary follows the road border linestrings at the corners and around the median islands, and the lanelet connection boundaries across the roads. The lanelets in the intersection start and end at these connection boundaries.Linestringtype: road_borderPolygontype: intersection_areaLaneletsLanelet connection boundary
The intersection_area polygon follows the road borders and the lanelet connection boundaries.

Incorrect vector map #

None in particular.


vm-03-09 Range of Lanelet in the intersection#

Detail of requirements #

Determine the start and end positions of lanelets in the intersection (henceforth the boundaries of lanelet connections) based on the stop line's position.

  • For cases with a painted stop line:
    • The stop line's linestring (type:stop_line) position must align with the lanelet's start.
    • Extend the lanelet's end to where the opposing lane's stop line would be.
  • Without a painted stop line:
    • Use a drawn linestring (type:stop_line) to establish positions as if there were a painted stop line.

Preferred vector map #

Each lanelet in the intersection starts at the stop line of its lane and ends at the extended line of the stop line of the opposite lane.Stop lineThe extended lineof the stop line isthe boundary of thelanelet connection
Each lanelet starts at its stop line and ends at the extended line of the opposite stop line.

Incorrect vector map #

None in particular.


vm-03-10 Right of way (with signal)#

Detail of requirements #

Set the regulatory element 'right_of_way' for Lanelets that meet all of the following criteria:

  • Lanelets in the intersection with a turn_direction of right or left.
  • Lanelets that intersect with the vehicle's lanelet.
  • There are traffic lights at the intersection.

Set to yield those lanelets in the intersection that intersect the vehicle's lanelet, and set to yield those lanelets that do not share the same signal change timing with the vehicle. Also, if the vehicle is turning left, set the opposing vehicle's right-turn lane to yield. There is no need to set yield for lanelets where the vehicle goes straight (turn_direction:straight).

Two scenes in an intersection with traffic lights. On the left, the ego vehicle turns left. On the right, the ego vehicle turns right.The vehicle turns left.The vehicle turns right.
The ego vehicle turns left (left) or right (right) at an intersection with traffic lights.

Preferred vector map #

The vehicle turns left #
The ego vehicle turns left at an intersection with traffic lights. Its lanelet is the right_of_way lanelet. The crossing lanes of the other signal phase and the opposing right turn are yield lanes.Regulatory elementsubtype: right_of_wayyieldyieldright_of_way
Left turn: the crossing lane of the other signal phase and the opposing right turn are yield lanes.
The vehicle turns right #
The ego vehicle turns right at an intersection with traffic lights. Its lanelet is the right_of_way lanelet. The crossing lanes of the other signal phase are yield lanes. The opposing right turn is in the same signal phase and is not a yield lane.Regulatory elementsubtype: right_of_wayyieldyieldright_of_wayOpposing right turn:not a yield lane
Right turn: the crossing lanes of the other signal phase are yield lanes.

Incorrect vector map #

None in particular.


vm-03-11 Right of way (without signal)#

Detail of requirements #

Set the regulatory element 'right_of_way' for Lanelets that meet all of the following criteria:

  • Lanelets in the intersection with a turn_direction of right or left. A lanelet with turn_direction straight also needs it in the cases below.
  • Lanelets that intersect with the vehicle's lanelet.
  • There are no traffic lights at the intersection.
Two scenes in an intersection without traffic lights. In case 1, the ego vehicle goes straight on the priority road. In case 2, the ego vehicle goes straight on the non-priority road.Case 1: on the priority roadPriority roadCase 2: on the non-priority roadPriority road
Case 1: the ego vehicle is on the priority road. Case 2: it is on the non-priority road.

Preferred vector map #

Case 1: the vehicle is on the priority lane #
Case 1: the ego vehicle goes straight on the priority road. Its lanelet is the right_of_way lanelet. The crossing straight lanes and the opposing right turn are yield lanes.Regulatory elementsubtype: right_of_wayyieldyieldyieldright_of_way
Case 1: the crossing lanes and the opposing right turn are yield lanes.
Case 2: the vehicle is on the non-priority lane #

A regulatory element is not necessary. However, when the vehicle goes straight, it has relative priority over other vehicles turning right from the opposing non-priority road. Therefore, settings for right_of_way and yield are required in this case.

Case 2: the ego vehicle goes straight on the non-priority road. Its lanelet is the right_of_way lanelet, and the opposing right turn is the yield lane.Regulatory elementsubtype: right_of_wayyieldright_of_way
Case 2: the opposing right turn is the yield lane.

Incorrect vector map #

None in particular.


vm-03-12 Right of way supplements#

Detail of requirements #

Why it's necessary to configure 'right_of_way' #

Without the 'right_of_way' setting, Autoware interprets other lanes intersecting its path as having priority. Therefore, as long as there are other vehicles in the crossing lane, Autoware cannot enter the intersection regardless of signal indications.

An example of a problem: Even when our signal allows proceeding, our vehicle waits beforehand if other vehicles are waiting at a red light where the opposing lane intersects with a right-turn lane.

Preferred vector map #

None in particular.

Incorrect vector map #

None in particular.


vm-03-13 Merging from private area, sidewalk#

Detail of requirements #

Set location=private for Lanelets within private property.

Give the private Lanelet that joins the public road a turn_direction tag, as in vm-03-02. Without this tag, the intersection module does not stop the vehicle before the public road.

When a road, which enters or exits private property, intersects with a sidewalk, create a Lanelet for that sidewalk (subtype:walkway).

Behavior of Autoware #
  • The vehicle stops temporarily before entering the sidewalk. The walkway module does this for a subtype:walkway Lanelet.
  • The vehicle comes to a stop before merging onto the public road. The intersection module does this ("merge from private") for a Lanelet on the path that has location=private and a turn_direction tag, when the next Lanelet on the path is not private.
A private area joins a road. A vehicle on the road turns into the private area, and a vehicle from the private area crosses the sidewalk and enters the road.Private areaSidewalkRoad
Vehicles enter and leave a private area across the sidewalk.

Preferred vector map #

The lanelets where a private area joins a road. The lanelets in the private area have location private. The road lanelets have location urban. The sidewalk that the vehicles cross is a walkway lanelet, and the road shoulders are road_shoulder lanelets.Laneletsubtype: roadlocation: privateLaneletsubtype: walkwayLaneletsubtype: road_shoulderLaneletsubtype: roadlocation: urban
Private lanelets have location=private, and the crossed sidewalk is a walkway lanelet.

Incorrect vector map #

None in particular.


vm-03-14 Road marking#

Detail of requirements #

If there is a stop line ahead of the guide lines in the intersection, ensure the following:

  • Create a Lanelet for the guide lines.
  • The Lanelet for the guide lines references a Regulatory Element (subtype:road_marking).
  • The Regulatory Element refers to the stop_line's Linestring.

The intersection module uses this stop line as the default stop line of the Lanelet.

Refer to Web.Auto Documentation - Creation of Regulatory Element for the method of creation in Vector Map Builder.

An intersection with guide lines for the right turn. A stop line is at the end of the guide lines in the intersection.Stop lineGuide line
A stop line at the end of the guide lines for a right turn.

Preferred vector map #

The lanelet that turns right refers to a road_marking regulatory element. The regulatory element refers to the stop line linestring at the end of the guide lines.Regulatory elementsubtype: road_markingrefersregulatory_elementLaneletturn_direction: rightLinestringtype: stop_line
The lanelet refers to a road_marking regulatory element, which refers to the stop line.

Incorrect vector map #

None in particular.


vm-03-15 Exclusive bicycle lane#

Detail of requirements #

If an exclusive bicycle lane exists, create a Lanelet with subtype:bicycle_lane for it. The bicycle lane and the road Lanelet next to it must share a Linestring. In left-hand traffic, the bicycle lane is on the left side of the road Lanelet. In right-hand traffic, it is on the right side. A bicycle lane connects only to other bicycle lanes. Autoware supports subtype:bicycle_lane in maps with format_version 2 or later. See Bicycle lane in the autoware_lanelet2_extension documentation.

Older maps model the bicycle lane as a Lanelet with subtype:road. In that case, set lane_change = no on the Linestring that the bicycle lane shares with the road. For bicycle lanes at intersections, assign a yield designation beneath the right_of_way for lanes that intersect with the vehicle's left-turn lane. (Refer to vm-03-10 and vm-03-11 for right_of_way).

Behavior of Autoware #

The blind spot module checks the side of a turning vehicle for bicycles and pedestrians. It uses the road_shoulder or bicycle_lane Lanelet next to the outermost road Lanelet on the turning side. If there is none, it uses the outermost road Lanelet.

The Japanese road sign for an exclusive bicycle lane: a blue square sign with an arrow and a bicycle in the left lane between two solid lines, and the word 専用 (exclusive).専用Arrow: the direction of travelBicycle: the lane is for bicycles専用: exclusiveSolid lines: the edgesof the bicycle laneDashed line: the lane lineof the road next to it
The road sign for an exclusive bicycle lane in Japan.
A road with an exclusive bicycle lane on each side, outside the lanes for vehicles.BICYCLE ONLYBICYCLE ONLYBicycle laneBicycle lane
A road with an exclusive bicycle lane on each side.

Preferred vector map #

The lanelets of a road with bicycle lanes. Each bicycle lane is a bicycle_lane lanelet that shares its linestring with the road lanelet next to it.Laneletsubtype: bicycle_laneLaneletsubtype: roadShared linestrings
Each bicycle lane is a bicycle_lane lanelet that shares a linestring with the road lanelet.

Incorrect vector map #

None in particular.