解读Autoware.Universe规划模块:Behavior Path Planner

解读Autoware.Universe规划模块:Behavior Path Planner

  • 前言
    • 文章列表
  • 行为路径规划器(Behavior Path Planner)
    • 目的(Purpose)
    • 场景(Use cases)
    • 设计
    • 输入 / 输出 / 接口
      • 输入
      • 输出
    • 内部工作 / 算法
      • 可行驶区域生成(Drivable Area Generation)
        • 用于可行驶区域生成的参数
      • 行为树(Behavior Tree)
      • 车道跟随(Lane Following)
        • 特殊情况
      • 车道变换(Lane Change)
        • 启动车道变化条件(需要满足以下所有条件)
        • 结束车道变换条件(需要满足以下所有条件)
        • 与障碍物的碰撞预测
        • 路径生成(Path Generation)
      • 避让(Avoidance)
        • 目标物体
        • 怎样生成避让路径
        • 单个物体情况
        • 多个物体情况
        • 平滑路径生成(Smooth path generation)
        • 避让未实现的部分 / 局限
      • 靠边停车(Pull Over)
        • 启动靠边停车条件(需要满足以下所有条件)
        • 结束靠边停车条件(需要满足以下所有条件)
        • 靠边停车的通用参数
        • 碰撞检测
          • 基于占据网格地图的碰撞检测
          • 基于物体识别的碰撞检测
        • 目标搜索
        • 路径生成
          • 平移泊车(Shift Parking)
          • 几何侧方泊车(GEOMETRIC PARALLEL PARKING)
        • 靠边停车未实现的部分 / 局限
      • 路边起步(Pull Out)
        • 启动路边起步条件(需要满足以下所有条件)
        • 结束路边起步条件(需要满足以下所有条件)
        • 路边起步的通用参数
        • 路肩车道障碍物的安全检测(Safe check with obstacles in shoulder lane)
        • 路径生成(Path Generation)
          • 平移式路边起步(SHIFT PULL OUT)
          • 几何式路边起步(GEOMETRIC PULL OUT)
        • 后向路边起步起点搜索(backward pull out start point search)
        • 路边起步未实现的部分 / 局限
      • 侧向平移(Side Shift)
        • 路径生成的参数
      • 平滑连接目标(Smooth goal connection)
  • 参考 / 外部链接

更新日期:2022年11月23日

前言

Autoware 是世界领先的自动驾驶开源软件架构1。Autoware 是基于 ROS 环境开发,大规模地促进了自动驾驶的商业部署。2022年,Autoware Foundation 官方发布了基于 ROS2 的更新版本,其中

  • Autoware.Auto 2 是继 Autoware.AI 之后到基于 ROS2 的升级版本。
  • Autoware.Universe 3 则是为研究者和开发者建立的一个更具有试验性和更前沿的 ROS packages的存储库(repository)。
  • Autoware.Core 是基于 Autoware.Auto 和 Autoware.Universe,是高质量和稳定的 ROS packages 的主要存储库(main repository)。(目前还是空的,会逐渐从 Autoware.Universe 导入代码。)

本系列文章以翻译 Autoware.Universe 的官方文档4为基础,首先力求传达准确,再行扩展。在专业术语的表达上,尽量尊重原文,往往以中文翻译(原英文表达)的形式,在找不到合理的翻译的情况,则直接使用原英文术语。

笔者从开发者的角度,不希望只是笼统地照搬原文档,会适当加入自己的理解和笔记。更重要的是,概念要和实践相结合。理论很美好,我感兴趣的是,实际应用的效果如何,所以可以预期在每个主题中都会有一些代码级的实践和记录。

文章列表

  • 解读Autoware.Universe规划模块:Mission Planner
  • 解读Autoware.Universe规划模块:Behavior Path Planner

行为路径规划器(Behavior Path Planner)

原始文档:Autoware.Universe官方文档:Behavior Path Planner 5

目的(Purpose)

behavior_path_planner 模块负责生成

  1. 基于交通状况的路径(path)
  2. 车辆可以移动的可行驶区域(drivable area)(在路径消息中定义),
  3. 将被发送到车辆接口的转向信号(turn signal) 命令。

场景(Use cases)

