Routing

In order to operate, vehicles using the SDV model require a driving mission through a Route.

A GeoScenario Route is defined as a node, or composed by an ordered list of nodes (a way object, with minimum of 2 nodes) where the last node is the goal location. Each node is a 2D point (lat, lon) intersecting a valid Lanelet (a lanelet in which vehicles can drive). A Driving Mission is given to a vehicle when a route is assigned: "Drive using the shortest path from the vehicle start position to the last node n, while visiting each intermediate node in order along the Lanelet map".

k v description
gs* 'route' GS role key. Can be assigned to node, or way.
name string A name for this route. Must be unique for all routes.

<!-- GeoScenario Route-->
<node id='-20'  lat='49.00727551903' lon='8.4571390941' />
<node id='-21' lat='49.00816235206' lon='8.45828129331' />
<way id='-10'>
    <nd ref='-20' /> <!-- node 1-->
    <nd ref='-21' /> <!-- node n (goal)-->
    <tag k='gs' v='route' />
    <tag k='name' v='my_north_route' />
</way>

<!-- GeoScenario Route with single node (goal)-->
<node id='-23' lat='49.00727551903' lon='8.4571390941'>
    <tag k='gs' v='route' />
    <tag k='name' v='my_east_route' />
</node>

<!-- Vehicle-->
<node id=’-1’ lat='49.00726589979' lon='8.45704525575'> <!-- vehicle start position-->
   <tag k=’gs’ v=’vehicle’ />
   <tag k='btype' v='SDV' />
   <tag k="route" v="my_north_route" />  <!-- assigned route-->
</node> 

A route can be shared between multiple vehicle instances (although the initial position of the vehicle will complete the final route). The progress is tracked independently for each vehicle. The order of nodes in the document is arbitrary (the route order is defined from the reference inside the way object).

A route node is considered as visited only if the vehicle reaches the longitudinal distance along the intersecting Lanelet or any neighbours. The neighbour lanelets are evaluated for situations in which a vehicle is changing lanes along the route.

Cycle Routes are defined using multiple points along the same Lanelets, respecting the order. A node is considered visited only if the previous node was visited.

From the assigned route, a Route SubMap is the collection of Lanelets that are part of the route using the shortest path (blue). Multiple paralell lanelets will be part of the Route SubMap if all lanelets can be used to travel along the route.

Route in the Scenario Editor

A GeoScenario route using the Editor. In this example, one route is created as single Node (east) and as a Way (souh_est). Note how the line does not have to follow the lanelets, but the Nodes must fall inside a valid lanelet to compose the route. It is not recommended to place nodes where multiple lanelets overlap to avoid ambiguity. The light_vehicle can be assigned with either of the routes, while light_vehicle2 can only be assigned to east route in this map (unless there is a valid route with the remaining of the map that takes the vehicle to the north lane first.

Routes and the Global Path

A Global Path (dashed, red line) is composed by the combination of central lines from all lanelets along the route. Global Paths can be disjoint if routes require lane switchings.

The SDV model requires a valid GeoScenario Route with Global Path to operate. If the vehicle deviates from the route submap following a scenario event or an unexpected traffic configuration (for example, a vehicle blocking the road during a required lane change), a new Route Submap must be recomputed using the current location as start, followed by the remaining (non-visited) nodes.

GSServer

  • The initial Route and Global Path are processed during the scenario startup and stored individually for each vehicle to track progress.
  • The quality of the map can affect the quality of the Global Path. For example, sparse points and ill-aligned lane boundaries can generate paths with abrupt changes in heading rough curvature. This will affect the vehicle motion during a maneuver execution. As a solution, we fit a spline over the central line, and generate new points with configurable sparseness. However, this method can also generate problems depending on the lane boundary configuration. Other methods can be used.