Skip to content

Lane

The drawings on this page use left-hand traffic, as in Japan: vehicles drive on the left side of the road. For right-hand traffic, swap left and right. In the map drawings, a colored area is a Lanelet, and a line with dots is a Linestring and its points.


Requirements#

vm-01-01 Lanelet basics#

Detail of requirements #

The road's Lanelets must comply with the following requirements.

  • subtype:road
  • location:urban, for public roads
  • Align the Lanelet's direction with the direction in which the vehicle moves. (You can show the Lanelet direction as arrows in Vector Map Builder.)
  • Set whether a lane change is permitted or not, according to vm-01-02.
  • Set the Linestring IDs for the Lanelet's left_bound and right_bound. See vm-01-03.
  • tag: one_way=yes. Do not use one_way=no on a road Lanelet. With one_way=no, the Lanelet2 traffic rules let a vehicle drive the Lanelet in both directions, and the routing graph of Autoware can use it in the reverse direction. But the route of Autoware keeps only the ID of each Lanelet, not the direction, and Autoware plans the path along the direction of the Lanelet. For a narrow road on which the vehicle drives in both directions, see vm-01-14.
  • Connect the Lanelet to the next and the previous Lanelets, except at the start or the end of the road. Two Lanelets are connected when the end points of the left and right bounds of the first Lanelet are the start points of the bounds of the next Lanelet.
  • Position the points (x, y, z) of the Lanelet to align with the PCD Map, both laterally and in elevation. The height of a Point must be the ellipsoidal height (WGS84). Refer to vm-07-04.

Preferred vector map #

A road lanelet between its left bound and its right bound. Arrows show its direction. Its tags are subtype road, location urban, and one_way yes.Laneletsubtype: roadlocation: urbanone_way: yesDirectionLeft boundRight bound
A road Lanelet, its direction, and its left and right bounds.

vm-01-02 Allowance for lane changes#

Detail of requirements #

Add a tag to the Lanelet's Linestring that permits or prohibits a lane change.

  • Permit lane_change=yes
  • Prohibit lane_change=no

Set the Linestring subtype according to the type of line.

  • solid
  • dashed

Note

Lanelet2 reads the lane_change tag first. If a Linestring has no lane_change tag, Lanelet2 permits a lane change only across a Linestring with type:line_thin or type:line_thick and subtype:dashed. The subtypes dashed_solid and solid_dashed permit a lane change in one direction only.

Referenced from Japan's Road Traffic Law #

The tags of the drawing follow the legal background in Japan:

  • White dashed lines and white solid lines between lanes: the law does not prohibit a lane change across them. Set lane_change=yes.
  • Yellow solid lines between lanes: this road marking prohibits a lane change. Set lane_change=no.

Article 26-2, paragraph 3 of the Road Traffic Act prohibits a lane change across a road marking that prohibits a change of course. The ministerial order on road signs and road markings gives this marking (number 102-2) the color yellow. For other countries, use the local traffic law.

Three lane lines: a white dashed line, a white solid line, and a yellow solid line, with the subtype and lane_change tags of each linestring.White dashed linesubtype: dashedlane_change: yesWhite solid linesubtype: solidlane_change: yesYellow solid linesubtype: solidlane_change: no
The three types of lane lines and the tags of their Linestrings.

vm-01-03 Linestring sharing#

Detail of requirements #

When you create Lanelets that are physically next to each other, make them share the Linestring between them.

Behavior of Autoware #

Autoware finds the Lanelet next to the current Lanelet through the shared Linestring. If the two Lanelets share a Linestring, the following behaviors become possible:

  • The vehicle moves out of its lane to avoid obstacles.
  • The vehicle drives slightly out of its lane in a curve.
  • The vehicle changes lanes.
A road with two lanes in each direction. The vehicle drives in the left lane and can change to the next lane.The vehicle can change lanes,avoid obstacles, and drive outof its lane in a curve.
A road with two lanes in each direction.

Preferred vector map #

Four lanelets side by side. Each lane line is one linestring that the two lanelets next to it share.One linestring at each lane line.The two lanelets next to it share it.
Each lane line is one Linestring that the two Lanelets next to it share.

Incorrect vector map #

Incorrect: four lanelets side by side, and each lanelet has its own linestrings. Two linestrings lie at each lane line.Each lanelet has its own linestrings.The lanelets do not share them.
Each Lanelet has its own Linestrings, so two Linestrings lie at each lane line.