根据情况,系统会选择合适的场景模块,在行为树(behavior tree)系统上执行。

目前以下场景模块是被支持的:

  • 车道跟随(Lane Following):从地图生成车道中心线。
  • 车道变换(Lane Change):执行车道变换。该模块在必要时执行,并清除与其他车辆的碰撞检测。
  • 避障(Obstacle Avoidance):执行避障。该模块用于避让停在车道边缘的车辆或超越(overtake)低速障碍物。
  • 靠边停车(Pull Over):执行路边停车。当自车在道路车道上并且目标在路肩车道(shoulder lane)上时执行此模块。自车将停在目标位置。
  • 路边起步(Pull Out):执行路边起步。当自车静止并且自车的车身包含在路肩车道(shoulder lane)中时执行此模块。当自车并入道路时,该模块结束。
  • 侧向平移(Side Shift):(用于远程控制)根据外部指令将路径向左或向右移动。

对以下模块的支持目前还在开发中:

  • 自由空间(Free Space): NA.

解读Autoware.Universe规划模块:Behavior Path Planner_第1张图片
图片:当前支持的部分场景

设计

暂空。

输入 / 输出 / 接口

输入

  • /planning/mission_planning/route [autoware_auto_planning_msgs/HADMapRoute] : 当前从起始位置到目标位置的路线。
  • /map/vector_map [autoware_auto_mapping_msgs/HADMapBin] : 地图信息。
  • /perception/object_recognition/objects [autoware_auto_perception_msgs/PredictedObjects] : 从感知获取的动态物体。
  • /perception/occupancy_grid_map/map [nav_msgs/msg/OccupancyGrid] : 从感知模块得到的占据网格地图(occupancy grid map),仅用于靠边停车模块。
  • /tf [tf2_msgs/TFMessage] : 用于自车位姿。
  • /localization/kinematic_state [nav_msgs/Odometry] : 用于自车速度。
  • path_change_approval [std_msgs::Bool] : 用于远程控制。
  • path_change_force [tier4_planning_msgs::PathChangeModule] : 用于远程控制。

输出

  • path [autoware_auto_planning_msgs/PathWithLaneId] : 由模块生成的路径。
  • path_candidate [autoware_auto_planning_msgs/Path] : 模块将要采用的路径。获得外部批准后立即执行。
  • turn_indicators_cmd [autoware_auto_vehicle_msgs/TurnIndicatorsCommand] : 转向指示灯命令。
  • hazard_lights_cmd [autoware_auto_vehicle_msgs/HazardLightsCommand] : 危险信号灯命令。
  • force_available [tier4_planning_msgs/PathChangeModuleArray] :(用于远程控制)可强制执行的模块。
  • ready_module [tier4_planning_msgs/PathChangeModule] : (用于远程控制)准备执行的模块。
  • running_modules [tier4_planning_msgs/PathChangeModuleArray] : (用于远程控制)当前运行的模块。

内部工作 / 算法

可行驶区域生成(Drivable Area Generation)

被量化的可行驶车道被绘制成可行驶区域,其分辨率为 drivable_area_resolution。为了防止量化导致规划模块不稳定,可行驶区域的位姿遵循以下规则。

  • 在地图坐标中生成可行驶区域。
  • 它的位置用 drivable_area_resolution 量化。
  • 它的方向为 0。

可行驶区域的大小动态变化,以实现降低计算成本和覆盖足够多的车道。对于第二个目的,可行驶区域覆盖一定长度的前向和后向车道,余量(margin)由一些参数来定义。

用于可行驶区域生成的参数

参数名 单位 类型 描述 默认值
drivable_area_resolution [m] double 可行驶区域图像的分辨率 0.1
drivable_lane_forward_length [m] double 可行驶区域覆盖的自车前向车道的长度 50.0
drivable_lane_backward_length [m] double 可行驶区域覆盖的自车后向车道的长度 5.0
drivable_lane_margin [m] double 可行驶区域覆盖的自车前向和后向车道余量 3.0
drivable_area_margin [m] double 可行驶区域的宽度和高度的余量 6.0

行为树(Behavior Tree)

