Apollo 10.0
自动驾驶开放平台
README_cn

planning-scenario-emergency-pull-over

简介

EmergencyPullOverScenario: 紧急靠边停车场景,车辆在行驶过程中如果收到PadMessage命令“PULL_OVER”,车辆就近找到合适的位置在当前车道内停车,相比于直接停车,这样保证了行驶过程中的停车安全性和舒适性。

IsTransferable: 场景切入条件

  1. 当前帧参考线不为空
  2. 接收到PadMessage命令为 PadMessage::PULL_OVER

Stages

阶段名 类型 描述
EMERGENCY_PULL_OVER_SLOW_DOWN apollo::planning::EmergencyPullOverStageSlowDown 停车前减速阶段,修改参考线主车限速,主车速度达到阈值后退出
EMERGENCY_PULL_OVER_APPROACH apollo::planning::EmergencyPullOverStageApproach 减速后PULL_OVER_PATH task 计算停车点,主车靠近停车终点,主车速度和距离达到阈值后退出该阶段
EMERGENCY_PULL_OVER_STANDBY apollo::planning::EmergencyPullOverStageStandby 主车在停车点保持停车,PadMessagePULL_OVER 切换至其他状态后退出该阶段

1. EMERGENCY_PULL_OVER_SLOW_DOWN

EmergencyPullOverStageSlowDown : 该阶段用于主车停车前减速,修改参考线主车限速,主车速度达到阈值后退出。

Process: 该阶段处理的主函数,输入为规划初始点 planning_init_pointFrame;输出为当前阶段处理状态StageResult

  • 主车限速调整:根据场景配置文件,获取target_slow_down_speed,调用reference_line_info.LimitCruiseSpeed()函数进行限速修改,达到主车减速目的。
  • ExecuteTaskOnReferenceLine:输入为规划初始点planning_init_pointFrame信息,按照该stage配置的task列表,依次进行规划。
  • 检查主车状态:检查主车是否减速达到目标速度。如果减速达到目标速度,进入FinishStage,结束当前Stage,进入EMERGENCY_PULL_OVER_APPROACH阶段。如果未达到目标速度,则仍处于EMERGENCY_PULL_OVER_SLOW_DOWN阶段,返回状态值StageStatusType::RUNNING

FinishStage: 该阶段的退出函数。

  • 退出EMERGENCY_PULL_OVER_SLOW_DOWN阶段, 设置主车pull_over_status->set_plan_pull_over_path(true),进入EMERGENCY_PULL_OVER_APPROACH阶段。

2. EMERGENCY_PULL_OVER_APPROACH

EmergencyPullOverStageApproach : 该阶段用于主车减速后,接近停车目标点。

Process: 该阶段处理的主函数,输入为规划初始点 planning_init_pointFrame;输出为当前阶段处理状态StageResult

  • 设置主车限速,reference_line_info.LimitCruiseSpeed;打开转向灯表明靠边临时停车,reference_line_info.SetTurnSignal(VehicleSignal::TURN_RIGHT)
  • 构建虚拟障碍物:根据规划计算的停车点,构建id为EMERGENCY_PULL_OVER的虚拟障碍物。
  • ExecuteTaskOnReferenceLine:输入为规划初始点planning_init_pointFrame信息,按照该stage配置的task列表,依次进行规划。
  • 检查主车状态:检查主车速度与距离是否满足阈值。如果满足,进入FinishStage,结束当前Stage,进入EMERGENCY_PULL_OVER_STANDBY阶段。如果不满足,则仍处于EMERGENCY_PULL_OVER_APPROACH阶段,返回状态值StageStatusType::RUNNING

FinishStage: 该阶段的退出函数。

  • 退出EMERGENCY_PULL_OVER_APPROACH阶段, 进入EMERGENCY_PULL_OVER_STANDBY阶段。

3. EMERGENCY_PULL_OVER_STANDBY

EmergencyPullOverStageStandby : 该阶段用于主车保持紧急靠边停车状态。

