opencda.core.plan package

Submodules

opencda.core.plan.behavior_agent module

This module implements an agent that roams around a track following random waypoints and avoiding other vehicles. The agent also responds to

traffic lights, traffic signs, and has different possible configurations.

class opencda.core.plan.behavior_agent.BehaviorAgent(vehicle, carla_map, config_yaml)

Bases: object

A modulized version of carla BehaviorAgent.

Parameters
  • vehicle (carla.Vehicle) – The carla.Vehicle. We need this class to spawn our gnss and imu sensor.

  • carla_map (carla.map) – The carla HD map for simulation world.

  • config (dict) – The configuration dictionary of the localization module.

_ego_pos

Posiion of the ego vehicle.

Type

carla.position

_ego_speed

Speed of the ego vehicle.

Type

float

_map

The HD map of the current simulation world.

Type

carla.map

max_speed

The current speed limit of the ego vehicles.

Type

float

break_distance

The current distance needed for ego vehicle to reach a steady stop.

Type

float

_collision_check

A collision check class to estimate the collision with front obstacle.

Type

collisionchecker

ignore_traffic_light

Boolean indicator of whether to ignore traffic light.

Type

boolean

overtake_allowed

Boolean indicator of whether to allow overtake.

Type

boolean

_local_planner

A carla local planner class for behavior planning.

Type

LocalPlanner

lane_change_allowed

Boolean indicator of whether the lane change is allowed.

Type

boolean

white_list

The white list contains all position of target platoon member for joining.

Type

list

debug_helper

The helper class that help with the debug functions.

Type

PlanDebugHelper

add_white_list(vm)

Add vehicle manager to white list.

car_following_manager(vehicle, distance, target_speed=None)

Module in charge of car-following behaviors when there’s someone in front of us.

Parameters
  • vehicle (carla.vehicle)) – Leading vehicle to follow.

  • distance (float) – distance from leading vehicle.

  • target_speed (float) – The target car following speed.

Returns

  • target_speed (float) – The target speed for the next step.

  • target_loc (carla.Location) – The target location.

collision_manager(rx, ry, ryaw, waypoint, adjacent_check=False)

This module is in charge of warning in case of a collision.

Parameters
  • rx (float) – x coordinates of plan path.

  • ry (float) – y coordinates of plan path.

  • ryaw (float) – yaw angle.

  • waypoint (carla.waypoint) – current waypoint of the agent.

  • adjacent_check (bool) – Whether it is a check for adjacent lane.

get_local_planner()

return the local planner

lane_change_management()

Identify whether a potential hazard exits if operating lane change.

Returns

vehicle_state – Whether the lane change is dangerous.

Return type

bool

overtake_management(obstacle_vehicle)

Overtake behavior.

Parameters

obstacle_vehicle (carla.vehicle) – The obstacle vehicle.

Returns

vehicle_state – Flag indicating whether the vehicle is in dangerous state.

Return type

boolean

reroute(spawn_points)

This method implements re-routing for vehicles approaching its destination. It finds a new target and

computes another path to reach it.

Parameters

spawn_points (list) – List of possible destinations for the agent.

run_step(target_speed=None, collision_detector_enabled=True, lane_change_allowed=True)

Execute one step of navigation

Parameters
  • collision_detector_enabled (bool) – Whether to enable collision detection.

  • target_speed (float) – A manual order to achieve certain speed.

  • lane_change_allowed (bool) – Whether lane change is allowed. This is passed from platoon behavior agent.

Returns

control – Vehicle control of the next step.

Return type

carla.VehicleControl

set_destination(start_location, end_location, clean=False, end_reset=True, clean_history=False)

This method creates a list of waypoints from agent’s position to destination location based on the route returned by the global router.

Parameters
  • end_reset (bool) – Flag to reset the waypoint queue.

  • start_location (carla.location) – Initial position.

  • end_location (carla.location) – Final position.

  • clean (bool) – Flag to clean the waypoint queue.

  • clean_history (bool) – Flag to clean the waypoint history.

traffic_light_manager(waypoint)

This method is in charge of behaviors for red lights and stops. WARNING: What follows is a proxy to avoid having a car brake after running a yellow light. This happens because the car is still under the influence of the semaphore, even after passing it. So, the semaphore id is temporarely saved to ignore it and go around this issue, until the car is near a new one.

Parameters

waypoint (carla.waypoint) – Current waypoint of the agent.

update_information(ego_pos, ego_speed, objects)

Update the perception and localization information to the behavior agent.

Parameters
  • ego_pos (carla.Transform) – Ego position from localization module.

  • ego_speed (float) – km/h, ego speed.

  • objects (dict) – Objects detection results from perception module.

white_list_match(obstacles)