vm-01-04 Sharing of the centerline of lanes for opposing traffic#

Detail of requirements #

When the vehicle's Lanelet and the opposite Lanelet physically touch, the two Lanelets must share the Linestring of the road center line. For that purpose, the two Lanelets must have the same length.

Behavior of Autoware #

The vehicle can avoid an obstacle through the opposite lane. Autoware finds the opposite Lanelet through the shared Linestring. The static obstacle avoidance module uses the opposite lane when its parameter use_lane_type is opposite_direction_lane. This value is the default.

A road with one lane in each direction. To pass a parked vehicle, the ego vehicle moves across the road center line into the opposite lane.Parked vehiclePath around the vehicleRoad center line
The vehicle moves into the opposite lane to pass a parked vehicle.

Preferred vector map #

Two lanelets in opposite directions share the linestring at the road center line, and they have the same length.The two lanelets usethe same linestring.The two lanelets havethe same length.
The two Lanelets share the Linestring of the road center line and have the same length.

Incorrect vector map #

Incorrect: each direction has its own linestring at the road center line, and the opposite lane is split, so the lanelets do not have the same length.The two directions do notuse the same linestring.The opposite lane is split, so thelanelets do not have the same length.
The two directions have separate Linestrings, and the Lanelets do not have the same length.

vm-01-05 Lane geometry#

Detail of requirements #

The geometry of the road Lanelet must comply with the following:

  • The left and right Linestrings must follow the lane lines of the road.
  • The end of a Lanelet must meet the start of the next Lanelet in a straight line.
  • The outline must be smooth, not jagged or bumpy, except for L-shaped cranks.
A curved road with one lane in each direction, a dashed road center line, and road shoulders. The ego vehicle follows its lane through the curve.Road center lineRoadRoad shoulder
A curved road with one lane in each direction.

Preferred vector map #

A lanelet with subtype road and one_way yes covers the left lane of the curved road. Its bounds follow the lane lines.Laneletsubtype: roadone_way: yesThe bounds follow the lane lines.They are smooth, and the endsof the lanelet are straight.
The bounds of the Lanelet follow the lane lines and are smooth.

Incorrect vector map #

Incorrect: a lanelet whose end has a kink and is not a straight line, whose right bound is uneven in the curve, and whose right bound does not follow the lane line.The end of the lanelet does notmeet the next lanelet in astraight line.The bound is unevenand not smooth.The bound does not followthe lane line.
The end of the Lanelet is not straight, and its right bound is uneven and leaves the lane line.

vm-01-06 Line position (1)#

Detail of requirements #

Put the Linestring of the road center line in the exact middle of the road marking.

A road with one lane in each direction and a dashed road center line. The ego vehicle and an oncoming vehicle drive in opposite directions.Road center line
A road with one lane in each direction and a dashed road center line.

Preferred vector map #

Close-up of a dashed road center line. The linestring is in the middle of the marking.The linestring is in themiddle of the marking.
Close-up: the Linestring is in the middle of the marking.

Incorrect vector map #

Incorrect: close-up of a dashed road center line. The linestring is at the edge of the marking, not in the middle.The linestring is at the edge ofthe marking, not in the middle.
Close-up: the Linestring is at the edge of the marking.

vm-01-07 Line position (2)#

Detail of requirements #

If the road has lines on its outer sides, put each Linestring in the middle of the line.

A one-lane road with wide edge lines on both sides. The ego vehicle drives between them.Edge lines
A road with wide edge lines on both sides.

Preferred vector map #

A lanelet on a road with wide edge lines. Each linestring is in the middle of its edge line.Each linestring is in themiddle of its edge line.Linestring
Each Linestring is in the middle of its edge line.

Incorrect vector map #

None in particular.


vm-01-08 Line position (3)#

Detail of requirements #

If the road has no lines on its outer sides, put the Linestring 0.5 m inside the road edge.

A road with one lane in each direction and no lines on the outer sides. The ego vehicle and an oncoming vehicle drive in opposite directions.No line on the outer sideNo line onthe outer side
A road with no lines on its outer sides.
Caution#

The width depends on the laws of your country.

Preferred vector map #

