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 | 需要完整记录,便于复盘与故障定位 |
四、典型场景与常见误区
以城市道路跟车为例:激光雷达和相机节点发布原始数据;感知节点订阅后输出目标列表;预测规划节点订阅目标列表和定位信息,生成轨迹;控制节点订阅轨迹并输出油门、制动和转向指令。整个链路中,TF2 保证所有目标统一到车辆坐标系,QoS 保证控制指令可靠到达,Launch 负责一键启动,参数负责调整跟车距离和速度上限。
常见误区:把高频传感器数据设为 Reliable,导致网络拥塞和延迟累积;忽略 TF 时间戳,导致感知与定位不同步;用服务执行长任务,造成调用方阻塞;参数散落在代码中,导致部署环境不一致;Launch 文件缺少命名空间,导致多车场景话题冲突。
工程建议:先明确数据频率、实时性、可靠性要求,再选择话题或服务/动作;所有关键话题必须显式配置 QoS;TF 树要定期检查是否存在断链或时间戳异常;参数和 Launch 文件应纳入版本管理,并与车辆配置一一对应。
掌握这些概念后,才能进一步理解自动驾驶系统中的部署、运行管理与故障排查。ROS2 的价值不在于单个概念,而在于它们共同构成了一套可组合、可配置、可观测的车载软件通信与编排体系。