在Apollo自动驾驶框架中,超车、绕行、跟车等行为是决策(Behavior Planning)与路径规划(Motion Planning)协同作用的结果,其流程遵循分层决策机制,但并非简单的“先决策后执行”,而是通过动态交互实现的。以下是具体流程和关键逻辑:


1. 整体流程:分层决策与规划

Apollo的决策规划模块分为Behavior Planner(决策层)和Motion Planner(运动规划层),两者通过参考线(Reference Line)和动态障碍物交互信息紧密耦合:

  1. Behavior Planner(决策层)
  • 输入:感知数据(障碍物、车道线)、定位、高精地图、交通规则。
  • 输出:高层行为决策(如LANE_FOLLOW、OVERTAKE、SIDEPASS)。
  • 关键逻辑:
  • 基于规则(Rule-Based)或机器学习(如ML-based预测)生成初步决策。
  • 不直接输出轨迹,而是通过生成虚拟障碍物(Virtual Obstacle)或修改参考线属性(如目标车道、速度限制)传递给Motion Planner。
  • 示例:超车决策会标记目标车辆为“待超越”,并指定目标车道的参考线优先级。
  1. Motion Planner(运动规划层)
  • 输入:Behavior Planner的决策、参考线、动态障碍物预测轨迹。
  • 输出:最终可执行的轨迹(Path + Speed)。
  • 关键逻辑:
  • Lattice/EM Planner根据决策层意图生成具体轨迹。
  • 若决策不可行(如超车时目标车道突然出现障碍物),Motion Planner会反馈冲突,触发决策层重新规划。

2. 超车/绕行/跟车的具体流程

(1) 超车(Overtake)
  • 决策层:
  • 检测前车速度低于阈值,且相邻车道满足超车条件(无对向车、车道线允许)。
  • 生成OVERTAKE指令,并绑定目标车道的参考线(Reference Line)。
  • 规划层:
  • Lattice Planner在目标参考线附近采样轨迹,评估安全性(如与对向车距离)、舒适性(加速度平滑)。
  • 若采样失败(如无法找到无碰撞轨迹),反馈给决策层,可能降级为FOLLOW。
(2) 绕行(SidePass)
  • 决策层:
  • 检测静态障碍物(如抛锚车辆),决策SIDEPASS并指定绕行方向(左/右)。
  • 在参考线上插入虚拟车道(Virtual Lane)临时扩展道路边界。
  • 规划层:
  • 基于虚拟车道生成绕行轨迹,代价函数中增加“偏离原车道”的权重,确保绕行后回归原车道。
(3) 跟车(Follow)
  • 决策层:
  • 计算与前车的安全距离(IDM模型),决策FOLLOW并设定期望跟车速度。
  • 规划层:
  • 采用ST-Graph(速度-时间图)优化,保持安全距离的同时避免急刹。

3. 关键交互机制

  • 参考线动态更新:
    Behavior Planner通过选择不同的参考线(如本车道vs.超车道)间接影响路径规划,而非直接指定轨迹。
  • SL/TK坐标系转换:
    Motion Planner在**Frenet帧(SL坐标系)**下评估轨迹,将Behavior决策转换为纵向(S)和横向(L)的约束条件。
  • 反馈循环:
    若Motion Planner无法满足当前决策(如超车轨迹碰撞风险高),会通过PlanningStatus反馈,触发决策层重新评估(如改为跟车)。

4. 与“确认滑”的关系

  • 无严格“确认滑”:Apollo的决策和规划是持续迭代的(每10ms~100ms循环),而非一次性确认。
  • 例外情况:在交互式场景(如无保护左转)中,决策层可能通过Yield或Stop指令等待外部车辆响应,此时规划层会生成保守轨迹(如减速停车)。

总结

Apollo的超车/绕行/跟车行为是决策与规划动态协作的结果:

  1. 决策层提供高层意图和参考线约束;
  2. 规划层生成具体轨迹,并反馈可行性;
  3. 两者通过参考线、虚拟障碍物和状态机实现闭环。

优势:灵活性高,适应动态环境;挑战:需精细调参以避免决策振荡(如频繁切换超车/跟车)。

更多推荐