在行为路径规划器中,行为树机制用于管理在哪些情况下激活哪些模块。总的来说,随着未来添加越来越多的模块,这种类似“行为管理器”的函数可以预期会变得更大。为了提高可维护性,我们采用了行为树。行为树具有以下优点:易于可视化,易于配置管理(可以通过替换配置文件来改变行为),与状态机相比具有较高的可扩展性。(笔者写有专门的文章比较行为树和状态机。6

当前的行为树结构如下图所示。每个模块(LaneChange、Avoidance 等)都具有 Request、Ready 和 Plan 节点作为通用功能。

  • Request:检查是否有来自模块的请求(例如 LaneChange 会在有多车道且车辆不在首选车道上时发出请求),
  • Ready:检查执行计划是否安全(例如,当 lane_change 路径与 S-T 空间上的其他动态对象没有任何冲突时,LaneChange 准备就绪)。
  • Plan:计算路径并将其设置为行为树的输出。它将会处于 running 状态,不会跳转到其他模块,直到内部状态返回 SUCCESS。
  • ForceApproval:一个车道变换专有的节点,当从外部发出强制车道变换命令时,它会覆盖 Ready 的结果。

解读Autoware.Universe规划模块:Behavior Path Planner_第2张图片
图片:当前的行为树结构

车道跟随(Lane Following)

从路线的中心线生成路径。

特殊情况

对于需要车道变换的路线,生成的路径与车道末端有特定的距离余量(默认:12.0 m),以确保车道变换的最小距离。 (此功能不仅适用于车道跟随,而且适用于所有模块。)

解读Autoware.Universe规划模块:Behavior Path Planner_第3张图片
图片:车道跟随的特殊情况

车道变换(Lane Change)

当需要车道变换并可以安全执行时,车道变换模块会被激活。

启动车道变化条件(需要满足以下所有条件)

  • 车道变更请求条件
    • 自车不在首选车道(preferred_lane)上
    • 车道变换路径上既无交叉路口也无人行横道
  • 车道变换就绪状态
    • 车道变换路径不与其他物体发生碰撞(见下图)
    • 操作员允许车道变换

结束车道变换条件(需要满足以下所有条件)

  • 车辆移动到目标车道后经过一定距离(默认:3.0 m)。
  • base_link 超过白色虚线之前,预测与对象发生碰撞(仅当 enable_abort_lane_change 为真时。)
    • 然而,在当前速度低于 10km/h 并且自车接近车道末端时,车道变换不会中止,自车会停住。然后,在预测不会有碰撞后,自车继续车道变换。

与障碍物的碰撞预测

  1. 预测自车和其他车辆在 t1, t2, … tn 时刻车道变换的目标车道上的各个位置
  2. 如果本车与对方车的距离每次都小于阈值(ego_velocity * stop_time (2s)),则判定为碰撞

解读Autoware.Universe规划模块:Behavior Path Planner_第4张图片
图片:与障碍物的碰撞预测

路径生成(Path Generation)

在自车速度恒定的假设下,在 n + m 秒内完成车道变换的路径。一旦执行车道变换,直到满足 “结束车道变换条件”(“finish-lane-change-condition” )后才会更新路径。

解读Autoware.Universe规划模块:Behavior Path Planner_第5张图片
图片:车道变换的路径生成

避让(Avoidance)

当要避让的动态对象存在并且可以安全地避让时,避让模块被激活。

目标物体

满足以下条件的动态物体被认为是避让目标。

  • 语义类型为 CARTRUCKBUS
  • 低速(默认:< 1.0 m/s
  • 不在中心线附近(默认:偏离中心 > 0.5 m
  • 物体部分占据探测区域(横向行驶车道 + 1 m 余量)。

怎样生成避让路径

为了防止自我位置附近的突然变化,在直线车道行驶一定距离后会生成一条避让路径。避让路径的生成过程如下:

  1. 探测目标物体并计算横向偏移距离(默认:距最近轨迹点 2.0 m
  2. 计算在横向变加速度(lateral jerk)约束下的避让距离。 (默认: 0.3 ~ 2.0 m/s^3)
    a. 如果超过以保持直线余量的最大变加速度(jerk)约束,则避让路径生成将中止。
  3. 生成具有给定避让距离和横向偏移长度的平滑路径。
  4. 如果在当前目标之后一定距离(默认值:50 m)内没有下一个目标,则生成“返回中心”路径。

单个物体情况

解读Autoware.Universe规划模块:Behavior Path Planner_第6张图片
图片:单个物体情况的避让

多个物体情况

如果有多个避让目标,并且这些目标的横向距离很近(默认值:< 0.5m),则将这些对象视为单个避让目标,并通过单个转向操作同时执行避让。如果避让目标的横向距离与阈值相差很大,则使用多次转向操作来避让它们。

解读Autoware.Universe规划模块:Behavior Path Planner_第7张图片
图片:多个物体情况的避让

平滑路径生成(Smooth path generation)

路径生成是在 Frenet 坐标系中计算的。用于避让的平移长度配置由四个分段恒定变加速度多项式生成,并添加到原始路径。由于横向变加速度可以近似地视为一种转向操作,因此该计算产生类似于回旋曲线(Clothoid curve)的结果。

解读Autoware.Universe规划模块:Behavior Path Planner_第8张图片
图片:平滑路径生成

避让未实现的部分 / 局限

  • 未实现碰撞检测
  • 平移距离应该根据情况而变化(左 / 右是空闲的还是被占据的)。现在它是一个固定值。
  • 与“通过车道变换避让”(“avoidance-by-lane-change”)协作。
  • 交通状况的具体规则(进入路口前需要回到中线)。

靠边停车(Pull Over)

当目标位置位于路肩车道(shoulder lane)时,靠边停车(Pull Over)模块将被激活。自车将停在目标处。

启动靠边停车条件(需要满足以下所有条件)

  • 靠边停车请求条件
    • 目标位置在路肩车道上,自车在公路车道上。
    • 目标和自车之间的距离比较近。
    • 它比 request_length 短(默认值:< 200m)。
  • 靠边停车准备条件
    • 如果满足请求的条件,它总是准备就绪。
  • 靠边停车启动条件
    • 生成安全停车目标位姿和路径。
      • 生成的路径不会与障碍物发生碰撞。
    • 操作员允许靠边停车
      • 如果操作员不允许靠边路径,请留出靠边所需的距离并停止。

结束靠边停车条件(需要满足以下所有条件)

  • 车辆到目标的距离低于阈值(默认值:< 1m
  • 自车停止。
    • 速度低于阈值(默认值:< 0.01m/s)。

靠边停车的通用参数

参数名 单位 类型 描述 默认值
request_length [m] double 当自车接近目标至该距离时,模块被激活 200.0
th_arrived_distance [m] double 路径终端到达的距离阈值 1.0
th_stopped_velocity [m/s] double 到达路径终点的速度阈值 0.01
th_stopped_time [s] double 路径终端到达的时间阈值 2.0
pull_over_velocity [m/s] double 通过目标搜索区域减速到这个速度 2.0
pull_over_minimum_velocity [m/s] double 停止一次后的靠边停车的速度。这样可以防止过度减速。 1.38
margin_from_boundary [m] double 距路肩车道边缘的距离 0.5
decide_path_distance [m] double 判定路径相对于泊车位置是否接近到该距离。在这之后不进行路径规划和目标搜索 10.0
maximum_deceleration [m/s^2] double 最大减速度。防止突然找不到泊车路径时突然减速 1.0

碰撞检测

基于占据网格地图的碰撞检测

从自车路径点生成轨迹,从占据网格相应晶格的值判定障碍物碰撞。

基于占据网格地图的碰撞检测参数

参数名 单位 类型 描述 默认值
use_occupancy_grid [m] double 当自车接近目标至该距离时,模块被激活 200.0
use_occupancy_grid_for_longitudinal_margin [m] double 路径终端到达的距离阈值 1.0
occupancy_grid_collision_check_margin [m/s] double 到达路径终点的速度阈值 0.01
theta_size [s] double 路径终端到达的时间阈值 2.0
obstacle_threshold [m/s] double 通过目标搜索区域减速到这个速度 2.0
基于物体识别的碰撞检测

基于物体识别的碰撞检测参数

参数名 单位 类型 描述 默认值
use_object_recognition - bool 是否使用物体识别用于碰撞检测的标志位 true
object_recognition_collision_check_margin [m] double 计算自车晶格到轨迹的余量 1.0

目标搜索

如果无法在给定目标处安全停车,则在路肩车道的特定范围内搜索 /planning/scenario_planning/modified_goal

视频链接:目标搜索是如何工作的

目标搜索的参数

参数名 单位 类型 描述 默认值
search_priority - double 如果设置为 "efficient_path", 使用一个可以生成高效路径的目标(优先级是 shift_parking -> arc_forward_parking -> arc_backward_parking)。如果设置为 "close_goal", 使用最接近原始目标的目标。 "efficient_path"
enable_goal_research - bool 是否开启搜索目标的标志位 true
forward_goal_search_length [m/s] double 从原始目标开始向前搜索的长度 20.0
backward_goal_search_length [s] double 从原始目标开始向后搜索的长度 20.0
goal_search_interval [m/s] double 目标搜索的距离间隔 2.0
longitudinal_margin [m/s] double 目标位置的自车与障碍物之间的距离余量 3.0
max_lateral_offset [m/s] double 横向目标搜索的最大偏移量 3.0
lateral_offset_interval [m/s] double 横向目标搜索距离间距 3.0

路径生成

存在三种路径生成方法。生成的路径与路肩车道的左边界有一定的余量(默认值:0.5 m)。

平移泊车(Shift Parking)

靠边停车距离由速度、横向偏差和横向变加速度计算得出。在预定的最小值和最大值中搜索横向加加速度,并且输出满足上述准备条件的横向变加速度。

  1. 对路肩车道中心线应用相同的偏移以确保余量
  2. 在并入开始和结束之间的部分,路径通过用于生成避让路径的方法移动(四个分段恒定加加速度多项式)
  3. 将这条路径与道路车道的中心线结合起来

解读Autoware.Universe规划模块:Behavior Path Planner_第9张图片
图片:平移泊车

视频链接:平移泊车是如何工作的

平移泊车的参数

参数名 单位 类型 描述 默认值
enable_shift_parking - bool 是否启用平移泊车的标志位 true
pull_over_sampling_num - int 最小到最大横向变加速度之间的采样数 4
maximum_lateral_jerk [m/s^3] double 最大横向变加速度 2.0
minimum_lateral_jerk [m/s^3] double 最小横向变加速度 0.5
deceleration_interval [m] double 减速区间的距离 15.0
after_pull_over_straight_distance [m] double 靠边停车结束点后的直线距离 5.0
before_pull_over_straight_distance [m] double 靠边停车结束点前的直线距离。安全路径的距离应包括此 5.0
几何侧方泊车(GEOMETRIC PARALLEL PARKING)

生成两条曲率不连续的圆弧路径。它在路径中间停了两次,用以原地控制转向。路径生成方法有前向和后向两种。有关算法的详细信息,另请参阅 7。还有一个简单的python实现。

几何侧方泊车的参数

参数名 单位 类型 描述 默认值
arc_path_interval [m] double 圆弧路径的点间距 1.0
pull_over_max_steer_rad [rad] double 路径生成的最大转向角。停止时可能无法在 vehicle_info 中将转向控制到 max_steer_angle 0.35

前向圆弧泊车(arc forward parking)

生成两条前向圆弧的路径。

解读Autoware.Universe规划模块:Behavior Path Planner_第10张图片
图片:前向圆弧泊车(arc forward parking)

视频链接:前向圆弧泊车(arc forward parking)是如何工作的

前向圆弧泊车的参数

参数名 单位 类型 描述 默认值
enable_arc_forward_parking - bool 标志是否启用弧形前向停车 true
after_forward_parking_straight_distance [m] double 靠边停车结束点后的直线距离 2.0
forward_parking_velocity [m/s] double 前向泊车的速度 1.38
forward_parking_lane_departure_margin [m/s] double 前向泊车时自车左前角的车道偏离余量 0.0

后向圆弧泊车(arc backward parking)

生成两条后向圆弧的路径。

解读Autoware.Universe规划模块:Behavior Path Planner_第11张图片
图片:后向圆弧泊车(arc backward parking)

视频链接:后向圆弧泊车(arc backward parking)是如何工作的

后向圆弧泊车的参数

参数名 单位 类型 描述 默认值
enable_arc_backward_parking - bool 是否启用后向泊车的标志位 true
after_backward_parking_straight_distance [m] double 靠边停车结束点后的直线距离 2.0
backward_parking_velocity [m/s] double 后向泊车的速度 -1.38
backward_parking_lane_departure_margin [m/s] double 后向泊车时自车右前角的车道偏离余量 0.0

靠边停车未实现的部分 / 局限

  • 不允许靠右路肩停车
  • 如果与路肩边缘的距离太窄,则无法停车。
    • 如果 margin_from_boundary 设置为 0.0 等,则无法找到没有偏差的路径。
  • 几何侧方平车(geometric_parallel_parking) 假定道路车道和路肩车道是笔直且平行的。
    • 可能在弯曲的车道上泊车(原始文档中写的是sift parking,这里sift不知道如何翻译)。

路边起步(Pull Out)

当自车处于静止并且自车的轨迹包含在路肩车道中时,路边起步模块被激活。当自车并入道路时,该模块结束。

启动路边起步条件(需要满足以下所有条件)

  • 路边起步请求条件
    • 车辆的速度为0。
    • 自车轨迹中的某处包含在路肩车道中
    • 自车到目标的距离足够路边起步
  • 路边起步就绪条件
    • 如果满足请求的条件,它总是准备就绪。
  • 路边起步启动条件
    • 生成不与障碍物碰撞的安全路径
      • 如果不能从当前位置生成安全路径,则从后退位置搜索安全路径。
    • 操作员允许路边起步

结束路边起步条件(需要满足以下所有条件)

  • 超出路边起步结束点,以超过阈值(默认:1.0m)为准

路边起步的通用参数

参数名 单位 类型 描述 默认值
th_arrived_distance_m [m] double 到达路径终点的距离阈值 1.0
th_stopped_velocity_mps [m] double 到达路径终点的速度阈值 0.01
th_stopped_time_sec [m] double 到达路径终点的时间阈值 1.0
collision_check_margin [m] double 障碍物碰撞检测余量 1.0
pull_out_finish_judge_buffer [m] double 用于判定完成的到达路边起步结束点的距离阈值 1.0

路肩车道障碍物的安全检测(Safe check with obstacles in shoulder lane)

  1. 计算自车在从当前位置到路边起步结束点之间的路边起步路径上的轨迹。 (以蓝框说明)
  2. 计算物体位于路肩车道的多边形
  3. 如果轨迹与多边形之间的距离小于阈值(默认值:1.0 m),则判定为不安全路径

解读Autoware.Universe规划模块:Behavior Path Planner_第12张图片
图片:路边障碍物的碰撞检测

路径生成(Path Generation)

有两种路径生成方法。

平移式路边起步(SHIFT PULL OUT)

路边起步距离由速度、横向偏差和横向变加速度计算得出。横向变加速度在预定的最小值和最大值之间搜索,并选取能生成安全路径的那个变加速度。

  • 生成路肩车道中心线并将其平移到当前位置。
  • 在并入开始和结束之间的部分,路径通过用于生成避让路径的方法平移(四个分段恒定变加速度多项式)
  • 将这条路径与道路车道的中心线结合起来

解读Autoware.Universe规划模块:Behavior Path Planner_第13张图片
图片:平移式路边起步

视频链接:平移式路边起步是如何工作的

平移式路边起步的参数

参数名 单位 类型 描述 默认值
enable_shift_pull_out [m] bool 是否启用平移式路边起步的标志位 true
shift_pull_out_velocity [m] double 平移式路边起步的速度 2.0
pull_out_sampling_num [m] int 横向变加速度(lateral_jerk)最小到最大范围内的采样数 4
before_pull_out_straight_distance [m] double 拉出起点前的距离 0.0
maximum_lateral_jerk [m] double 最大横向变加速度 2.0
minimum_lateral_jerk [m] double 最小横向变加速度 0.5
minimum_shift_pull_out_distance [m] double 最小平移式路边起步距离 20.0
几何式路边起步(GEOMETRIC PULL OUT)

生成两条曲率不连续的圆弧路径。自我车辆在路径中间停止一次以控制当场的转向。有关算法的详细信息,另请参阅 7

解读Autoware.Universe规划模块:Behavior Path Planner_第14张图片
图片:几何式路边起步

视频链接:几何式路边起步是如何工作的

几何式路边起步的参数

参数名 单位 类型 描述 默认值
enable_geometric_pull_out - bool 是否启用几何式路边起步的标志位 true
geometric_pull_out_velocity [m/s] double 几何式路边起步的速度 1.0
arc_path_interval [m] double 几何式路边起步的圆弧路径的路径点间距 1.0
lane_departure_margin [m] double 偏离右车道的余量 0.2
pull_out_max_steer_angle [rad] double 路径生成的最大方向盘转角 0.26

后向路边起步起点搜索(backward pull out start point search)

解读Autoware.Universe规划模块:Behavior Path Planner_第15张图片
图片:后向路边起步起点搜索(backward pull out start point search)

视频链接:后向路边起步是如何工作的

后向路边起步的参数

参数名 单位 类型 描述 默认值
enable_back - bool 是否向后搜索起点的标志位 true
search_priority - string 在设置为 efficient paths 情况下,使用比较高效的路径,即使后向距离更长。在设置为 short_back_distance 情况下,使用较短的后向距离 efficient paths
max_back_distance [m] double 最大向后距离 15.0
backward_search_resolution [m] double 向后搜索路边起步起点的距离间隔 2.0
backward_path_update_duration [s] double 向后搜索路边起步起点的时间间隔。这可以防止反向驱动和路边起步之间的摆动。* 3.0

* 也就是说避免自车一会向后走(向后搜索),一会儿向前走(路边起步)。

路边起步未实现的部分 / 局限

  • 不允许从右肩车道驶出到左车道。
  • 道路车道的安全性不做判断
    • 不对从车道后方接近的车辆执行碰撞预测。

侧向平移(Side Shift)

侧向平移模块的作用是响应外部指令(如远程操作)横向移动参考路径。

路径生成的参数

解读Autoware.Universe规划模块:Behavior Path Planner_第16张图片
图片:侧向平移路径

图中直线距离余量(straight margin distance)是为了避免突然换挡,计算方式为 max(min_distance_to_start_shifting, ego_speed * time_to_start_shifting) 。平移距离(shifting distance)由变加速度、最小速度和最小距离参数计算得出,如下表所述。最小速度用于防止自车停止时的急剧变化。

侧向平移的参数

参数名 单位 类型 描述 默认值
min_distance_to_start_shifting [m] double 开始平移的最小距离 5.0
time_to_start_shifting [s] double 开始平移的时间 1.0
shifting_lateral_jerk [m/s^3] double 平移横向变加速度 0.2
min_shifting_distance [m] double 最小平移距离 5.0
min_shifting_speed [m/s] double 最小平移速度 5.56

平滑连接目标(Smooth goal connection)

如果目标路径包含目标点,则修改路径中的点,使路径和目标平滑连接。这个过程将改变路径的形状,距离目标为 refine_goal_search_radius_range。注意这个逻辑依赖于后面模块中会执行的插值算法(目前使用的是样条插值),所以以后需要更新。

解读Autoware.Universe规划模块:Behavior Path Planner_第17张图片
图片:平滑连接目标

参考 / 外部链接

该模块下行为树的实现依赖于第三方库:“BehaviorTreeCpp8”。


  1. Autoware官方网站 ↩︎

  2. Autoware.Auto代码库地址 ↩︎

  3. Autoware.Universe代码库地址 ↩︎

  4. Autoware.Universe官方文档主页 ↩︎

  5. Autoware.Universe官方文档:Behavior Path Planner ↩︎

  6. 浅谈行为树(Behavior Trees)与机器人行为规划(Behavior Planning) ↩︎

  7. Hélène Vorobieva, Sébastien Glaser, Nicoleta Minoiu-Enache, Saïd Mammar, Geometric Path Planning for Automatic Parallel Parking in Tiny Spots, IFAC Proceedings Volumes, Volume 45, Issue 24, 2012 ↩︎ ↩︎

  8. BehaviorTreeCpp. ↩︎

你可能感兴趣的:(自动驾驶)