watonomous.github.io

  1. Software Division
  2. Software Division Home
  3. Path Planning Group

[ Software Division : Behavioral ]

Created by [ Rowan Dempster], last modified by [ Spencer Zhou] on Jan 31, 2020

W20 Lane Changing Behavioural Planner Spec

Spencer Zhou{.confluence-userlink .user-mention}  and Charles Zhang{.confluence-userlink .user-mention}

BP should publish a lateral command (keep the current lane / lane changing)

Architecture doc for Behavioural/Occupiable Year 3

Overview
Behavioural planner is the "brain" of the car. It is in charge of keeping track of the car's state by planning goal lines, changing the car's speed, stopping the car, and changing lanes. Behavioural planner is distinct from Occupiable Objects as Occupiable Objects keeps track of the state of individual objects, while Behavioural planner uses the information from Occupiable Objects to plan the car's state and path. Behavioural is distinct from Trajectory/Feedback as Behavioural decides "where" to go locally, but Trajectory/feedback control how to get there.

F19 Requirements:

W20 Requirements:

F19 Architecture

Overall, the pipeline will look like this:

\

[{.confluence-embedded-image .confluence-external-resource}]

Using the cutting lines (lines where the car should stop) passed from Occupiable, the car will decide where it wants to stop and set the goal appropriately. This will be based on proximity. Maybe we might need some sort of priority system where pedestrians are more important to stop for. probably not needed though. If the cutting layer is empty, the car will use a lookahead to determine where to set the goal line.

Notes:

Car State Machine:

[{.confluence-embedded-image .confluence-external-resource}]

\

The car will start in "waiting for [START]" before proceeding. We need substates for 'waiting for' because if our lane is blocked by construction, we need to know that and to switch lanes.

the "Turning" state is for intersections. ie: turn left, turn right.

Big question for Fall is lane changing and intersections.

Lanes and Trajectories

Processing will be passing Path Planning lanes and centre trajectories from an HD map.

[{.confluence-embedded-image .confluence-external-resource}]

\

The lanes and trajectories will be numbered in some order from negative (left road boundary) to zero (centre yellow line of the road) to positive (right road boundary). Exact details on labeling scheme are to be ironed out in [dev cycle 3.]{.inline-comment-marker data-ref=”0dcd6128-94ad-4f9f-9d9f-9a7a4e43be10”} Numbered lanes allow us to keep track of what lane we are in and how many possible total lanes there are. This way we can easily change lanes.

Lane trajectories allow us to bypass Trajectory planning by following a pre-defined lane centre. Trajectory/Feedback will still be used to avoid obstacles, but Behavioural planner will provide what desired trajectory to follow. having lane center lines also makes Lane switching significantly easier. We can tell the car to follow the trajectory from a different lane and the MPC should transfer the car to that lane fluidly.

Intersections:

Processing will pass us intersection lane lines and trajectories for every possible action (left, right, straight). The only lines passed to us will be valid paths that our car can follow. IE: only paths and lanes stemming from our current intersection entrance. This is not currently finished (DEV CYCLE 2), but is one of Processing's next goals. Based on the Waypoints given by global mapping, behavioural can decide which trajectory to follow. Occupiable will tell behavioural where and how long to stop for.

Global Mapping

Because we have lane centre lines, global mapping is simplified to a list of waypoints at intersections giving the desired turn. No additional information is required. One issue we will need to solve for Y3 is dynamic re-routing. How do we tell Global Mapping that our current path is blocked and where it is blocked?

Examples

Pedestrian

  1. Processing passes an environment containing a pedestrian
  2. Occupiable sees the pedestrian and places a cutting line 3m infront of the pedestrian, perpendicular to the car.
  3. Behavioural planner sees the cutting line, cuts the current lane's trajectory, and changes the state to "STOPPING"
  4. Car stops, behavioural planner is in "WAITING FOR PEDESTRIAN "
  5. Occupiable is still publishing the cutting lines for the pedestrian, so behavioural stays in "WAITING"
  6. Occupiable sees the pedestrian has finished crossing, stops publishing the cutting line.
  7. Behavioural changes states to "DRIVING (SPEED)"

Lane Change

  1. Global mapping passes a waypoint that says "Turn left at intersection "
  2. Behavioural sets the global goal("LEFT") in planner for Occupiable to read from. Environment gets filtered, leaving only intersection left turn lanes and regular lanes.
  3. Behavioural changes the current lane we're following to the left most trajectory line. (closest to zero but still on the same side of the road as the car)
  4. The car changes lanes. Publish a blinker message. Done changing lane, stop publishing blinker.
  5. Occupiable comes to the intersection. The left stop light is red, so publishes a stop line
  6. Car stops. Same steps as pedestrian in terms of waiting.
  7. Intersection is clear, follow the left turn trajectory in the intersection
    • Note here, we need to switch from the straight road trajectory to the left turn trajectory. might be somewhat challenging.
  8. Intersection is done, set the global goal for the next waypoint.

Document generated by Confluence on Dec 10, 2021 04:01

Atlassian