
第2章 核心消息与数据结构免责声明本文档为学术研究与技术学习目的而编写基于Autoware开源项目Apache 2.0许可证的源码分析。文档内容力求准确但不保证完全无误仅供参考。读者在实际应用时应以官方文档和源码为准。本文档不涉及任何商业用途所有代码示例均来自开源项目。如有侵权请联系删除。摘要消息定义是ROS 2系统中模块间通信的契约。Autoware设计了完整的消息体系包括面向外部的标准消息autoware_msgs、应用层API消息autoware_adapi_msgs、内部通信消息autoware_internal_msgs以及Tier IV扩展消息。本章将深入解析这些消息的设计理念、数据结构、使用场景和演进历史帮助读者理解Autoware各模块如何通过消息实现松耦合的通信架构。掌握消息体系是理解Autoware数据流和开发自定义功能的基础。目录2.1 消息体系概述2.1.1 消息分层设计公共/内部/API2.1.2 消息演进与兼容性2.2 autoware_msgs核心消息2.2.1 感知消息DetectedObject/TrackedObject2.2.2 规划消息Trajectory/Path2.2.3 控制消息Control Command2.2.4 地图消息HADMapBin2.3 autoware_adapi_msgs应用层API2.3.1 车辆状态消息2.3.2 任务管理消息2.3.3 系统监控消息2.4 autoware_internal_msgs内部消息2.4.1 模块间内部通信2.4.2 调试与诊断消息2.5 tier4_autoware_msgs扩展消息2.5.1 Tier IV特有功能消息2.5.2 与标准消息的关系参考资料2.1 消息体系概述2.1.1 消息分层设计公共/内部/APIAutoware采用三层消息架构明确区分不同用途的消息定义实现关注点分离和演进独立性。三层消息架构┌─────────────────────────────────────────┐ │ autoware_adapi_msgs (应用层API) │ │ - 面向外部应用和上层系统 │ │ - 稳定的公共接口 │ │ - 版本兼容性保证 │ └─────────────────────────────────────────┘ ↑ 调用 ┌─────────────────────────────────────────┐ │ autoware_msgs (核心公共消息) │ │ - 模块间标准通信接口 │ │ - 感知/规划/控制等核心消息 │ │ - 面向社区开发者 │ └─────────────────────────────────────────┘ ↑ 使用 ┌─────────────────────────────────────────┐ │ autoware_internal_msgs (内部消息) │ │ - 模块内部实现细节 │ │ - 调试和诊断信息 │ │ - 可以快速迭代演进 │ └─────────────────────────────────────────┘源码路径:core/autoware_msgs/- 核心公共消息core/autoware_adapi_msgs/- 应用层API消息core/autoware_internal_msgs/- 内部消息universe/external/tier4_autoware_msgs/- Tier IV扩展消息各层消息特点对比消息层级稳定性可见性变更频率版本保证典型用途autoware_adapi_msgs极高公开API极低严格语义化版本外部应用集成autoware_msgs高公开接口低语义化版本模块间通信autoware_internal_msgs中内部使用中无保证模块内实现tier4_autoware_msgs中扩展功能中跟随Tier IV特定功能扩展设计原则向上稳定上层消息ADAPI变更频率低于下层消息向下封装上层消息不直接暴露下层实现细节横向解耦不同模块的消息定义独立演进纵向兼容同一消息的版本升级保持向后兼容尽可能2.1.2 消息演进与兼容性Autoware消息遵循语义化版本控制Semantic Versioning版本号格式为MAJOR.MINOR.PATCH。版本变更规则MAJOR主版本号不兼容的消息结构变更删除字段修改字段类型修改字段语义MINOR次版本号向后兼容的功能新增添加新字段必须有默认值添加新消息类型PATCH补丁版本号向后兼容的问题修复文档更新注释修正示例DetectedObject消息演进# v1.0.0 - 初始版本Header header string label float32 score geometry_msgs/Pose pose# v1.1.0 - 添加尺寸信息向后兼容Header header string label float32 score geometry_msgs/Pose pose geometry_msgs/Vector3 size# 新增字段# v2.0.0 - 修改置信度字段类型不兼容Header header string label float64 score# 类型从float32改为float64破坏兼容性geometry_msgs/Pose pose geometry_msgs/Vector3 size兼容性策略消息转换节点提供v1到v2的自动转换deprecation期标记为废弃但保留至少2个大版本迁移指南提供详细的升级文档查看消息版本# 查看消息定义ros2 interface show autoware_perception_msgs/msg/DetectedObject# 查看包版本ros2 pkg xml autoware_perception_msgs2.2 autoware_msgs核心消息autoware_msgs是Autoware最核心的消息包集合定义了感知、规划、控制等模块间的标准通信接口。源码路径:core/autoware_msgs/消息包组织结构autoware_msgs/ ├── autoware_perception_msgs/ # 感知相关消息 ├── autoware_planning_msgs/ # 规划相关消息 ├── autoware_control_msgs/ # 控制相关消息 ├── autoware_vehicle_msgs/ # 车辆状态消息 ├── autoware_map_msgs/ # 地图相关消息 └── autoware_system_msgs/ # 系统管理消息2.2.1 感知消息DetectedObject/TrackedObject感知消息用于传递环境中检测到的目标信息是感知模块输出和规划模块输入的核心数据结构。DetectedObject - 检测目标源码路径:core/autoware_msgs/autoware_perception_msgs/msg/DetectedObject.msg# DetectedObject.msg - 单个检测目标std_msgs/Header header# 目标分类ObjectClassification[]classification# 可能的分类及概率float32 existence_probability# 目标存在概率 [0.0, 1.0]# 目标位姿3D空间geometry_msgs/PoseWithCovariance kinematics.pose_with_covariance geometry_msgs/TwistWithCovariance kinematics.twist_with_covariance geometry_msgs/AccelWithCovariance kinematics.accel_with_covariance# 目标形状Shape shape uint8 BOUNDING_BOX0 uint8 CYLINDER1 uint8 POLYGON2 uint8 type geometry_msgs/Vector3 dimensions# 长宽高米geometry_msgs/Polygon footprint# 2D轮廓多边形字段说明字段类型说明headerstd_msgs/Header时间戳和坐标系classificationObjectClassification[]目标分类car/pedestrian/bicycle等及置信度existence_probabilityfloat32目标真实存在的概率用于处理检测不确定性kinematics.pose_with_covariancePoseWithCovariance位姿及协方差矩阵6x6kinematics.twist_with_covarianceTwistWithCovariance速度及协方差矩阵shapeShape目标形状表示包围盒/圆柱/多边形ObjectClassification定义# ObjectClassification.msguint8 label uint8 UNKNOWN0 uint8 CAR1 uint8 TRUCK2 uint8 BUS3 uint8 TRAILER4 uint8 MOTORCYCLE5 uint8 BICYCLE6 uint8 PEDESTRIAN7 float32 probability# 该分类的置信度 [0.0, 1.0]使用示例// 创建检测目标消息autoware_perception_msgs::msg::DetectedObject obj;obj.header.frame_idbase_link;obj.header.stampthis-now();// 设置分类autoware_perception_msgs::msg::ObjectClassification classification;classification.labelObjectClassification::CAR;classification.probability0.95;obj.classification.push_back(classification);// 设置位姿obj.kinematics.pose_with_covariance.pose.position.x10.0;obj.kinematics.pose_with_covariance.pose.position.y2.0;obj.kinematics.pose_with_covariance.pose.position.z0.0;// 设置尺寸长宽高obj.shape.typeShape::BOUNDING_BOX;obj.shape.dimensions.x4.5;// 长度obj.shape.dimensions.y1.8;// 宽度obj.shape.dimensions.z1.5;// 高度TrackedObject - 跟踪目标源码路径:core/autoware_msgs/autoware_perception_msgs/msg/TrackedObject.msg# TrackedObject.msg - 跟踪后的目标包含历史信息std_msgs/Header header unique_identifier_msgs/UUID object_id# 唯一跟踪IDObjectClassification[]classification float32 existence_probability# 运动学信息包含历史geometry_msgs/PoseWithCovariance kinematics.pose_with_covariance geometry_msgs/TwistWithCovariance kinematics.twist_with_covariance geometry_msgs/AccelWithCovariance kinematics.accel_with_covariance# 预测轨迹PredictedPath[]predicted_paths Shape shapeTrackedObject vs DetectedObject特性DetectedObjectTrackedObject用途单帧检测结果多帧跟踪结果ID无持久ID有唯一UUID速度估计可能不准确基于多帧估计更准确预测轨迹无有未来轨迹预测输出模块检测器跟踪器输入模块跟踪器规划器PredictedPath - 预测轨迹# PredictedPath.msgfloat32 confidence# 该轨迹的概率geometry_msgs/Pose[]path# 预测的未来位姿序列builtin_interfaces/Duration[]time_step# 每个位姿对应的时间2.2.2 规划消息Trajectory/Path规划消息用于传递车辆的期望运动轨迹是规划模块输出和控制模块输入的关键接口。Trajectory - 轨迹源码路径:core/autoware_msgs/autoware_planning_msgs/msg/Trajectory.msg# Trajectory.msg - 完整轨迹包含时间和速度std_msgs/Header header TrajectoryPoint[]points# 轨迹点序列TrajectoryPoint定义# TrajectoryPoint.msg - 单个轨迹点builtin_interfaces/Duration time_from_start# 距起点时间# 位姿geometry_msgs/Pose pose geometry_msgs/Point position# 位置 (x, y, z)geometry_msgs/Quaternion orientation# 朝向四元数# 运动参数float32 longitudinal_velocity_mps# 纵向速度米/秒float32 lateral_velocity_mps# 横向速度米/秒float32 acceleration_mps2# 加速度米/秒²float32 heading_rate_rps# 航向角速度弧度/秒# 控制约束float32 front_wheel_angle_rad# 前轮转角弧度float32 rear_wheel_angle_rad# 后轮转角弧度四轮转向Trajectory使用示例// 创建轨迹消息autoware_planning_msgs::msg::Trajectory trajectory;trajectory.header.frame_idmap;trajectory.header.stampthis-now();// 添加轨迹点for(inti0;i100;i){autoware_planning_msgs::msg::TrajectoryPoint point;// 时间每个点间隔0.1秒point.time_from_start.sec0;point.time_from_start.nanoseci*100000000;// 0.1秒 100ms// 位置直线轨迹point.pose.position.xi*0.5;// 每个点间隔0.5米point.pose.position.y0.0;point.pose.position.z0.0;// 速度point.longitudinal_velocity_mps5.0;// 5 m/spoint.acceleration_mps20.0;trajectory.points.push_back(point);}Path - 路径源码路径:core/autoware_msgs/autoware_planning_msgs/msg/Path.msg# Path.msg - 几何路径不包含时间信息std_msgs/Header header PathPoint[]pointsPath vs Trajectory特性PathTrajectory时间信息无有time_from_start速度信息可选/简化详细纵向/横向速度用途几何路径规划运动规划包含动力学输出模块行为规划运动规划输入模块运动规划控制器2.2.3 控制消息Control Command控制消息用于向车辆底盘发送控制指令。Control - 控制命令源码路径:core/autoware_msgs/autoware_control_msgs/msg/Control.msg# Control.msgstd_msgs/Header header# 横向控制float32 steering_angle# 目标转向角弧度float32 steering_angle_velocity# 转向角速度弧度/秒# 纵向控制float32 speed# 目标速度米/秒float32 acceleration# 目标加速度米/秒²float32 jerk# 加速度变化率米/秒³控制命令使用示例// 创建控制命令autoware_control_msgs::msg::Control cmd;cmd.header.stampthis-now();// 设置转向cmd.steering_angle0.1;// 0.1弧度 ≈ 5.7度cmd.steering_angle_velocity0.5;// 转向速度限制// 设置速度cmd.speed10.0;// 10 m/s ≈ 36 km/hcmd.acceleration0.5;// 0.5 m/s²// 发布命令control_pub_-publish(cmd);2.2.4 地图消息HADMapBin地图消息用于传输高精度地图数据。源码路径:core/autoware_msgs/autoware_map_msgs/msg/LaneletMapBin.msg# LaneletMapBin.msg - 二进制格式的Lanelet2地图std_msgs/Header header string format_version# 地图格式版本string map_version# 地图数据版本uint8[]data# 序列化的Lanelet2地图数据地图加载示例#includelanelet2_core/LaneletMap.h#includelanelet2_io/Io.h// 订阅地图消息voidmapCallback(constautoware_map_msgs::msg::LaneletMapBin::SharedPtr msg){// 反序列化地图数据std::stringstream ss;for(constautobyte:msg-data){ssbyte;}// 解析Lanelet2地图lanelet::LaneletMapPtr maplanelet::utils::loadBinary(ss);RCLCPP_INFO(get_logger(),Loaded map with %zu lanelets,map-laneletLayer.size());}2.3 autoware_adapi_msgs应用层APIautoware_adapi_msgs定义了面向外部应用的稳定API接口用于上层系统与Autoware集成。源码路径:core/autoware_adapi_msgs/设计目标提供简洁、稳定的外部接口隔离内部实现细节保证长期向后兼容性支持多种编程语言绑定2.3.1 车辆状态消息VehicleStatus - 车辆状态# VehicleStatus.msgstd_msgs/Header header# 位置与姿态geometry_msgs/Pose pose# 速度信息float32 velocity# 车速米/秒float32 longitudinal_velocity float32 lateral_velocity float32 heading_rate# 航向角速度# 转向状态float32 steering_angle# 当前转向角# 档位uint8 gear uint8 GEAR_DRIVE1 uint8 GEAR_REVERSE2 uint8 GEAR_PARK3 uint8 GEAR_NEUTRAL4# 信号灯bool turn_signal_left bool turn_signal_right bool hazard_light2.3.2 任务管理消息RouteRequest - 路由请求# RouteRequest.srv (Service)# Requestgeometry_msgs/Pose goal_pose geometry_msgs/Pose[]waypoints# 可选的中间点---# Responsebool success string message unique_identifier_msgs/UUID route_idOperationMode - 操作模式# OperationMode.msguint8 mode uint8 STOP0# 停止模式uint8 AUTONOMOUS1# 自动驾驶模式uint8 LOCAL2# 本地操作模式uint8 REMOTE3# 远程操作模式2.3.3 系统监控消息SystemStatus - 系统状态# SystemStatus.msgstd_msgs/Header header# 整体状态uint8 status uint8 INITIALIZING0 uint8 READY1 uint8 RUNNING2 uint8 ERROR3 uint8 EMERGENCY4# 子系统状态ComponentStatus[]componentsComponentStatus:string name uint8 status string message2.4 autoware_internal_msgs内部消息autoware_internal_msgs定义模块内部使用的消息不保证稳定性可以快速迭代。源码路径:core/autoware_internal_msgs/2.4.1 模块间内部通信内部消息通常用于算法模块的中间结果传递性能优化的专用数据结构实验性功能的消息定义示例点云处理中间结果# ClusterIndices.msg内部消息std_msgs/Header header int32[][]indices# 点云聚类索引2.4.2 调试与诊断消息内部消息还包含大量调试信息# DetectionDebug.msgstd_msgs/Header header float32 processing_time_ms# 处理耗时int32 input_points_count# 输入点数int32 detected_objects_count# 检测目标数string algorithm_name# 使用的算法2.5 tier4_autoware_msgs扩展消息Tier IV公司贡献了额外的消息定义支持特定功能或硬件。源码路径:universe/external/tier4_autoware_msgs/2.5.1 Tier IV特有功能消息包括但不限于高级感知功能多传感器融合特定硬件接口Tier IV自研传感器商业化功能远程监控、车队管理2.5.2 与标准消息的关系扩展关系Tier IV消息通常扩展标准消息转换节点提供标准消息与Tier IV消息的双向转换社区贡献部分Tier IV消息逐渐被吸收进标准消息参考资料官方文档Autoware Messages Documentation - 消息接口文档ROS 2 Interface Design - ROS 2消息设计原则源码仓库autoware_msgs - 核心消息定义autoware_adapi_msgs - 应用层API消息autoware_internal_msgs - 内部消息tier4_autoware_msgs - Tier IV扩展消息技术标准Semantic Versioning - 语义化版本控制规范ROS 2 Message Definition - ROS 2消息定义语法