Match the detected obstacles with the white list. Remove the obstacles that are in white list. The white list contains all position of target platoon member for joining.

Parameters

obstacles (list) – A list of carla.Vehicle or ObstacleVehicle

Returns

new_obstacle_list – The new list of obstacles.

Return type

list

opencda.core.plan.collision_check module

This module is used to check collision possibility

class opencda.core.plan.collision_check.CollisionChecker(time_ahead=1.2, circle_radius=1.3, circle_offsets=None)

Bases: object

The default collision checker module.

Parameters
  • time_ahead (float) – how many seconds we look ahead in advance for collision check.

  • circle_radius (float) – The radius of the collision checking circle.

  • circle_offsets (float) – The offset between collision checking circle and the trajectory point.

adjacent_lane_collision_check(ego_loc, target_wpt, overtake, world)

Generate a straight line in the adjacent lane for collision detection during overtake/lane change.

Parameters
  • -ego_loc (carla.Location) – Ego Location.

  • -target_wpt (carla.Waypoint) – the check point in the adjacent at a far distance.

  • -overtake (bool) – indicate whether this is an overtake or normal lane change behavior.

  • -world (carla.World) – CARLA Simulation world, used to draw debug lines.

Returns

the x coordinates of the collision check line in

the adjacent lane

-ry (list): the y coordinates of the collision check line in

the adjacent lane

-ryaw (list): the yaw angle of the the collision check line in

the adjacent lane

Return type

-rx (list)

collision_circle_check(path_x, path_y, path_yaw, obstacle_vehicle, speed, adjacent_check=False)

Use circled collision check to see whether potential hazard on the forwarding path.

Parameters
  • -adjacent_check (boolean) – Indicator of whether do adjacent check. Note: always give full path for adjacent lane check.

  • -speed (float) – ego vehicle speed in m/s.

  • -path_yaw (float) – a list of yaw angles

  • -path_x (list) – a list of x coordinates

  • -path_y (list) – a list of y coordinates

  • -obstacle_vehicle (carla.vehicle) – potention hazard vehicle on the way

Returns

Flag indicate whether the

current range is collision free.

Return type

-collision_free (boolean)

is_in_range(ego_pos, target_vehicle, candidate_vehicle, carla_map)

Check whether there is a obstacle vehicle between target_vehicle and ego_vehicle during back_joining.

Parameters
  • carla_map (carla.map) – Carla map of the current simulation world.

  • ego_pos (carla.transform) – Ego vehicle position.

  • target_vehicle (carla.vehicle) – The target vehicle that ego vehicle trying to catch up with.

  • candidate_vehicle (carla.vehicle) – The possible obstacle vehicle blocking the ego vehicle and target vehicle.

Returns

  • detection result (boolean)

  • Indicator of whether the target vehicle is in range.

opencda.core.plan.drive_profile_plotting module

Tools to plot velocity, acceleration, and curvation.

opencda.core.plan.drive_profile_plotting.draw_acceleration_profile_single_plot(acceleration)

Draw velocity profiles in a single plot.

Parameters

acceleration (list) – The vehicle acceleration profile saved in a list.

opencda.core.plan.drive_profile_plotting.draw_dist_gap_profile_singel_plot(gap_list)

Draw distance gap profiles in a single plot.

Parameters

gap_list (list) – The vehicle front distance gap profile saved in a list.

opencda.core.plan.drive_profile_plotting.draw_sub_plot(velocity_list, acceleration_list, time_gap_list, distance_gap_list, ttc_list)

This is a specific function that draws 4 in 1 images for trajectory following task.

Parameters
  • velocity_list (list) – The vehicle velocity profile saved in a list.

  • distance_gap_list (list) – The vehicle distance gap profile saved in a list.

  • time_gap_list (list) – The vehicle time gap profile saved in a list.

  • acceleration_list (list) – The vehicle acceleration profile saved in a list.

  • ttc_list (list) – The ttc list.

opencda.core.plan.drive_profile_plotting.draw_time_gap_profile_singel_plot(gap_list)

Draw inter gap profiles in a single plot.

Parameters

gap_list (list) – The vehicle front time gap profile saved in a list.

opencda.core.plan.drive_profile_plotting.draw_ttc_profile_single_plot(ttc_list)

Draw ttc.

Parameters

ttc_list (list) – The vehicle time to collision profile saved in a list.

opencda.core.plan.drive_profile_plotting.draw_velocity_profile_single_plot(velocity_list)

Draw velocity profiles in a single plot.

Parameters

velocity_list (list) – The vehicle velocity profile saved in a list.

opencda.core.plan.global_route_planner module

This module provides GlobalRoutePlanner implementation.

class opencda.core.plan.global_route_planner.GlobalRoutePlanner(dao)

Bases: object

