Apollo自动驾驶系统:基于规则的停止决策器深度解析
apollo An open autonomous driving platform 项目地址: https://gitcode.com/gh_mirrors/apo/apollo
概述
在Apollo自动驾驶系统中,基于规则的停止决策器(RuleBasedStopDecider)是规划模块的重要组成部分。作为decider类别中的关键任务,它负责在特定场景下根据预设规则生成停止决策,确保自动驾驶车辆的安全行驶。
停止决策器在规划模块中的位置
规划模块的运动规划流程是一个多阶段决策过程,基于规则的停止决策器在其中扮演着"安全守门员"的角色。它位于路径生成和速度规划之间,主要功能包括:
- 检测需要停止的特殊场景
- 根据预设规则评估停止必要性
- 在参考线上设置适当的停止点
核心功能实现
1. 逆向车道通过停止
当车辆需要进行逆向车道超车或避让时,系统会执行以下判断流程:
- 路径标签检查:首先确认当前路径是否为"自身车道"行驶
- 障碍物检测:评估逆向车道上是否存在阻塞障碍物
- 停止栅栏设置:在必要时设置停止点,等待逆向车道畅通
// 逆向车道停止判断核心逻辑
if (!check_clear &&
CheckSidePassStop(path_data, *reference_line_info, &stop_s_on_pathdata)) {
if (!LaneChangeDecider::IsPerceptionBlocked(...)) {
return; // 无障碍物直接返回
}
// 设置停止栅栏
BuildSidePassStopFence(...);
}
2. 紧急换道检查
系统会持续监控换道需求的紧急程度,主要考虑:
- 目标车道状态:检查目标车道是否畅通
- 路线终点距离:计算车辆距离当前路线终点的剩余距离
- 紧急停止判断:当距离终点过近且换道受阻时触发紧急停止
// 紧急换道检查关键参数
double distance_to_passage_end = sl_point.s() - reference_line_info.AdcSlBoundary().end_s();
if (distance_to_passage_end < urgent_distance_for_lane_change) {
// 设置紧急停止栅栏
util::BuildStopDecision(...);
}
3. 路径终点停止
当检测到车辆接近路径终点时,系统会:
- 路径长度评估:检查当前路径是否过短
- 终点停止设置:在路径终点前适当位置设置停止点
- 安全缓冲:通常会在理论终点前预留5米缓冲距离
// 路径终点停止实现
if (frenet_frame_path().back().s() - frenet_frame_path().front().s() <
FLAGS_short_path_length_threshold) {
// 在终点前5米设置停止点
util::BuildStopDecision(..., frenet_frame_path().back().s() - 5.0, ...);
}
技术实现细节
停止栅栏构建原理
停止决策器的核心是停止栅栏(Stop Fence)的构建,主要涉及:
- 位置计算:在Frenet坐标系下精确计算停止点位置
- 安全距离:考虑车辆制动性能设置合理提前量
- 原因标注:明确记录停止原因(如路径终点、紧急换道等)
多条件优先级处理
当多个停止条件同时满足时,系统会按照预设优先级处理:
- 安全相关条件(如紧急换道)优先于常规条件
- 静态条件(如路径终点)优先于动态条件
- 近距离条件优先于远距离条件
实际应用考量
在实际自动驾驶场景中,基于规则的停止决策器需要特别注意:
- 参数调优:不同车型需要调整停止距离等参数
- 场景覆盖:确保规则覆盖各种边缘场景
- 平滑过渡:停止决策与其他规划模块的协调
总结
Apollo的基于规则的停止决策器通过精心设计的判断逻辑和安全策略,为自动驾驶系统提供了可靠的停止决策能力。理解其工作原理对于开发安全可靠的自动驾驶系统至关重要,也是进一步优化规划算法的基础。
apollo An open autonomous driving platform 项目地址: https://gitcode.com/gh_mirrors/apo/apollo
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考