Advertisement

apollo自动驾驶进阶学习之:如何实现自主泊车功能-自主选择泊车点

阅读量:

概述:planning module bases its operation on data from the routing subsystem (navigation subsystem) and the prediction subsystem (sensing subsystem). 它利用来自周围环境的信息和地图定位与导航数据来生成一条运动轨迹(包含位置坐标、线速度、加速度、 jerk 加加速度和时间等详细信息)。随后将这些数据传递至控制 module.

为了更好地理解Planning模块的工作流程,在自动驾驶领域中基于层次化结构进行组织是必要的:即从宏观的场景开始(Scene)逐步深入到具体的操作步骤(Stage),最后再细化到具体的决策方法(Task)。Apollo系统能够有效地应对各种复杂的道路场景(Scenario),并实现了对这些场景的统一注册与管理机制(通过有限状态机实现选择当前行车场景的能力)。每个特定的场景下都有相应的阶段(Stage),这些阶段涵盖了当前情景下的大致操作步骤;而每个阶段又对应一系列具体的方法(Task)来进行执行操作。例如,在泊车阶段分为两个具体的步骤:首先是制动停车至车辆完全静止的状态;其次是车辆停止后启动并完成最终的泊车动作。

1、相关参数

1.1是否到达终点判断参数

在这里插入图片描述

本部定义是否达到终点的关键指标包括 heading buffer、水平与垂直方向上的缓冲区域等。

1.2 生成的轨迹的相关参数

在这里插入图片描述

2、如何实现自主泊车

2.1 寻找进入自主泊车模式

在这里插入图片描述
在这里插入图片描述
复制代码
    ScenarioConfig::ScenarioType ScenarioManager::SelectValetParkingScenario(
    const Frame& frame) {
      const auto& scenario_config =
      config_map_[ScenarioConfig::VALET_PARKING].valet_parking_config();
    
      // TODO(All) trigger valet parking by route message definition as of now
      double parking_spot_range_to_start =
      scenario_config.parking_spot_range_to_start();
      if (scenario::valet_parking::ValetParkingScenario::IsTransferable(
          frame, parking_spot_range_to_start)) {
    return ScenarioConfig::VALET_PARKING;
      }
    
      return default_scenario_type_;
    }

需要对IsTransferable()函数(该函数位于apollo-master\modules\planning\scenarios\park\valet_parking\valet_parking_scenario.cc)进行修改。当路径规划结果中包含停车场信息时,请系统识别目标区域内的可用停车位。在Apollo Master模块中找到该函数的具体位置。其中系统利用高精度地图的数据来判断是否存在停车场,并获取对应的停车位ID。

2.2 如何寻找最优泊车位

在这里插入图片描述

此时应在VALET_PARKING_APPENDAGEParking_Spot的阶段中设置一个新任务,以确定停车场是否存在可用的停车位.评估方法:对PATH_BOUNDS_DECIDER的结果进行评估,确定空间是否充足;若充足,则将可用停车位中心点传递至parking终点.

在这里插入图片描述

3、仿真测试

终点要选择停场场附近,否则找不到停车场,无法实现自主泊车。

在这里插入图片描述

全部评论 (0)

还没有任何评论哟~