Each outer linestring is 0.5 m inside the road edge, because the road has no lines on its outer sides.0.5 m0.5 mEach linestring is 0.5 minside the road edge.
Each outer Linestring is 0.5 m inside the road edge.

Incorrect vector map #

None in particular.


vm-01-09 Speed limits#

Detail of requirements #

In the following cases, add a speed limit (tag:speed_limit) in km/h to the Lanelet (subtype:road) on which the vehicle drives.

  • A speed limit road sign exists.
  • You want a lower speed limit, for example on narrow roads.

If a Lanelet has no speed_limit tag, Lanelet2 uses a default speed limit from its location and subtype. For location:urban and subtype:road, the default is 50 km/h.

Autoware settings and behaviors control the following. They do not need tags:

  • The maximum velocity of the vehicle
  • Slower speeds where they are necessary, for example in curves and on downhill roads
A round speed limit sign that shows 20.20Speed limit road sign
A speed limit road sign.

Preferred vector map #

A speed limit sign stands next to the left lane. The lanelet of this lane has subtype road and speed_limit 20.20Laneletsubtype: roadspeed_limit: 20
The Lanelet next to the sign has speed_limit 20.

Incorrect vector map #

None in particular.


vm-01-10 Centerline#

Detail of requirements #

By default, Autoware drives along the midpoints between the left and right Linestrings of a Lanelet.

If the vehicle must drive to the left or right of this midpoint for a reason, add a centerline to the Lanelet. The centerline is a Linestring that the Lanelet refers to with the role centerline. Give the centerline a smooth shape that the vehicle can drive.

By default, the map loader of Autoware (parameter use_waypoints, true by default) stores the centerline from the map as the waypoints of the Lanelet. Only the path planning of the ego vehicle uses these waypoints. Other modules, for example the prediction of other vehicles, use the midpoints between the bounds.

The ego vehicle drives in a wide lane and moves to the right for a short distance, then back to the middle of the lane.Drives to the right of the middleof the lane for a short distanceThen back to the middle of the laneEgo vehicle
The vehicle moves to the right for a short distance, then back.
Caution#

The centerline of a Lanelet is a different concept from the road center line (the line that divides the lanes of opposite directions).

Preferred vector map #

A lanelet with a centerline linestring that moves to the right and back with smooth diagonal parts.Centerline of the laneletA linestringSmooth shape that thevehicle can drive
The centerline moves to the right and back with smooth diagonal parts.

Incorrect vector map #

Incorrect: a lanelet with a centerline that moves to the right and back in sharp steps.Centerline of the laneletA linestringNot smooth. The vehiclecannot drive this shape.
The centerline moves in sharp steps that the vehicle cannot drive.

vm-01-11 Centerline connection (1)#

Detail of requirements #

When you add centerlines to several Lanelets one after the other, connect the centerlines.

On a long road, the ego vehicle moves to the right and back two times.Lanelet with an added centerlineLanelet with an added centerlineLanelet border
The vehicle moves to the right and back two times on a long road.

Preferred vector map #

Two lanelets one after the other, each with a centerline. The two centerlines meet at the same point on the border between the lanelets.Centerline of the next laneletA linestringCenterline of the first laneletA linestringThe two centerlines connectat the same point on thelanelet border.
The two centerlines meet at the same point on the Lanelet border.

Incorrect vector map #

Incorrect: two lanelets one after the other, each with a centerline. The two centerlines do not meet at the border between the lanelets.The centerlines arenot connected.
The two centerlines end at different points on the Lanelet border.

vm-01-12 Centerline connection (2)#

Detail of requirements #

If a Lanelet with a centerline connects to Lanelets without one, put the start and end points of the centerline in the middle of the Lanelet. Give the centerline a smooth shape that the vehicle can drive.

The ego vehicle moves to the right and back in the middle part of a long road only.
The vehicle moves to the right and back in the middle part of the road only.

Preferred vector map #

Three lanelets one after the other. Only the middle lanelet has a centerline, and the centerline starts and ends in the middle of the lanelet.LaneletsThe centerline startsand ends in the middleof the lanelet.
The centerline starts and ends in the middle of the Lanelet.

Incorrect vector map #

Incorrect: three lanelets one after the other. The centerline of the middle lanelet does not start and end in the middle of the lanelet.LaneletsThe centerline does notstart and end in themiddle of the lanelet.
The centerline does not start and end in the middle of the Lanelet.