This class provides a very high level route plan. Instantiate the class by passing a reference to A GlobalRoutePlannerDAO object.

Parameters

dao (carla.dao) – A global plan that contains routes from start to end.

_topology

The topology graph of the current routes.

Type

carla.topology

_graph

The node-edge graph of the current routes.

Type

nx.DiGraph

_id_map

A map constructed with road segment IDs.

Type

dict

_road_id_to_edge

A mapping that reference road it to edge in the graph.

Type

list

_intersection_end_node

The node ID of at the end of the intersection.

Type

int

_previous_decision

The previous behavioral option of the ego vehicle.

Type

carla.RoadOption

abstract_route_plan(origin, destination)

The function that generates the route plan based on origin and destination.

Parameters
  • -origin (carla.Location) – object of the route’s start position.

  • -destination (carla.Location) – object of the route’s end position.

Returns

List of turn by turn navigation decisions

as agents.navigation.local_planner.RoadOption.

Return type

  • plan (list)

setup()

Performs initial server data lookup for detailed topology and builds graph representation of the world map.

trace_route(origin, destination)

This method returns list of (carla.Waypoint, RoadOption) from origin to destination.

opencda.core.plan.global_route_planner_dao module

This module provides implementation for GlobalRoutePlannerDAO

class opencda.core.plan.global_route_planner_dao.GlobalRoutePlannerDAO(wmap, sampling_resolution)

Bases: object

This class is the data access layer for fetching data from the carla server instance for GlobalRoutePlanner.

Parameters -wmap : carla.world

The current carla simulation world.

-sampling_resolutionfloat

sampling distance between waypoints.

get_resolution()

Return the sampling resolution.

get_topology()

Accessor for topology. This function retrieves topology from the server as a list of road segments as pairs of waypoint objects, and processes the topology into a list of dictionary objects.

return topology

entry - waypoint of entry point of road segment entryxyz- (x,y,z) of entry point of road segment exit - waypoint of exit point of road segment exitxyz - (x,y,z) of exit point of road segment path - list of waypoints separated by 1m from entry

to exit

get_waypoint(location)

The method returns waypoint at given location.

Parameters

-location (carla.lcoation) – Vehicle location.

Returns

Newly generated waypoint close to location.

Return type

-waypoint (carla.waypoint)

opencda.core.plan.local_planner_behavior module

This module contains a local planner to perform low-level waypoint following based on PID controllers.

class opencda.core.plan.local_planner_behavior.LocalPlanner(agent, carla_map, config_yaml)

Bases: object

LocalPlanner implements the basic behavior of following a trajectory of waypoints that is generated on-the-fly.The low-level motion of the vehicle is computed by using lateral and longitudinal PID controllers. When multiple paths are available (intersections) this local planner makes a random choice.

Parameters -agent : carla.agent

The carla.agent that applying vehicle contorl.

-carla_mapcarla.map

The HD map of the current simulation world.

-configdict

The configuration dictionary of the trajectory planning module.

Attributes -_vehicle : carla.vehicle

The caral vehicle objcet.

-_ego_poscarla.position

The current position of the ego vehicle.

-_ego_speedfloat

The current speed of the ego vehicle.

-waypoints_queuedeque

The waypoint deque of the current plan.

-_waypoint_bufferdeque

A buffer deque to store waypoints of the next steps.

-_long_plan_debuglist

A list that stores the waypoints of global plan for debug purposes.

-_trajectory_bufferdeque

A deque buffer that stores the current trajectory.

-_history_bufferdeque

A deque buffer that stores the trajectory history of the ego vehicle.

-lane_changeboolean

A indicator used to identify whether lane change is operated

-lane_id_changeboolean
In some corner cases, the id is not changed but we regard it

as lane change due to large lateral diff.

generate_path()

Generate the smooth path using cubic spline.

Returns

List of planned path points’ x coordinates. -ry (list): List of planned path points’ y coordinates. -ryaw (list): List of planned path points’ yaw angles. -rk (list): List of planned path points’ curvatures.

Return type

-rx (list)

generate_trajectory(rx, ry, rk)

Sampling the generated path and assign speed to each point.

Parameters
  • -rx (list) – List of planned path points’ x coordinates.

  • -ry (list) – List of planned path points’ y coordinates.

  • -rk (list) – List of planned path points’ curvatures.

  • -debug (boolean) – whether to draw the whole plan path

get_trajetory()

Get the trajetory.

pop_buffer(vehicle_transform)

Remove waypoints the ego vehicle has achieved.

run_step(rx, ry, rk, target_speed=None, trajectory=None, following=False)

Execute one step of local planning which involves running the longitudinal and lateral PID controllers to follow the smooth waypoints trajectory.

