3. AutowareAuto核心模块架构解析

任务说明

本案例要求通过阅读 AutowareAuto 源码与文档,梳理其核心模块划分、各模块职责及模块间的依赖关系,并产出一张架构图。最终交付物为:一份模块清单(含职责说明)与一张依赖关系架构图。

核心模块梳理

AutowareAuto 采用基于 ROS 2 的组件化架构,核心模块按功能域划分如下:

模块职责关键依赖
sensing传感器数据接入(LiDAR、相机、GNSS/IMU),点云预处理与障碍物检测输入autoware_auto_msgs, rclcpp
localization基于NDT配准的点云定位,输出车辆在世界坐标系下的位姿sensing(点云输入), autoware_auto_msgs
perception目标检测、跟踪与分类,输出动态障碍物列表sensing(点云/图像), localization(位姿辅助)
planning全局路径规划(lanelet2)与局部轨迹生成(behavior planning)localization(位姿), perception(障碍物), map(lanelet2)
control轨迹跟踪控制,输出转向/油门/刹车指令planning(轨迹), localization(位姿)
vehicle_interface与底层车辆执行器通信,指令转换与状态反馈control(控制指令), autoware_auto_msgs
mapLanelet2 高精地图加载与查询接口lanelet2, autoware_auto_msgs

依赖关系架构图

sensing 传感器接入/预处理 localization NDT点云定位 perception 检测/跟踪/分类 map Lanelet2地图 planning 全局路径 + 局部轨迹 control 轨迹跟踪控制 vehicle_interface 车辆执行器接口 点云 点云/图像 位姿 障碍物列表 地图数据 目标轨迹 当前位姿 转向/油门/刹车 实线箭头 = 消息/数据流依赖;虚线箭头 = 辅助位姿反馈。所有模块均依赖 autoware_auto_msgs 与 rclcpp 运行时。

源码阅读路径

建议按以下顺序阅读源码以验证上述架构关系(以 AutowareAuto 主仓库为例):

  1. 消息定义:autoware_auto_msgs/msg/ 目录下定义模块间通信的数据结构(如 BoundingBoxArray.msg、Trajectory.msg),是理解依赖关系的入口。
  2. 模块入口:各模块的 *-nodes 包中的 *.cpp 文件包含节点构造函数,其中显式声明的订阅/发布话题即为其依赖与输出。
  3. 启动文件:launch/ 目录下的 .launch.py 文件展示了模块间的实际装配关系,与上图对应。

验证方法

完成架构梳理后,通过以下方式验证正确性:

  • 在源码根目录执行 grep -r "create_subscription" src/ --include="*.cpp" | grep "autoware_auto_msgs",检查各节点订阅的消息类型是否与图中依赖箭头一致。
  • 运行 ros2 launch autoware_auto_launch autoware_auto.launch.py(需已构建工作空间),在另一个终端执行 ros2 node info /sensing_node 等命令,观察实际话题连接是否与架构图匹配。
  • 判定标准:图中每个箭头都能在源码中找到对应的订阅/发布关系,且无遗漏的跨模块直接通信(即所有通信均通过消息话题完成,无隐藏的共享内存或全局变量耦合)。