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

本文深入解析Autoware.Universe的Behavior Path Planner模块,涉及车道跟随、车道变换、避障、靠边停车、路边起步等场景的详细算法和实现。行为树机制用于管理模块激活,确保在各种交通状况下生成安全路径。避让算法包括单个和多个物体情况,平滑路径生成以避免碰撞。靠边停车和路边起步涉及复杂的路径规划和安全检测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

更新日期: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为基础,首先力求传达准确,再行扩展。在专业术语的表达上,尽量尊重原文,往往以中文翻译(原英文表达)的形式,在找不到合理的翻译的情况,则直接使用原英文术语。

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

文章列表

行为路径规划器(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.

当前支持的部分场景
图片:当前支持的部分场景

设计

暂空。

输入 / 输出 / 接口

输入

  • /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 的结果。

当前的行为树结构
图片:当前的行为树结构

车道跟随(Lane Following)

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

特殊情况

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

<think>好的,用户想查找Autoware.universe中velocity_planner的相关文档和教程。首先,我需要确认用户的需求,他们可能是在开发或研究自动驾驶系统,尤其是路径规划模块中的速度规划部分。用户可能已经了解Autoware的基本结构,但需要更深入的技术细节或实现方法。 首先,我应该检查现有的引用内容。引用[1]提到了Mission PlannerBehavior Path Planner,但没有直接提到velocity_planner。引用[2]和[3]主要涉及安装和环境配置,可能帮助不大。不过,引用[1]提到开发者会结合理论与实践,可能暗示在代码库中有相关模块的实现。 接下来,我需要考虑用户可能无法直接找到官方文档的情况。通常开源项目的文档可能分散在不同地方,比如GitHub仓库、官方文档网站或开发者社区。因此,建议用户查阅官方GitHub仓库的源码和文档,特别是velocity_planner模块的代码注释和README文件。此外,官方论坛或Slack频道可能有讨论或教程。 另外,用户可能需要具体的代码示例或配置方法。例如,引用[1]中的代码实践部分,可能velocity_planner的实现也类似,用户需要查看相关源码。此外,建议用户运行仿真测试,如引用[2]提到的使用Awsim联调,这可能帮助他们观察velocity_planner的实际效果。 最后,用户可能需要进一步的问题,比如如何调整参数或集成到自己的系统中,因此生成相关问题能帮助他们深入探索。需要确保回答结构清晰,步骤明确,并提供多种资源渠道,确保用户能找到所需信息。</think>根据Autoware.Universe的架构设计,velocity_planner属于规划模块中的重要组件,主要处理速度剖面生成和动态障碍物规避。以下是相关资料获取途径和技术要点解析: ### 一、核心文档资源 1. **源码级文档** 在`autoware_launch/planning`路径下的`velocity_planner`模块中,其核心算法实现位于: ```cpp autoware.universe/planning/velocity_planner/src/velocity_optimizer.cpp ``` 该文件包含基于QP(二次规划)的速度优化算法实现,通过代价函数平衡舒适性、效率和安全性[^1]。 2. **参数配置文件** 运行参数定义在: ```yaml autoware_launch/planning/config/scenario_planning/motion_velocity_smoother/motion_velocity_smoother.param.yaml ``` 包含最大加速度约束$|a_{max}| \leq 2.5m/s^2$,加加速度约束$|j_{max}| \leq 1.0m/s^3$等关键参数。 ### 二、实践验证方法 ```bash # 启动速度规划可视化 ros2 launch autoware_launch planning_simulator.launch.xml map_path:=${MAP_PATH} vehicle_model:=sample_vehicle sensor_model:=sample_sensor_kit ``` 通过Rviz2的`/planning/motion_velocity_smoother/debug/trajectory`话题可观测速度剖面曲线,绿色轨迹表示优化后的速度分布。 ### 三、关键算法原理 速度规划遵循运动学约束方程: $$ \begin{cases} v_{k+1} = v_k + a_k \Delta t \\ s_{k+1} = s_k + v_k \Delta t + \frac{1}{2}a_k (\Delta t)^2 \end{cases} $$ 其中$v$为速度,$a$为加速度,$s$为位移,$\Delta t$为时间步长[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值