vm-01-13 Roads with no centerline (1)#

Detail of requirements #

If a road has no road center line but is wide enough for the vehicle and an oncoming vehicle to pass each other, put two Lanelets side by side, with the shared Linestring in the middle of the road.

A road without a road center line that is wide enough for the ego vehicle and an oncoming vehicle to pass each other.No road center line.The road is wide enough for twovehicles to pass each other.
A wide road without a road center line.

Preferred vector map #

Two lanelets in opposite directions side by side in the middle of the road. They share one linestring, which has no marking on the road.Laneletsubtype: roadone_way: yesThe two lanelets shareone linestring.
Two Lanelets side by side share one Linestring in the middle of the road.

Incorrect vector map #

None in particular.


vm-01-14 Roads with no centerline (2)#

Detail of requirements #

Apply this requirement if all the following conditions are satisfied:

  • The road is a single lane without a road center line, and it is too narrow for the vehicle and an oncoming vehicle to pass each other while both move.
  • If other vehicles use this road, an oncoming vehicle can pass the autonomous vehicle when the autonomous vehicle moves to the left side of the road and stops. If they cannot pass each other in this way (for example, when one vehicle must back up), other vehicles must not enter the road while the autonomous vehicle is on it.
  • The autonomous vehicle drives forth and back on this road.

Requirement for Vector Map creation:

  • Put two Lanelets on top of each other. The two Lanelets use the same two Linestrings in opposite directions: the left bound of one Lanelet is the right bound of the other.
Supplementary information#
  • Whether this case applies depends on the local operation policies and the vehicle specifications. Decide it with the map requestor.
  • The bidirectional traffic module of the behavior path planner finds such pairs of Lanelets. The Lanelets need no special tags. On these Lanelets, the module moves the path of the vehicle to the left of the road center. If it detects an oncoming vehicle, it moves the vehicle to the left side, stops it, and waits until the oncoming vehicle has passed. The default preset of autoware_launch enables this module.
  • The module always gives way in this way. It does not back up the vehicle, and it does not move the vehicle into a road shoulder to give way. It cannot handle cases in which the vehicles cannot pass each other this way.
A narrow road without a road center line. The ego vehicle drives along it outward, and later drives back on it in the return direction.ReturnThe same vehicle, laterOutward
The vehicle drives outward on a narrow road and later comes back on it.

Preferred vector map #

Two lanelets in opposite directions lie on top of each other on the narrow road. Both use the same two linestrings.Lanelet (outward)subtype: roadone_way: yesLanelet (return)subtype: roadone_way: yesBoth lanelets use the same twolinestrings, in opposite directions.
Two Lanelets in opposite directions lie on top of each other and use the same Linestrings.

Incorrect vector map #

Incorrect: the narrow road is split into a left part and a right part, with a lanelet in each part.IncorrectThe road is split into a left partand a right part, and the laneletsare side by side.
The road is split into a left part and a right part, with the Lanelets side by side.

vm-01-15 Road shoulder#

Detail of requirements #

If the road has a shoulder, put a Lanelet for the road shoulder (subtype:road_shoulder) on it. You do not need to create this Lanelet inside intersections.

The road shoulder's Lanelet and the sidewalk share the Linestring between them (type:road_border).

A road shoulder Lanelet must not be next to another road shoulder Lanelet.

A road Lanelet must be next to the road shoulder Lanelet.

Behavior of Autoware #
  • Autoware can start from the road shoulder and can also stop on the road shoulder at the goal.
  • The Autoware parameter margin_from_boundary of the goal planner sets the margin between the vehicle and the edge of the road shoulder at the goal. You do not need to consider it when you create the Vector Map.
  • The goal planner does not select a goal on the road shoulder Lanelet where the vehicle overlaps with any of the following:
    • A Polygon of a no_parking_area
    • A Polygon of a no_stopping_area
  • The goal planner and the start planner do not look for intersections or crosswalks. If the vehicle must not stop on the road shoulder near or in an intersection, or on a crosswalk, cover that place with a no_parking_area or a no_stopping_area Polygon. The road shoulder Lanelet must refer to its regulatory element. See vm-06-02 and vm-06-03. This is a requirement for the map, not a check that Autoware does.

The Linestring at the boundary of the road shoulder does not need tag:lane_change=yes.

