Apollo源码解析:决策规划PathLaneBorrowDecider
附赠自动驾驶最全的学习资料和量产经验:链接
一、概述
PathLaneBorrowDecider 是lanefollow 场景下,所调用的第 3 个 task,它的作用主要是换道时:
-
已处于借道场景下判断是否退出避让;
-
未处于借道场景下判断是否具备借道能力。
二、PathLaneBorrowDecider的具体逻辑如下:
1、PublicRoadPlanner 的 LaneFollowStage 配置了以下几个task 来实现具体的规划逻辑,PathLaneBorrowDecider 是第3个task,PathLaneBorrowDecider只是判断是否满足借道条件,具体的轨迹是否借道,是由后面的task决定;
scenario_type: LANE_FOLLOW
stage_type: LANE_FOLLOW_DEFAULT_STAGE
stage_config: {
stage_type: LANE_FOLLOW_DEFAULT_STAGE
enabled: true
task_type: LANE_CHANGE_DECIDER
task_type: PATH_REUSE_DECIDER
task_type: PATH_LANE_BORROW_DECIDER
task_type: PATH_BOUNDS_DECIDER
task_type: PIECEWISE_JERK_PATH_OPTIMIZER
task_type: PATH_ASSESSMENT_DECIDER
task_type: PATH_DECIDER
task_type: RULE_BASED_STOP_DECIDER
task_type: ST_BOUNDS_DECIDER
task_type: SPEED_BOUNDS_PRIORI_DECIDER
task_type: SPEED_HEURISTIC_OPTIMIZER
task_type: SPEED_DECIDER
task_type: SPEED_BOUNDS_FINAL_DECIDER
# task_type: PIECEWISE_JERK_SPEED_OPTIMIZER
task_type: PIECEWISE_JERK_NONLINEAR_SPEED_OPTIMIZER
task_type: RSS_DECIDER
}
2、借道决策器的主要功能为判断当前车辆是否具备借道能力,其实现在类PathLaneBorrowDecider的成员函数process()中。process()函数的功能一共分为三部分:检查输入、如果路径复用则跳过借道决策、判断当前街道状态。
Status PathLaneBorrowDecider::Process(
Frame* const frame, ReferenceLineInfo* const reference_line_info) {
// Sanity checks.
CHECK_NOTNULL(frame);
CHECK_NOTNULL(reference_line_info);
// skip path_lane_borrow_decider if reused path
if (FLAGS_enable_skip_path_tasks && reference_line_info->path_reusable()) {
// for debug
AINFO << "skip due to reusing path";
return Status::OK();
}
// By default, don't borrow any lane.
reference_line_info->set_is_path_lane_borrow(false);
// Check if lane-borrowing is needed, if so, borrow lane.
if (Decider::config_.path_lane_borrow_decider_config()
.allow_lane_borrowing() &&
// 判断是否需要借道,如果需要借道,将当前reference_line的借道属性置位