Parameters
  • -rx (list) – List of planned path points’ x coordinates.

  • -ry (list) – List of planned path points’ y coordinates.

  • -ryaw (list) – List of planned path points’ yaw angles.

  • -rk (list) – List of planned path points’ curvatures.

  • -following (boolean) – Indicator of whether the vehicle is under

  • status. (following) –

  • -trajectory (list) – Pre-generated car-following trajectory only for platoon members.

  • -target_speed (float) – The ego vehicle’s desired speed.

Returns

Next trajectory point’s target speed -waypoint (carla.waypoint): Next trajectory point’s waypoint.

Return type

-speed (float)

set_global_plan(current_plan, clean=False)

Sets new global plan.

Parameters
  • -clean (boolean) – Indicator of whether to clear the global plan.

  • -current_plan (list) – list of waypoints in the actual plan.

update_information(ego_pos, ego_speed)

Update the ego position and speed for trajectory planner.

Parameters
  • -ego_pos (carla.Transform) – Ego position from localization module.

  • -ego_speed (float) – Ego speed(km/h) from localization module.

class opencda.core.plan.local_planner_behavior.RoadOption(value)

Bases: enum.Enum

RoadOption represents the possible topological configurations when moving from a segment of lane to other.

CHANGELANELEFT = 5
CHANGELANERIGHT = 6
LANEFOLLOW = 4
LEFT = 1
RIGHT = 2
STRAIGHT = 3
VOID = -1

opencda.core.plan.planer_debug_helper module

Analysis + Visualization functions for planning

class opencda.core.plan.planer_debug_helper.PlanDebugHelper(actor_id)

Bases: object

This class aims to save statistics for planner behaviour.

Parameters: -actor_id : int

The actor ID of the target vehicle for bebuging.

Attributes -speed_list : list

The list containing speed info(m/s) of all time-steps.

-acc_listlist

The list containing acceleration info(m^2/s) of all time-steps.

-ttc_listlist

The list containing ttc info(s) for all time-steps.

-countint

Used to count how many simulation steps have been executed.

evaluate()

Evaluate the target vehicle and visulize the plot. :returns:

The target vehicle’s planning

profile (velocity, acceleration, and ttc).

-perform_txt (txt file): The target vehicle’s planning profile as text files.

Return type

-figure (matplotlib.pyplot.figure)

update(ego_speed, ttc)

Update the speed info. :param -ego_speed: Ego speed in km/h. :type -ego_speed: float :param -ttc: Time to collision in seconds. :type -ttc: flot

opencda.core.plan.spline module

Cubic spline planner

Author: Atsushi Sakai(@Atsushi_twi)

class opencda.core.plan.spline.Spline(x, y)

Bases: object

Cubic Spline class for calculte curvature

(Author: Atsushi Sakai(@Atsushi_twi)).

Parameters -x : float

The x coordinate.

-yfloat

The y coordinate.

Attributes -b : float

The spline coefficient b.

-cfloat

The spline coefficient c.

-dfloat

The spline coefficient d.

-wfloat

The spline coefficient w.

-nxfloat

The dimension of x.

-hfloat

The n-th discrete difference along the x-axis.

calc(t)

Calc position

Parameters

t (-) – if t is outside of the input x, return None

Returns

The calcualtion result of position.

If t is outside the range of x, return None.

Return type

  • result (float)

calcd(t)

Calc first derivative. If t is outside of the input x, return None.

calcdd(t)

Calc second derivative, If t is outside of the input x, return None.

class opencda.core.plan.spline.Spline2D(x, y)

Bases: object

2D Cubic Spline class for calculte curvature

(Author: Atsushi Sakai(@Atsushi_twi)).

Parameters -x : float

The x coordinate.

-yfloat

The y coordinate.

Attributes -b : float

The spline coefficient b.

-cfloat

The spline coefficient c.

-dfloat

The spline coefficient d.

-wfloat

The spline coefficient w.

-nxfloat

The dimension of x.

-hfloat

The n-th discrete difference along the x-axis.

calc_curvature(s)

Calculate curvature.

calc_position(s)

Calculate position.

calc_yaw(s)

Calculate yaw.

opencda.core.plan.spline.calc_spline_course(x, y, ds=0.1)

Caculate 2D splice course.

Parameters
  • -x (float) – The x coordinate of the input point.

  • -y (float) – The y coordinate of the input point.

  • -ds (flost) – The s step value. Default value equals to 0.1.

Returns

List of spline course points’ x coordinates. -ry (list): List of spline course points’ y coordinates. -ryaw (list): List of spline course points’ yaw angles. -rk (list): List of spline course points’ curvatures. -s (list): List of spline course points’ s values.

Return type

-rx (list)

opencda.core.plan.spline.main()

Main function to calculate spline and visulize the results.

Module contents