A curved road with a road shoulder and a sidewalk on each side. Outside the sidewalks is off road.RoadRoad shoulderSidewalkOff road
A curved road with a road shoulder and a sidewalk on each side.

Preferred vector map #

Road shoulder lanelets on both road shoulders. The linestring between each road shoulder and its sidewalk has type road_border.Laneletsubtype: road_shoulderone_way: yesLinestring between the roadshoulder and the sidewalktype: road_borderSidewalk
Road shoulder Lanelets, and road_border Linestrings between the road shoulders and the sidewalks.

Incorrect vector map #

Do not create a road shoulder Lanelet for a road without a road shoulder.

Incorrect: a road shoulder lanelet on a road that has no road shoulder. The strip outside the edge line is a side strip, and outside it is off road.Side stripOff roadIncorrect: a road shoulder laneleton the side strip. This road hasno road shoulder.
A road shoulder Lanelet on a road that has a side strip, not a road shoulder.

vm-01-16 Road shoulder Linestring sharing#

Detail of requirements #

The Lanelets of the road shoulder and of the road next to it must share a Linestring.

A curved road with a road shoulder and a sidewalk on each side. Outside the sidewalks is off road.RoadRoad shoulderSidewalkOff road
A curved road with a road shoulder and a sidewalk on each side.

Preferred vector map #

Road lanelets and road shoulder lanelets. Each road shoulder lanelet shares the linestring at the edge line with the road lanelet next to it.Laneletsubtype: road_shoulderone_way: yesLaneletsubtype: roadone_way: yesEach road shoulder lanelet shares thelinestring at the edge line with theroad lanelet next to it.
Each road shoulder Lanelet shares the Linestring at the edge line with the road Lanelet next to it.

Incorrect vector map #

None in particular.


vm-01-17 Side strip#

Detail of requirements #

Put a Lanelet (subtype:pedestrian_lane) on the side strip. A side strip is the strip outside the edge line of a road that has no sidewalk. You do not need to create this Lanelet inside intersections.

The outer Linestring of the side strip's Lanelet must have type:road_border.

A curved road with a side strip on each side and no sidewalk. Outside the side strips is off road.RoadSide stripOff road
A curved road with a side strip on each side and no sidewalk.

Preferred vector map #

Pedestrian lane lanelets on both side strips. The linestring between each side strip and off road has type road_border.Laneletsubtype: pedestrian_laneLinestring between the sidestrip and off roadtype: road_border
Pedestrian lane Lanelets on the side strips, with road_border Linestrings on their outer sides.

Incorrect vector map #

None in particular.


vm-01-18 Side strip Linestring sharing#

Detail of requirements #

The Lanelet of the side strip and the road Lanelet next to it must share a Linestring.

A curved road with a side strip on each side and no sidewalk. Outside the side strips is off road.RoadSide stripOff road
A curved road with a side strip on each side and no sidewalk.

Preferred vector map #

Road lanelets and side strip lanelets. Each side strip lanelet shares the linestring at the edge line with the road lanelet next to it.Laneletsubtype: pedestrian_laneLaneletsubtype: roadone_way: yesEach side strip lanelet sharesthe linestring at the edge linewith the road lanelet next to it.
Each side strip Lanelet shares the Linestring at the edge line with the road Lanelet next to it.

Incorrect vector map #

None in particular.


vm-01-19 Walkway#

Detail of requirements #

Put a sidewalk Lanelet (subtype:walkway) only where the path of the vehicle crosses a sidewalk, for example at the entrance of a private area. Do not put one where the vehicle does not cross the sidewalk.

The Lanelet (subtype:walkway) must cover the part of the sidewalk that the vehicle crosses, plus 3 m before and 3 m after it.

Behavior of Autoware #

The walkway module stops the vehicle before a walkway Lanelet on its path. Then the vehicle continues.

The ego vehicle turns right from the road into a private area. On the way, it crosses the sidewalk.RoadRoad shoulderSidewalkOff roadSidewalk that the vehicle crossesPrivate area
The vehicle crosses the sidewalk to enter a private area.

Preferred vector map #

A walkway lanelet on the sidewalk where the vehicle crosses it to enter the private area. It reaches 3 m before and 3 m after the crossing.3 m3 mLaneletsubtype: walkwayPrivate area
A walkway Lanelet covers the crossing and 3 m on each side of it.

Incorrect vector map #

None in particular.