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 #
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.
Related Autoware module#
- Lane Change design - Autoware Universe Documentation
- Static Avoidance - Autoware Universe Documentation
- Dynamic Avoidance - Autoware Universe Documentation
- Out of lane design - Autoware Universe Documentation
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.
Preferred vector map #
Incorrect vector map #
Related Autoware module#
- Lane Change design - Autoware Universe Documentation
- Static Avoidance - Autoware Universe Documentation
- Dynamic Avoidance - Autoware Universe Documentation
- Out of lane design - Autoware Universe Documentation
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.
Preferred vector map #
Incorrect vector map #
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.
Preferred vector map #
Incorrect vector map #
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.
Preferred vector map #
Incorrect vector map #
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.
Preferred vector map #
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.
Caution#
The width depends on the laws of your country.
Preferred vector map #
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
Preferred vector map #
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.
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 #
Incorrect vector map #
vm-01-11 Centerline connection (1)#
Detail of requirements #
When you add centerlines to several Lanelets one after the other, connect the centerlines.
Preferred vector map #
Incorrect vector map #
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.
Preferred vector map #
Incorrect vector map #
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.
Preferred vector map #
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_launchenables 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.
Preferred vector map #
Incorrect vector map #
Related Autoware module#
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_boundaryof 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.
Preferred vector map #
Incorrect vector map #
Do not create a road shoulder Lanelet for a road without a road shoulder.
Related Autoware module#
- Static Avoidance - Autoware Universe Documentation
- Dynamic Avoidance - Autoware Universe Documentation
- Start Planner design - Autoware Universe Documentation
- Goal Planner design - Autoware Universe Documentation
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.
Preferred vector map #
Incorrect vector map #
None in particular.
Related Autoware module#
- Static Avoidance - Autoware Universe Documentation
- Dynamic Avoidance - Autoware Universe Documentation
- Goal Planner design - Autoware Universe Documentation
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.
Preferred vector map #
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.
Preferred vector map #
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.
Preferred vector map #
Incorrect vector map #
None in particular.