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

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

  • 前言
  • 任务规划器(Mission Planner)
    • 目的
    • 接口
    • 路线段(Route section)
    • 实现
      • Mission Planner
      • Route Planner
    • 局限
  • 参考

更新日期:2022年11月20日

前言

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

任务规划器(Mission Planner)

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

目的

Mission Planner 负责计算出一条从当前自车位姿(current ego pose)起沿着给定的检查点导航至目标位姿(goal pose)的路线。该路线由静态地图上的一系列车道组成。路线规划不考虑动态物体(如行人和其他车辆)和动态地图信息(如阻塞部分车道的道路施工区域)。因此,输出主题仅在给出目标位姿或检查点时才发布,并将被锁定,直到给出新的目标位姿或检查点。

核心实现不依赖于地图格式。但在当前的 Autoware.Universe 中,只支持 Lanelet2 地图格式。

接口

参数(Parameters)

参数名 类型 描述
map_frame string 地图坐标系(frame)名
arrival_check_angle_deg double 目标检查的角度阈值
arrival_check_distance double 目标检查的距离阈值
arrival_check_duration double 目标检查的持续时间阈值

服务(Services)

服务名 类型 描述
/planning/routing/clear_route autoware_adapi_v1_msgs::srv::ClearRoute 路线清除请求
/planning/routing/set_route_points autoware_adapi_v1_msgs::srv::SetRoutePoints 带有位姿航路点(pose waypoints)的路线请求
/planning/routing/set_route autoware_planning_msgs::srv::SetRoute 使用HAD地图格式的路线请求

订阅(Subscriptions)

订阅话题名 类型 描述
input/vector_map autoware_auto_mapping_msgs/HADMapBin Lanelet2格式的矢量地图
input/modified_goal geometry_msgs/PoseStamped 到达检查的目标位姿

发布(Publications)

发布话题名 类型 描述
/planning/routing/route_state autoware_adapi_v1_msgs::msg::RouteState 路线状态
/planning/routing/route autoware_auto_planning_msgs/HADMapRoute 路线
debug/route_marker visualization_msgs::msg::MarkerArray 用于调试的路线标记

路线段(Route section)

解读Autoware.Universe规划模块:Mission Planner_第1张图片
路线段(Route section),类型为 autoware_auto_mapping_msgs/HADMapSegment ,是一条道路的“切片”,将可变道车道集合到一起。请注意,路线的最原子单元是 autoware_auto_mapping_msgs/MapPrimitive,它包含在矢量地图中车道的唯一 id (unique id)及其类型(type)。因此,路线消息(route message)不包含有关车道的几何信息,因为我们不希望规划模块的消息和地图数据结构有依赖关系。

路线段的ROS message包含以下路线段的元素。

  • preferred_primitive_id: 通往目标的首选车道。
  • primitives:同一方向的所有相邻车道,包括首选车道。

实现

Mission Planner

解读Autoware.Universe规划模块:Mission Planner_第2张图片
两个回调函数(目标和检查点)是路线规划的触发器。在 Lanelet2 中规划路线的路线图(routing graph)必须在这些回调之前创建,而这个路线图是在矢量图回调(vector map callback)中创建的。

路线规划(plan route)将在下一节中详细解释。

Route Planner

解读Autoware.Universe规划模块:Mission Planner_第3张图片
路线规划(plan route)将利用包含当前自车位姿和目标位姿的检查点去执行。

plan path between each check points 首先计算距离起始位姿和目标位姿最近的车道。之后,Lanelet2 格式的路线图将会规划出一条连接起始位姿到目标位姿的最短路径。

initialize route lanelets 初始化路线操作器(route handler),并计算 route_lanelets。所有 route_lanelets 都会在路线段中注册,也是规划路径中 lanelets 相邻的 lanelets,将会在规划变道时使用。为了计算 route_lanelets

  1. 规划路径的所有相邻(右和左)车道是可变车道的,被存储为 route_lanelets
  2. 规划路径的所有相邻(右和左)车道是不可变车道的,被存储为 candidate_lanelets
  3. 如果每个 candidate_lanelets 的后续和先前的 lanelets 都是 route_lanelets,则 candidate_lanelets 被注册为 route_lanelets
    • 这是因为即使 candidate_lanelet(相邻车道)是不可变车道,如果 candidate_lanelet 的后续和先前的 lanelet 是 route_lanelets,我们可以通过 candidate_lanelet 而无需变道。

get preferred lanelets 借助路线操作器(route handler)从 route_lanelets 中提取 preferred_primitive_id

create route sections 借助路线操作器(route handler)从 route_lanelets 中为每个路线段提取 primitives,并创建路线段。

局限

  • 动态物体和动态地图信息不在路线规划(Route planning)的考虑范畴。
  • 不支持环形路线。

参考


  1. Autoware官方网站 ↩︎

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

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

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

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

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