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 |
| map | Lanelet2 高精地图加载与查询接口 | lanelet2, autoware_auto_msgs |
依赖关系架构图
源码阅读路径
建议按以下顺序阅读源码以验证上述架构关系(以 AutowareAuto 主仓库为例):
- 消息定义:
autoware_auto_msgs/msg/目录下定义模块间通信的数据结构(如BoundingBoxArray.msg、Trajectory.msg),是理解依赖关系的入口。 - 模块入口:各模块的
*-nodes包中的*.cpp文件包含节点构造函数,其中显式声明的订阅/发布话题即为其依赖与输出。 - 启动文件:
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等命令,观察实际话题连接是否与架构图匹配。 - 判定标准:图中每个箭头都能在源码中找到对应的订阅/发布关系,且无遗漏的跨模块直接通信(即所有通信均通过消息话题完成,无隐藏的共享内存或全局变量耦合)。