3.1产生换道策略,产生换道的状态,之后将结果保存在injector中
// /home/yuan/apollo-edu/modules/planning/tasks/deciders/lane_change_decider/lane_change_decider.cc
// LaneChangeDecider 类的方法,用于更新车道变换状态信息
void LaneChangeDecider::UpdateStatus(double timestamp,
ChangeLaneStatus::Status status_code,
const std::string& path_id) {
// 获取车道变换状态对象
auto* lane_change_status = injector_->planning_context()
->mutable_planning_status()
->mutable_change_lane();
// 设置时间戳、路径标识符和状态代码到车道变换状态对象中
lane_change_status->set_timestamp(timestamp); // 设置时间戳
lane_change_status->set_path_id(path_id); // 设置路径标识符
lane_change_status->set_status(status_code); // 设置状态代码
}
3.2产生借道决策
// 在默认情况下,不进行任何车道借用
reference_line_info->set_is_path_lane_borrow(false);
// 检查是否需要进行车道借用,如果需要,则进行车道借用
if (Decider::config_.path_lane_borrow_decider_config().allow_lane_borrowing() &&
IsNecessaryToBorrowLane(*frame, *reference_line_info)) {
reference_line_info->set_is_path_lane_borrow(true);
}
// 如果左侧和右侧均不可借用车道
if (!left_borrowable && !right_borrowable) {
// 设置不处于车道借用场景中,并返回 false
mutable_path_decider_status->set_is_in_path_lane_borrow_scenario(false);
return false;
} else {
// 设置处于车道借用场景中
mutable_path_decider_status->set_is_in_path_lane_borrow_scenario(true);
// 如果左侧可借用车道,则添加左侧借用标记
if (left_borrowable) {
mutable_path_decider_status->add_decided_side_pass_direction(PathDeciderStatus::LEFT_BORROW);
}
// 如果右侧可借用车道,则添加右侧借用标记
if (right_borrowable) {
mutable_path_decider_status->add_decided_side_pass_direction(PathDeciderStatus::RIGHT_BORROW);
}
}
同时,在进行借道决策时,会对左右借道进行判断。借道的状态保存在injetor里。