2. ROS2基础回顾

在自动驾驶系统中,ROS2 并不是一个“可有可无的中间件”,而是连接感知、定位、预测、规划、控制、诊断与云端协同的通信骨架。理解 ROS2 的核心概念,关键不是背定义,而是理解它们在车端实时数据流中的位置、职责与约束。本节围绕节点、话题、服务、动作、参数、Launch、TF2 与 QoS 展开,结合自动驾驶场景说明其含义与典型用法。

核心认知:ROS2 的通信模型可以理解为“计算图 + 数据流 + 配置管理 + 时间空间变换”。节点是计算单元,话题是持续数据流,服务是短请求响应,动作是长任务,参数是运行时配置,Launch 是系统编排,TF2 是坐标变换,QoS 是通信质量契约。

一、节点与话题:感知数据流的主干

节点是 ROS2 中最小的计算单元。在自动驾驶中,一个节点通常对应一个明确功能,例如激光雷达驱动节点、相机解码节点、目标检测节点、多传感器融合节点、轨迹规划节点和控制指令节点。节点通过话题、服务、动作和参数与其他节点交互。

话题采用发布/订阅模型,适合高频、持续、单向的数据流。例如:

# 查看当前话题列表
ros2 topic list

# 查看激光雷达点云频率
ros2 topic hz /lidar/points

# 查看车辆控制指令
ros2 topic echo /vehicle/control_cmd

在自动驾驶中,/sensor/lidar/points、/sensor/camera/image、/perception/objects、/planning/trajectory、/control/command 等话题构成了从感知到控制的主数据链路。话题的优点是解耦、可并行、易扩展;缺点是默认不保证可靠到达,因此必须结合 QoS 使用。

二、服务、动作与参数:从短交互到长任务

服务采用请求/响应模型,适合短时、明确、一次性的交互。例如查询车辆当前模式、请求标定参数、触发一次诊断检查。服务不适合长时间运行的任务,因为调用方会阻塞等待响应。

动作则适合长任务,具有目标、反馈和结果三部分。自动驾驶中的典型动作包括“变道”“靠边停车”“进入泊车模式”。动作允许在执行过程中持续反馈进度,并支持取消,因此比服务更适合行为层任务。

参数用于节点运行时配置,例如检测阈值、控制增益、传感器外参、限速值等。参数可以在启动时设置,也可以运行时动态调整:

# 查看节点参数
ros2 param list /control_node

# 获取参数值
ros2 param get /control_node max_speed

# 运行时设置参数
ros2 param set /control_node max_speed 8.0

在自动驾驶工程中,参数管理必须与版本管理、标定流程和安全审计结合,不能随意在线修改关键安全参数。

三、Launch、TF2 与 QoS:系统编排、空间统一与通信保障

Launch 用于一次性启动多个节点、配置参数、重映射话题、设置命名空间和生命周期。一个自动驾驶系统通常包含几十到上百个节点,手工启动不可维护,因此 Launch 是部署入口。

# 启动自动驾驶感知与规划链路
ros2 launch autodrive_bringup autonomous_drive.launch.py \
  vehicle_id:=av01 \
  use_sim_time:=false

TF2 负责坐标变换,是自动驾驶中“空间统一”的基础。激光雷达、相机、IMU、GNSS、车辆后轴中心、地图坐标系之间必须通过 TF 树建立关系。没有正确的 TF,感知结果无法投影到统一坐标系,规划控制也会失效。

QoS 是 ROS2 相比 ROS1 的重要增强,决定通信的可靠性、历史深度、持久性和截止时间。自动驾驶中不同数据对 QoS 要求不同:

数据/场景 典型 QoS 策略 原因
激光雷达点云 Best Effort + Keep Last 高频大数据,允许少量丢包,优先保证实时性
车辆控制指令 Reliable + Keep Last 控制命令必须可靠到达,丢失可能导致安全风险
地图与静态配置 Reliable + Transient Local 后加入节点也需要获取最新配置
诊断与日志 Reliable + Keep All 需要完整记录,便于复盘与故障定位
ROS2 核心概念与自动驾驶数据流 节点 / 话题 / 服务 / 动作 / 参数 / Launch / TF2 / QoS 传感器节点 LiDAR / Camera / IMU 定位与地图 GNSS / IMU / Map 感知与融合 目标检测 / 跟踪 / 融合 输出 /perception/objects 预测与规划 行为预测 / 轨迹规划 输出 /planning/trajectory 控制节点 输出 /control/command 车辆执行 线控底盘 / 转向 / 制动 话题 话题 话题 话题 话题 服务 / 动作 变道 / 靠边停车 / 诊断 请求-响应 / 目标-反馈-结果 参数 阈值 / 增益 / 外参 运行时配置 Launch 节点编排 / 参数注入 命名空间 / 重映射 TF2 坐标变换树 + QoS 通信质量策略:贯穿感知、规划、控制全链路

四、典型场景与常见误区

以城市道路跟车为例:激光雷达和相机节点发布原始数据;感知节点订阅后输出目标列表;预测规划节点订阅目标列表和定位信息,生成轨迹;控制节点订阅轨迹并输出油门、制动和转向指令。整个链路中,TF2 保证所有目标统一到车辆坐标系,QoS 保证控制指令可靠到达,Launch 负责一键启动,参数负责调整跟车距离和速度上限。

常见误区:把高频传感器数据设为 Reliable,导致网络拥塞和延迟累积;忽略 TF 时间戳,导致感知与定位不同步;用服务执行长任务,造成调用方阻塞;参数散落在代码中,导致部署环境不一致;Launch 文件缺少命名空间,导致多车场景话题冲突。

工程建议:先明确数据频率、实时性、可靠性要求,再选择话题或服务/动作;所有关键话题必须显式配置 QoS;TF 树要定期检查是否存在断链或时间戳异常;参数和 Launch 文件应纳入版本管理,并与车辆配置一一对应。

掌握这些概念后,才能进一步理解自动驾驶系统中的部署、运行管理与故障排查。ROS2 的价值不在于单个概念,而在于它们共同构成了一套可组合、可配置、可观测的车载软件通信与编排体系。