Process: 该阶段处理的主函数,输入为规划初始点 planning_init_pointFrame;输出为当前阶段处理状态StageResult

  • 设置主车限速,reference_line_info.LimitCruiseSpeed;打开危险报警闪光灯,reference_line_info.SetEmergencyLight();关闭转向灯,reference_line_info.SetTurnSignal(VehicleSignal::TURN_NONE)
  • 构建虚拟障碍物:根据规划计算的停车点,构建id为EMERGENCY_PULL_OVER的虚拟障碍物。
  • ExecuteTaskOnReferenceLine:输入为规划初始点planning_init_pointFrame信息,按照该stage配置的task列表,依次进行规划。
  • 检查PadMessage:PadMessagePULL_OVER 切换至其他状态后,进入FinishStage,结束当前Stage;否则仍处于EMERGENCY_PULL_OVER_STANDBY阶段,返回状态值StageStatusType::RUNNING

FinishStage: 该阶段的退出函数。

  • 退出EMERGENCY_PULL_OVER_STANDBY阶段, 进入EmergencyPullOverScenario场景。

目录结构

modules/planning/scenarios/emergency_pull_over/
├── BUILD
├── conf
│ ├── emergency_pull_over_approach
│ │ └── pull_over_path.pb.txt
│ ├── pipeline.pb.txt
│ └── scenario_conf.pb.txt
├── cyberfile.xml
├── emergency_pull_over_scenario.cc
├── emergency_pull_over_scenario.h
├── emergency_pull_over_scenario_test.cc
├── images
│ └── emergency_pull_over_scenario.png
├── plugins.xml
├── proto
│ ├── BUILD
│ └── emergency_pull_over.proto
├── README_cn.md
├── stage_approach.cc
├── stage_approach.h
├── stage_approach_test.cc
├── stage_slow_down.cc
├── stage_slow_down.h
├── stage_slow_down_test.cc
├── stage_standby.cc
├── stage_standby.h
└── stage_standby_test.cc

模块

EmergencyPullOverScenario插件

apollo::planning::EmergencyPullOverScenario

配置文件

文件路径 类型/结构
说明
modules/planning/scenarios/emergency_pull_over/conf/scenario_conf.pb.txt apollo::planning::ScenarioEmergencyPullOverConfig 场景的配置文件
modules/planning/scenarios/emergency_pull_over/conf/pipeline.pb.txt apollo::planning::ScenarioPipeline 场景的流水线文件
modules/planning/scenarios/emergency_pull_over/conf/emergency_pull_over_approach/pull_over_path.pb.txt apollo::planning::PullOverPathConfig Task配置文件
modules/planning/planning_component/conf/planning_config.pb.txt apollo::planning::PlanningConfig planning组件的配置文件

使用方式

配置加载 EmergencyPullOverScenario 插件
  • modules/planning/planning_component/conf/planning_config.pb.txt文件中增加standard_planning_config的配置,配置使用当前场景插件。
    shell
    # modules/planning/planning_component/conf/planning_config.pb.txt
    standard_planning_config {
    planner_type: ......
    planner_public_road_config {
    scenario {
    name: "EMERGENCY_PULL_OVER"
    type: "EmergencyPullOverScenario"
    }
    ......
    }
    }
  • modules/planning/scenarios/emergency_pull_over/conf/pipeline.pb.txt中编辑该场景下所有Stage,以及各Stage对应的Task列表。
  • 同时支持自主开发,对于新增Stage插件,需要添加至modules/planning/scenarios/emergency_pull_over/plugins.xml
    # modules/planning/scenarios/emergency_pull_over/plugins.xml
    <library path="modules/planning/scenarios/emergency_pull_over/libemergency_pull_over_scenario.so">
    <class type="apollo::planning::EmergencyPullOverScenario" base_class="apollo::planning::Scenario"></class>
    <class type="apollo::planning::EmergencyPullOverStageApproach" base_class="apollo::planning::Stage"></class>
    <class type="apollo::planning::EmergencyPullOverStageSlowDown" base_class="apollo::planning::Stage"></class>
    <class type="apollo::planning::EmergencyPullOverStageStandby" base_class="apollo::planning::Stage"></class>
    </library>

配置 EmergencyPullOverScenario 参数

文档意见反馈

如果您在使用文档的过程中,遇到任何问题,请到我们在【开发者社区】建立的 反馈意见收集问答页面,反馈相关的问题。我们会根据反馈意见对文档进行迭代优化。